Add validation that the info size returned from the metric stream info
query is not exceeded when checked against the allocated buffer size.
If the firmware returns a size larger than the buffer, reject the
operation with -EOVERFLOW instead of proceeding with an incorrect
buffer copy.

Fixes: cdfad4db7756 ("accel/ivpu: Add NPU profiling support")
Cc: <[email protected]> # v6.18+
Signed-off-by: Andrzej Kacprowski <[email protected]>
---
 drivers/accel/ivpu/ivpu_ms.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/accel/ivpu/ivpu_ms.c b/drivers/accel/ivpu/ivpu_ms.c
index be43851f5f32..cd176e77b9a0 100644
--- a/drivers/accel/ivpu/ivpu_ms.c
+++ b/drivers/accel/ivpu/ivpu_ms.c
@@ -291,6 +291,13 @@ int ivpu_ms_get_info_ioctl(struct drm_device *dev, void 
*data, struct drm_file *
        if (ret)
                goto unlock;
 
+       if (info_size > ivpu_bo_size(bo)) {
+               ivpu_warn_ratelimited(vdev, "MS info overflow: %#llx > %#zx\n",
+                                     info_size, ivpu_bo_size(bo));
+               ret = -EOVERFLOW;
+               goto unlock;
+       }
+
        if (args->buffer_size < info_size) {
                ret = -ENOSPC;
                goto unlock;
-- 
2.43.0

Reply via email to