diff options
| author | Akhil R <akhilrajeev@nvidia.com> | 2025-04-24 11:03:20 +0530 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2025-06-27 11:11:29 +0100 | 
| commit | 75a864f21ceeb8c1e8ce1b7589174fec2c3a039e (patch) | |
| tree | 610926fffc7f292a01e5f79e48ea5ecd3f9d5c60 | |
| parent | 77ff6aec7c319e9f867cda583a63b9c0efb79202 (diff) | |
i2c: tegra: check msg length in SMBUS block read
[ 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>
| -rw-r--r-- | drivers/i2c/busses/i2c-tegra.c | 5 | 
1 files changed, 5 insertions, 0 deletions
| diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 1df5b4204142..89ce8a62b37c 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -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); | 
