On Thu Feb 20 22:50:11 2025 +0530, Vikash Garodia wrote:
> sfr->buf_size is in shared memory and can be modified by malicious user.
> OOB write is possible when the size is made higher than actual sfr data
> buffer. Cap the size to allocated size for such cases.
> 
> Cc: sta...@vger.kernel.org
> Fixes: d96d3f30c0f2 ("[media] media: venus: hfi: add Venus HFI files")
> Reviewed-by: Bryan O'Donoghue <bryan.odonog...@linaro.org>
> Signed-off-by: Vikash Garodia <quic_vgaro...@quicinc.com>
> Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/qcom/venus/hfi_venus.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

---

diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c 
b/drivers/media/platform/qcom/venus/hfi_venus.c
index 36d3a37db4e8..b5f2ea879950 100644
--- a/drivers/media/platform/qcom/venus/hfi_venus.c
+++ b/drivers/media/platform/qcom/venus/hfi_venus.c
@@ -1041,18 +1041,26 @@ static void venus_sfr_print(struct venus_hfi_device 
*hdev)
 {
        struct device *dev = hdev->core->dev;
        struct hfi_sfr *sfr = hdev->sfr.kva;
+       u32 size;
        void *p;
 
        if (!sfr)
                return;
 
-       p = memchr(sfr->data, '\0', sfr->buf_size);
+       size = sfr->buf_size;
+       if (!size)
+               return;
+
+       if (size > ALIGNED_SFR_SIZE)
+               size = ALIGNED_SFR_SIZE;
+
+       p = memchr(sfr->data, '\0', size);
        /*
         * SFR isn't guaranteed to be NULL terminated since SYS_ERROR indicates
         * that Venus is in the process of crashing.
         */
        if (!p)
-               sfr->data[sfr->buf_size - 1] = '\0';
+               sfr->data[size - 1] = '\0';
 
        dev_err_ratelimited(dev, "SFR message from FW: %s\n", sfr->data);
 }

Reply via email to