Patch "HID: cp2112: prevent a buffer overflow in cp2112_xfer()" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    HID: cp2112: prevent a buffer overflow in cp2112_xfer()

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     hid-cp2112-prevent-a-buffer-overflow-in-cp2112_xfer.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 579d7a117cf7fae2be6b0731294dc6d8a06ed2c0
Author: Harshit Mogalapalli <harshit.m.mogalapalli@xxxxxxxxxx>
Date:   Wed Jun 8 05:26:09 2022 -0700

    HID: cp2112: prevent a buffer overflow in cp2112_xfer()
    
    [ Upstream commit 381583845d19cb4bd21c8193449385f3fefa9caf ]
    
    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: 542134c0375b ("HID: cp2112: Fix I2C_BLOCK_DATA transactions")
    Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@xxxxxxxxxx>
    Signed-off-by: Jiri Kosina <jkosina@xxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/hid/hid-cp2112.c b/drivers/hid/hid-cp2112.c
index db1b55df0d13..340408f8c8ab 100644
--- a/drivers/hid/hid-cp2112.c
+++ b/drivers/hid/hid-cp2112.c
@@ -787,6 +787,11 @@ static int cp2112_xfer(struct i2c_adapter *adap, u16 addr,
 		data->word = le16_to_cpup((__le16 *)buf);
 		break;
 	case I2C_SMBUS_I2C_BLOCK_DATA:
+		if (read_length > I2C_SMBUS_BLOCK_MAX) {
+			ret = -EINVAL;
+			goto power_normal;
+		}
+
 		memcpy(data->block + 1, buf, read_length);
 		break;
 	case I2C_SMBUS_BLOCK_DATA:



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux