]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
watchdog: ziirave_wdt: check record length in ziirave_firm_verify()
authorDan Carpenter <dan.carpenter@linaro.org>
Wed, 28 May 2025 20:22:19 +0000 (23:22 +0300)
committerWim Van Sebroeck <wim@linux-watchdog.org>
Wed, 16 Jul 2025 16:05:00 +0000 (18:05 +0200)
The "rec->len" value comes from the firmware.  We generally do
trust firmware, but it's always better to double check.  If
the length value is too large it would lead to memory corruption
when we set "data[i] = ret;"

Fixes: 217209db0204 ("watchdog: ziirave_wdt: Add support to upload the firmware.")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/3b58b453f0faa8b968c90523f52c11908b56c346.1748463049.git.dan.carpenter@linaro.org
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
drivers/watchdog/ziirave_wdt.c

index fcc1ba02e75b6631d758fc0c77c66f84005fae97..5c6e3fa001d885991e364860e376892b23b93355 100644 (file)
@@ -302,6 +302,9 @@ static int ziirave_firm_verify(struct watchdog_device *wdd,
                const u16 len = be16_to_cpu(rec->len);
                const u32 addr = be32_to_cpu(rec->addr);
 
+               if (len > sizeof(data))
+                       return -EINVAL;
+
                if (ziirave_firm_addr_readonly(addr))
                        continue;