]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: dvb-usb: pctv452e: move snd/rcv len check before kmalloc
authorEdward Adam Davis <eadavis@qq.com>
Mon, 3 Nov 2025 11:57:49 +0000 (19:57 +0800)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Tue, 4 Nov 2025 12:31:02 +0000 (13:31 +0100)
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: syzbot+480edd2cadb85ddb4bbe@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=480edd2cadb85ddb4bbe
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/usb/dvb-usb/pctv452e.c

index 5094de9a312e86ee7c04b4e8612954e859410b2e..bc7a224d829e31da177a6e7b74e55957ddab5d08 100644 (file)
@@ -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;