]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Jun 2025 10:07:33 +0000 (11:07 +0100)
[ Upstream commit a6e04f05ce0b070ab39d5775580e65c7d943da0b ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/i2c/busses/i2c-tegra.c

index f7b4977d66496d7e1babaac53bbdc40cc94684b6..b8726167cf739ba94aaaed69767ac8b7d11832d4 100644 (file)
@@ -1425,6 +1425,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);