Skip to content

Commit 3815838

Browse files
harshimogalapalliJiri Kosina
authored andcommitted
HID: cp2112: prevent a buffer overflow in cp2112_xfer()
Smatch warnings: drivers/hid/hid-cp2112.c:793 cp2112_xfer() error: __memcpy() 'data->block[1]' too small (33 vs 255) drivers/hid/hid-cp2112.c:793 cp2112_xfer() error: __memcpy() 'buf' too small (64 vs 255) The 'read_length' variable is provided by 'data->block[0]' which comes from user and it(read_length) can take a value between 0-255. Add an upper bound to 'read_length' variable to prevent a buffer overflow in memcpy(). Fixes: 542134c ("HID: cp2112: Fix I2C_BLOCK_DATA transactions") Signed-off-by: Harshit Mogalapalli <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent db925d8 commit 3815838

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

drivers/hid/hid-cp2112.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,11 @@ static int cp2112_xfer(struct i2c_adapter *adap, u16 addr,
790790
data->word = le16_to_cpup((__le16 *)buf);
791791
break;
792792
case I2C_SMBUS_I2C_BLOCK_DATA:
793+
if (read_length > I2C_SMBUS_BLOCK_MAX) {
794+
ret = -EINVAL;
795+
goto power_normal;
796+
}
797+
793798
memcpy(data->block + 1, buf, read_length);
794799
break;
795800
case I2C_SMBUS_BLOCK_DATA:

0 commit comments

Comments
 (0)