]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
i2c: tegra: check msg length in SMBUS block read
authorAkhil R <akhilrajeev@nvidia.com>
Thu, 24 Apr 2025 05:33:20 +0000 (11:03 +0530)
committerAndi Shyti <andi@smida.it>
Mon, 19 May 2025 20:23:57 +0000 (22:23 +0200)
For SMBUS block read, do not continue to read if the message length
passed from the device is '0' or greater than the maximum allowed bytes.

Signed-off-by: Akhil R <akhilrajeev@nvidia.com>
Acked-by: Thierry Reding <treding@nvidia.com>
Link: https://lore.kernel.org/r/20250424053320.19211-1-akhilrajeev@nvidia.com
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
drivers/i2c/busses/i2c-tegra.c

index 87976e99e6d001e3a10e52c1219bd73cd34a2ac8..049b4d154c233705a50949ef8ff16a7c63ee2163 100644 (file)
@@ -1395,6 +1395,11 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
                        ret = tegra_i2c_xfer_msg(i2c_dev, &msgs[i], MSG_END_CONTINUE);
                        if (ret)
                                break;
+
+                       /* Validate message length before proceeding */
+                       if (msgs[i].buf[0] == 0 || msgs[i].buf[0] > I2C_SMBUS_BLOCK_MAX)
+                               break;
+
                        /* Set the msg length from first byte */
                        msgs[i].len += msgs[i].buf[0];
                        dev_dbg(i2c_dev->dev, "reading %d bytes\n", msgs[i].len);