Skip to content

Commit ff70b77

Browse files
committed
Merge: block: add check that partition length needs to be aligned with block size
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/3786 JIRA: https://issues.redhat.com/browse/RHEL-26616 CVE: CVE-2023-52458 Signed-off-by: Ming Lei <ming.lei@redhat.com> Approved-by: Jeff Moyer <jmoyer@redhat.com> Approved-by: John B. Wyatt IV <jwyatt@redhat.com> Merged-by: Lucas Zampieri <lzampier@redhat.com>
2 parents 958d4fc + 566eeee commit ff70b77

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

block/ioctl.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ static int blkpg_do_ioctl(struct block_device *bdev,
1818
{
1919
struct gendisk *disk = bdev->bd_disk;
2020
struct blkpg_partition p;
21-
long long start, length;
21+
sector_t start, length;
2222

2323
if (!capable(CAP_SYS_ADMIN))
2424
return -EACCES;
@@ -33,14 +33,17 @@ static int blkpg_do_ioctl(struct block_device *bdev,
3333
if (op == BLKPG_DEL_PARTITION)
3434
return bdev_del_partition(disk, p.pno);
3535

36+
if (p.start < 0 || p.length <= 0 || p.start + p.length < 0)
37+
return -EINVAL;
38+
/* Check that the partition is aligned to the block size */
39+
if (!IS_ALIGNED(p.start | p.length, bdev_logical_block_size(bdev)))
40+
return -EINVAL;
41+
3642
start = p.start >> SECTOR_SHIFT;
3743
length = p.length >> SECTOR_SHIFT;
3844

3945
switch (op) {
4046
case BLKPG_ADD_PARTITION:
41-
/* check if partition is aligned to blocksize */
42-
if (p.start & (bdev_logical_block_size(bdev) - 1))
43-
return -EINVAL;
4447
return bdev_add_partition(disk, p.pno, start, length);
4548
case BLKPG_RESIZE_PARTITION:
4649
return bdev_resize_partition(disk, p.pno, start, length);

0 commit comments

Comments
 (0)