MTD: a negative devlength won't get noticed
PATCH 1/1 MTD: a negative devlength won't get noticed
a negative devlength won't get noticed and clean up:
Signed-off-by Roel Kluin <[email protected]>
---
devstart and devlength are unsigned longs and handle_unit() can only return positive. so a negative devstart won't occur, only a negative devlength can when (*(szlength) != '+').
for hadle_unit() see
vi drivers/mtd/devices/slram.c +244
drivers/mtd/devices/slram.c +10 -4
@@ -267,22 +267,28 @@ static int parse_cmdline(char *devname, char *szstart, char *szlength)if (*(szlength) !='+' ) { devlength =simple_strtoul (szlength, &buffer,0 ); devlength =handle_unit (devlength, buffer) - devstart; +if (devlength < devstart) + goto err_out; + + devlength -= devstart; }else { devlength =simple_strtoul (szlength +1 , &buffer,0 ); devlength =handle_unit (devlength, buffer); }T ("slram: devname=%s, devstart=0x%lx, devlength=0x%lx\n" , devname, devstart, devlength); -if ((devstart <0 ) || (devlength <0 ) || (devlength %SLRAM_BLK_SZ !=0 )) { -E ("slram: Illegal start / length parameter.\n" ); -return (-EINVAL ); - } +if (devlength %SLRAM_BLK_SZ !=0 ) + goto err_out;if ((devstart =register_device (devname, devstart, devlength))){unregister_devices ();return ((int )devstart); }return (0 ); + +err_out: +E ("slram: Illegal length parameter.\n" ); +return (-EINVAL ); }#ifndef MODULE