diff options
| author | Mohammed EL Kadiri <med08elkadiri@gmail.com> | 2026-06-10 13:56:54 +0100 |
|---|---|---|
| committer | Bryan O'Donoghue <bod@kernel.org> | 2026-07-30 10:47:43 +0100 |
| commit | a51cea23e409278f6e2ea072280aba93cc1dd75e (patch) | |
| tree | c64a6437ed108fc1486dda9c39906aba1684a990 | |
| parent | 5eebacbc9a38e1019854ea5f86e367a4d5116387 (diff) | |
| download | linux-next-a51cea23e409278f6e2ea072280aba93cc1dd75e.tar.gz linux-next-a51cea23e409278f6e2ea072280aba93cc1dd75e.zip | |
media: venus: fix payload size returned by parse_caps() and parse_alloc_mode()
parse_caps() and parse_alloc_mode() return only the size of their fixed
header fields, excluding the flexible array payload. hfi_parser() uses
this return value to advance through the firmware response buffer, so
underreporting causes parser desynchronization.
Return the full consumed size (header + entries), matching the correct
pattern used by parse_profile_level().
Fixes: 9edaaa8e3e15 ("media: venus: hfi_parser: refactor hfi packet parsing logic")
Cc: stable@vger.kernel.org
Signed-off-by: Mohammed EL Kadiri <med08elkadiri@gmail.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Bryan O'Donoghue <bod@kernel.org>
| -rw-r--r-- | drivers/media/platform/qcom/venus/hfi_parser.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/media/platform/qcom/venus/hfi_parser.c b/drivers/media/platform/qcom/venus/hfi_parser.c index b1657443f23f..8284fcc78bb1 100644 --- a/drivers/media/platform/qcom/venus/hfi_parser.c +++ b/drivers/media/platform/qcom/venus/hfi_parser.c @@ -85,7 +85,7 @@ parse_alloc_mode(struct venus_core *core, u32 codecs, u32 domain, void *data) type++; } - return sizeof(*mode); + return mode->num_entries * sizeof(u32) + sizeof(*mode); } static void fill_profile_level(struct hfi_plat_caps *cap, const void *data, @@ -146,7 +146,7 @@ parse_caps(struct venus_core *core, u32 codecs, u32 domain, void *data) for_each_codec(core->caps, ARRAY_SIZE(core->caps), codecs, domain, fill_caps, caps_arr, num_caps); - return sizeof(*caps); + return num_caps * sizeof(*cap) + sizeof(u32); } static void fill_raw_fmts(struct hfi_plat_caps *cap, const void *fmts, |
