On Mon Nov 3 19:57:49 2025 +0800, Edward Adam Davis wrote:
> syzbot reported a uninit-value in pctv452e_i2c_msg. [1]
>
> When the snd_len or rcv_len check fails and jumps to failed, buf is
> uninitialized, triggering the uninit-value issue.
>
> Move the snd/rcv length check before kmalloc, and return -EINVAL directly
> if the condition is met.
>
> [1]
> BUG: KMSAN: uninit-value in hex_string+0x681/0x740 lib/vsprintf.c:1220
> pctv452e_i2c_msg+0x82a/0x8f0 drivers/media/usb/dvb-usb/pctv452e.c:467
> pctv452e_i2c_xfer+0x2e6/0x4c0 drivers/media/usb/dvb-usb/pctv452e.c:502
>
> Reported-by: [email protected]
> Closes: https://syzkaller.appspot.com/bug?extid=480edd2cadb85ddb4bbe
> Signed-off-by: Edward Adam Davis <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>
Patch committed.
Thanks,
Hans Verkuil
drivers/media/usb/dvb-usb/pctv452e.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
---
diff --git a/drivers/media/usb/dvb-usb/pctv452e.c
b/drivers/media/usb/dvb-usb/pctv452e.c
index 5094de9a312e..bc7a224d829e 100644
--- a/drivers/media/usb/dvb-usb/pctv452e.c
+++ b/drivers/media/usb/dvb-usb/pctv452e.c
@@ -422,16 +422,15 @@ static int pctv452e_i2c_msg(struct dvb_usb_device *d, u8
addr,
u8 id;
int ret;
+ if (snd_len > 64 - 7 || rcv_len > 64 - 7)
+ return -EINVAL;
+
buf = kmalloc(64, GFP_KERNEL);
if (!buf)
return -ENOMEM;
id = state->c++;
- ret = -EINVAL;
- if (snd_len > 64 - 7 || rcv_len > 64 - 7)
- goto failed;
-
buf[0] = SYNC_BYTE_OUT;
buf[1] = id;
buf[2] = PCTV_CMD_I2C;
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]