Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

block: fix memory leak in __blkdev_issue_zero_pages

Move the fatal signal check before bio_alloc() to prevent a memory
leak when BLKDEV_ZERO_KILLABLE is set and a fatal signal is pending.

Previously, the bio was allocated before checking for a fatal signal.
If a signal was pending, the code would break out of the loop without
freeing or chaining the just-allocated bio, causing a memory leak.

This matches the pattern already used in __blkdev_issue_write_zeroes()
where the signal check precedes the allocation.

Fixes: bf86bcdb4012 ("blk-lib: check for kill signal in ioctl BLKZEROOUT")
Reported-by: syzbot+527a7e48a3d3d315d862@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=527a7e48a3d3d315d862
Signed-off-by: Shaurya Rane <ssrane_b23@ee.vjti.ac.in>
Reviewed-by: Keith Busch <kbusch@kernel.org>
Tested-by: syzbot+527a7e48a3d3d315d862@syzkaller.appspotmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Shaurya Rane and committed by
Jens Axboe
f7e3f852 8a322821

+3 -3
+3 -3
block/blk-lib.c
··· 202 202 unsigned int nr_vecs = __blkdev_sectors_to_bio_pages(nr_sects); 203 203 struct bio *bio; 204 204 205 - bio = bio_alloc(bdev, nr_vecs, REQ_OP_WRITE, gfp_mask); 206 - bio->bi_iter.bi_sector = sector; 207 - 208 205 if ((flags & BLKDEV_ZERO_KILLABLE) && 209 206 fatal_signal_pending(current)) 210 207 break; 208 + 209 + bio = bio_alloc(bdev, nr_vecs, REQ_OP_WRITE, gfp_mask); 210 + bio->bi_iter.bi_sector = sector; 211 211 212 212 do { 213 213 unsigned int len;