|
@@ -1070,9 +1070,16 @@ int disk_expand_part_tbl(struct gendisk *disk, int partno)
|
|
struct disk_part_tbl *old_ptbl = disk->part_tbl;
|
|
struct disk_part_tbl *old_ptbl = disk->part_tbl;
|
|
struct disk_part_tbl *new_ptbl;
|
|
struct disk_part_tbl *new_ptbl;
|
|
int len = old_ptbl ? old_ptbl->len : 0;
|
|
int len = old_ptbl ? old_ptbl->len : 0;
|
|
- int target = partno + 1;
|
|
|
|
|
|
+ int i, target;
|
|
size_t size;
|
|
size_t size;
|
|
- int i;
|
|
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * check for int overflow, since we can get here from blkpg_ioctl()
|
|
|
|
+ * with a user passed 'partno'.
|
|
|
|
+ */
|
|
|
|
+ target = partno + 1;
|
|
|
|
+ if (target < 0)
|
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
/* disk_max_parts() is zero during initialization, ignore if so */
|
|
/* disk_max_parts() is zero during initialization, ignore if so */
|
|
if (disk_max_parts(disk) && target > disk_max_parts(disk))
|
|
if (disk_max_parts(disk) && target > disk_max_parts(disk))
|