1
0
Fork 0
alistair23-linux/block
Ming Lei 79d08f89bb block: fix .bi_size overflow
'bio->bi_iter.bi_size' is 'unsigned int', which at most hold 4G - 1
bytes.

Before 07173c3ec2 ("block: enable multipage bvecs"), one bio can
include very limited pages, and usually at most 256, so the fs bio
size won't be bigger than 1M bytes most of times.

Since we support multi-page bvec, in theory one fs bio really can
be added > 1M pages, especially in case of hugepage, or big writeback
with too many dirty pages. Then there is chance in which .bi_size
is overflowed.

Fixes this issue by using bio_full() to check if the added segment may
overflow .bi_size.

Cc: Liu Yiding <liuyd.fnst@cn.fujitsu.com>
Cc: kernel test robot <rong.a.chen@intel.com>
Cc: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: linux-xfs@vger.kernel.org
Cc: linux-fsdevel@vger.kernel.org
Cc: stable@vger.kernel.org
Fixes: 07173c3ec2 ("block: enable multipage bvecs")
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2019-07-01 08:18:54 -06:00
..
partitions block/partitions/ldm: Convert a kernel-doc header into a non-kernel-doc header 2019-05-31 15:12:34 -06:00
Kconfig block: force select mq-deadline for zoned block devices 2019-06-13 03:00:31 -06:00
Kconfig.iosched block: rename CONFIG_DEBUG_BLK_CGROUP to CONFIG_BFQ_CGROUP_DEBUG 2019-06-20 10:32:35 -06:00
Makefile block: remove legacy IO schedulers 2018-11-07 13:42:32 -07:00
badblocks.c block: switch all files cleared marked as GPLv2 to SPDX tags 2019-04-30 16:11:57 -06:00
bfq-cgroup.c block: rename CONFIG_DEBUG_BLK_CGROUP to CONFIG_BFQ_CGROUP_DEBUG 2019-06-20 10:32:35 -06:00
bfq-iosched.c block, bfq: NULL out the bic when it's no longer valid 2019-06-28 07:44:19 -06:00
bfq-iosched.h block, bfq: detect wakers and unconditionally inject their I/O 2019-06-25 09:07:34 -06:00
bfq-wf2q.c block: switch all files cleared marked as GPLv2 or later to SPDX tags 2019-04-30 16:11:59 -06:00
bio-integrity.c block/bio-integrity: use struct_size() in kmalloc() 2019-05-16 08:48:48 -06:00
bio.c block: fix .bi_size overflow 2019-07-01 08:18:54 -06:00
blk-cgroup.c blk-cgroup: move struct blkg_stat to bfq 2019-06-20 10:32:34 -06:00
blk-core.c block: update print_req_error() 2019-06-20 13:03:51 -06:00
blk-exec.c block: add SPDX tags to block layer files missing licensing information 2019-04-30 16:12:03 -06:00
blk-flush.c block: switch all files cleared marked as GPLv2 to SPDX tags 2019-04-30 16:11:57 -06:00
blk-integrity.c for-5.2/block-20190507 2019-05-07 18:14:36 -07:00
blk-ioc.c block: remove the queue_lock indirection 2018-11-15 12:17:28 -07:00
blk-iolatency.c blk-iolatency: only account submitted bios 2019-06-20 03:29:56 -06:00
blk-lib.c block: fix 32 bit overflow in __blkdev_issue_discard() 2018-11-14 08:17:18 -07:00
blk-map.c block: remove the bi_phys_segments field in struct bio 2019-06-20 10:29:22 -06:00
blk-merge.c block: untangle the end of blk_bio_segment_split 2019-06-20 10:29:22 -06:00
blk-mq-cpumap.c blk-mq: Document the blk_mq_hw_queue_to_node() arguments 2019-05-31 15:12:34 -06:00
blk-mq-debugfs-zoned.c block: Cleanup license notice 2019-01-17 21:21:40 -07:00
blk-mq-debugfs.c block: use blk_op_str() in blk-mq-debugfs.c 2019-06-20 13:03:51 -06:00
blk-mq-debugfs.h blk-mq: no need to check return value of debugfs_create functions 2019-06-13 03:00:30 -06:00
blk-mq-pci.c block: Fix blk_mq_*_map_queues() kernel-doc headers 2019-05-31 15:12:34 -06:00
blk-mq-rdma.c block: Fix blk_mq_*_map_queues() kernel-doc headers 2019-05-31 15:12:34 -06:00
blk-mq-sched.c block: remove the bi_phys_segments field in struct bio 2019-06-20 10:29:22 -06:00
blk-mq-sched.h block: remove the bi_phys_segments field in struct bio 2019-06-20 10:29:22 -06:00
blk-mq-sysfs.c for-5.2/block-20190507 2019-05-07 18:14:36 -07:00
blk-mq-tag.c block: add SPDX tags to block layer files missing licensing information 2019-04-30 16:12:03 -06:00
blk-mq-tag.h Merge branch 'for-4.15/block' of git://git.kernel.dk/linux-block 2017-11-14 15:32:19 -08:00
blk-mq-virtio.c block: Fix blk_mq_*_map_queues() kernel-doc headers 2019-05-31 15:12:34 -06:00
blk-mq.c block: remove the bi_phys_segments field in struct bio 2019-06-20 10:29:22 -06:00
blk-mq.h blk-mq: free hw queue's resource in hctx's release handler 2019-05-04 07:24:05 -06:00
blk-pm.c block: remove the queue_lock indirection 2018-11-15 12:17:28 -07:00
blk-pm.h block: remove the queue_lock indirection 2018-11-15 12:17:28 -07:00
blk-rq-qos.c block: Fix rq_qos_wait() kernel-doc header 2019-05-31 15:12:34 -06:00
blk-rq-qos.h block: add SPDX tags to block layer files missing licensing information 2019-04-30 16:12:03 -06:00
blk-settings.c block: force an unlimited segment size on queues with a virt boundary 2019-05-23 10:25:26 -06:00
blk-softirq.c block: remove a few unused exports 2018-11-15 12:13:25 -07:00
blk-stat.c block: add SPDX tags to block layer files missing licensing information 2019-04-30 16:12:03 -06:00
blk-stat.h block: deactivate blk_stat timer in wbt_disable_default() 2018-12-12 06:47:51 -07:00
blk-sysfs.c block: free sched's request pool in blk_cleanup_queue 2019-06-06 22:39:39 -06:00
blk-throttle.c block: Fix throtl_pending_timer_fn() kernel-doc header 2019-05-31 15:12:34 -06:00
blk-timeout.c block: add SPDX tags to block layer files missing licensing information 2019-04-30 16:12:03 -06:00
blk-wbt.c block: add SPDX tags to block layer files missing licensing information 2019-04-30 16:12:03 -06:00
blk-wbt.h block: remove external dependency on wbt_flags 2018-07-09 09:07:54 -06:00
blk-zoned.c block: add SPDX tags to block layer files missing licensing information 2019-04-30 16:12:03 -06:00
blk.h block: mark blk_rq_bio_prep as inline 2019-06-20 10:29:22 -06:00
bounce.c block: remove the i argument to bio_for_each_segment_all 2019-04-30 09:26:13 -06:00
bsg-lib.c block: Fix bsg_setup_queue() kernel-doc header 2019-05-31 15:12:34 -06:00
bsg.c block: switch all files cleared marked as GPLv2 to SPDX tags 2019-04-30 16:11:57 -06:00
cmdline-parser.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_ioctl.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
elevator.c block: free sched's request pool in blk_cleanup_queue 2019-06-06 22:39:39 -06:00
genhd.c block: genhd: Use struct_size() helper 2019-06-15 01:46:09 -06:00
ioctl.c block: add SPDX tags to block layer files missing licensing information 2019-04-30 16:12:03 -06:00
ioprio.c block: add SPDX tags to block layer files missing licensing information 2019-04-30 16:12:03 -06:00
kyber-iosched.c block: remove the bi_phys_segments field in struct bio 2019-06-20 10:29:22 -06:00
mq-deadline.c block: remove the bi_phys_segments field in struct bio 2019-06-20 10:29:22 -06:00
opal_proto.h block: sed-opal: check size of shadow mbr 2019-06-29 10:34:08 -06:00
partition-generic.c block: fix use-after-free on gendisk 2019-04-22 09:48:12 -06:00
scsi_ioctl.c block: switch all files cleared marked as GPLv2 to SPDX tags 2019-04-30 16:11:57 -06:00
sed-opal.c block: sed-opal: check size of shadow mbr 2019-06-29 10:34:08 -06:00
t10-pi.c block: switch all files cleared marked as GPLv2 to SPDX tags 2019-04-30 16:11:57 -06:00