Skip to content

Commit 7bf744f

Browse files
ZhangShurongHans Verkuil
authored andcommitted
media: dvb-usb-v2: af9035: Fix null-ptr-deref in af9035_i2c_master_xfer
In af9035_i2c_master_xfer, msg is controlled by user. When msg[i].buf is null and msg[i].len is zero, former checks on msg[i].buf would be passed. Malicious data finally reach af9035_i2c_master_xfer. If accessing msg[i].buf[0] without sanity check, null ptr deref would happen. We add check on msg[i].len to prevent crash. Similar commit: commit 0ed554f ("media: dvb-usb: az6027: fix null-ptr-deref in az6027_i2c_xfer()") Signed-off-by: Zhang Shurong <[email protected]> Signed-off-by: Hans Verkuil <[email protected]>
1 parent d5b3214 commit 7bf744f

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

drivers/media/usb/dvb-usb-v2/af9035.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,8 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap,
322322
ret = -EOPNOTSUPP;
323323
} else if ((msg[0].addr == state->af9033_i2c_addr[0]) ||
324324
(msg[0].addr == state->af9033_i2c_addr[1])) {
325+
if (msg[0].len < 3 || msg[1].len < 1)
326+
return -EOPNOTSUPP;
325327
/* demod access via firmware interface */
326328
u32 reg = msg[0].buf[0] << 16 | msg[0].buf[1] << 8 |
327329
msg[0].buf[2];
@@ -381,17 +383,16 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap,
381383
ret = -EOPNOTSUPP;
382384
} else if ((msg[0].addr == state->af9033_i2c_addr[0]) ||
383385
(msg[0].addr == state->af9033_i2c_addr[1])) {
386+
if (msg[0].len < 3)
387+
return -EOPNOTSUPP;
384388
/* demod access via firmware interface */
385389
u32 reg = msg[0].buf[0] << 16 | msg[0].buf[1] << 8 |
386390
msg[0].buf[2];
387391

388392
if (msg[0].addr == state->af9033_i2c_addr[1])
389393
reg |= 0x100000;
390394

391-
ret = (msg[0].len >= 3) ? af9035_wr_regs(d, reg,
392-
&msg[0].buf[3],
393-
msg[0].len - 3)
394-
: -EOPNOTSUPP;
395+
ret = af9035_wr_regs(d, reg, &msg[0].buf[3], msg[0].len - 3);
395396
} else {
396397
/* I2C write */
397398
u8 buf[MAX_XFER_SIZE];

0 commit comments

Comments
 (0)