瀏覽代碼

[MTD] slram: Handle negative devlength correctly

A negative devlength won't get noticed and clean up:

Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Roel Kluin 16 年之前
父節點
當前提交
3afd522de8
共有 1 個文件被更改,包括 10 次插入4 次删除
  1. 10 4
      drivers/mtd/devices/slram.c

+ 10 - 4
drivers/mtd/devices/slram.c

@@ -267,22 +267,28 @@ static int parse_cmdline(char *devname, char *szstart, char *szlength)
 	if (*(szlength) != '+') {
 	if (*(szlength) != '+') {
 		devlength = simple_strtoul(szlength, &buffer, 0);
 		devlength = simple_strtoul(szlength, &buffer, 0);
 		devlength = handle_unit(devlength, buffer) - devstart;
 		devlength = handle_unit(devlength, buffer) - devstart;
+		if (devlength < devstart)
+			goto err_out;
+
+		devlength -= devstart;
 	} else {
 	} else {
 		devlength = simple_strtoul(szlength + 1, &buffer, 0);
 		devlength = simple_strtoul(szlength + 1, &buffer, 0);
 		devlength = handle_unit(devlength, buffer);
 		devlength = handle_unit(devlength, buffer);
 	}
 	}
 	T("slram: devname=%s, devstart=0x%lx, devlength=0x%lx\n",
 	T("slram: devname=%s, devstart=0x%lx, devlength=0x%lx\n",
 			devname, devstart, devlength);
 			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))){
 	if ((devstart = register_device(devname, devstart, devlength))){
 		unregister_devices();
 		unregister_devices();
 		return((int)devstart);
 		return((int)devstart);
 	}
 	}
 	return(0);
 	return(0);
+
+err_out:
+	E("slram: Illegal length parameter.\n");
+	return(-EINVAL);
 }
 }
 
 
 #ifndef MODULE
 #ifndef MODULE