tizen: packaging: Add baselibs.conf to provide 64-bit kernel & modules for 32-bit...
[platform/kernel/linux-rpi.git] / block / ioctl.c
index 648670d..d1d8e83 100644 (file)
@@ -18,7 +18,7 @@ static int blkpg_do_ioctl(struct block_device *bdev,
 {
        struct gendisk *disk = bdev->bd_disk;
        struct blkpg_partition p;
-       long long start, length;
+       sector_t start, length;
 
        if (!capable(CAP_SYS_ADMIN))
                return -EACCES;
@@ -33,14 +33,17 @@ static int blkpg_do_ioctl(struct block_device *bdev,
        if (op == BLKPG_DEL_PARTITION)
                return bdev_del_partition(disk, p.pno);
 
+       if (p.start < 0 || p.length <= 0 || p.start + p.length < 0)
+               return -EINVAL;
+       /* Check that the partition is aligned to the block size */
+       if (!IS_ALIGNED(p.start | p.length, bdev_logical_block_size(bdev)))
+               return -EINVAL;
+
        start = p.start >> SECTOR_SHIFT;
        length = p.length >> SECTOR_SHIFT;
 
        switch (op) {
        case BLKPG_ADD_PARTITION:
-               /* check if partition is aligned to blocksize */
-               if (p.start & (bdev_logical_block_size(bdev) - 1))
-                       return -EINVAL;
                return bdev_add_partition(disk, p.pno, start, length);
        case BLKPG_RESIZE_PARTITION:
                return bdev_resize_partition(disk, p.pno, start, length);