Unverified Commit 3e85c298 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!6801 block: fix discard

Merge Pull Request from: @ci-robot 
 
PR sync from: Li Nan <linan122@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/NVAVZ7GCIQ4HZDJEE2LCYBUHNZW6X2I2/ 
Li Nan (2):
  block: fix overflow in blk_ioctl_discard()
  block: check io size before submit discard


-- 
2.39.2
 
https://gitee.com/openeuler/kernel/issues/I9K0H3 
 
Link:https://gitee.com/openeuler/kernel/pulls/6801

 

Reviewed-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
Reviewed-by: default avatarYu Kuai <yukuai3@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parents e584b6a7 7b99c834
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -92,6 +92,14 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
			req_sects = min_t(sector_t, nr_sects,
					  granularity_aligned_lba - sector_mapped);

		if (!req_sects) {
			if (bio) {
				bio_io_error(bio);
				bio_put(bio);
			}
			return -EOPNOTSUPP;
		}

		WARN_ON_ONCE((req_sects << 9) > UINT_MAX);

		bio = blk_next_bio(bio, 0, gfp_mask);
+3 −2
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ static int blk_ioctl_discard(struct block_device *bdev, fmode_t mode,
		unsigned long arg, unsigned long flags)
{
	uint64_t range[2];
	uint64_t start, len;
	uint64_t start, len, end;
	struct request_queue *q = bdev_get_queue(bdev);
	int err;

@@ -122,7 +122,8 @@ static int blk_ioctl_discard(struct block_device *bdev, fmode_t mode,
	if (len & 511)
		return -EINVAL;

	if (start + len > i_size_read(bdev->bd_inode))
	if (check_add_overflow(start, len, &end) ||
	    end > i_size_read(bdev->bd_inode))
		return -EINVAL;

	err = truncate_bdev_range(bdev, mode, start, start + len - 1);