drm/tinydrm: fix a loop in debugfs code
Subsystems (3)
PATCH 1/1 drm/tinydrm: fix a loop in debugfs code
This code will likely crash if we try to do a zero byte write. The code looks like this:
/* strip trailing whitespace */
for (i = count - 1; i > 0; i--)
if (isspace(buf[i]))
...We're writing zero bytes so count = 0. You would think that "count - 1" would be negative one, but because "i" is unsigned it is a large positive numer instead. The "i > 0" condition is true and the "buf[i]" access will be out of bounds.
The fix is to make "i" signed and now everything works as expected. The upper bound of "count" is capped in __kernel_write() at MAX_RW_COUNT so we don't have to worry about it being higher than INT_MAX.
--- drivers/gpu/drm/drm_mipi_dbi.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/gpu/drm/drm_mipi_dbi.c +1 -2
@@ -1187,8 +1187,7 @@ static ssize_t mipi_dbi_debugfs_command_write(struct file *file,struct mipi_dbi_dev *dbidev = m->private;u8 val, cmd =0 , parameters[64 ];char *buf, *pos, *token; -unsigned int i; -int ret, idx; +int i, ret, idx;if (!drm_dev_enter (&dbidev->drm, &idx))return -ENODEV ;
Signature · 1 line
2.20.1
Den 21.08.2019 09.24, skrev Dan Carpenter:
Quoted 13 lines
This code will likely crash if we try to do a zero byte write. The code looks like this:
/* strip trailing whitespace */ for (i = count - 1; i > 0; i--) if (isspace(buf[i])) ...We're writing zero bytes so count = 0. You would think that "count - 1" would be negative one, but because "i" is unsigned it is a large positive numer instead. The "i > 0" condition is true and the "buf[i]" access will be out of bounds.
Quoted 7 lines
The fix is to make "i" signed and now everything works as expected. The upper bound of "count" is capped in
__kernel_write()atMAX_RW_COUNTso we don't have to worry about it being higher thanINT_MAX.Fixes 02dd95fe3169 ("drm/tinydrm: Add MIPI DBI support")Signed-off-by Dan Carpenter <[email protected]>---
Thanks Dan, applied to drm-misc-next with adjusted title:
-drm/tinydrm: fix a loop in debugfs code +drm/mipi-dbi: fix a loop in debugfs code
Noralf.