Validate the conversion of the DMC firmware size from dwords to bytes
using check_mul_overflow() before calculating the firmware payload size.

Assisted-by: Claude-Code:Sonnet-5
Signed-off-by: Dibin Moolakadan Subrahmanian 
<[email protected]>
---
 drivers/gpu/drm/i915/display/intel_dmc.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dmc.c 
b/drivers/gpu/drm/i915/display/intel_dmc.c
index d1a69eab7e64..2180d4b7d7ec 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc.c
@@ -1176,7 +1176,12 @@ static u32 parse_dmc_fw_header(struct intel_dmc *dmc,
        rem_size -= header_len_bytes;
 
        /* fw_size is in dwords, so multiplied by 4 to convert into bytes. */
-       payload_size = dmc_header->fw_size * 4;
+       if (check_mul_overflow(dmc_header->fw_size, 4u, &payload_size)) {
+               drm_err(display->drm, "DMC fw_size too large (%u dwords)\n",
+                       dmc_header->fw_size);
+               return 0;
+       }
+
        if (rem_size < payload_size)
                goto error_truncated;
 
-- 
2.43.0

Reply via email to