From: Greg Kroah-Hartman Date: Fri, 5 Jan 2024 14:35:22 +0000 (+0100) Subject: 5.15-stable patches X-Git-Tag: v4.14.335~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b152b04f960822591b12a4186f10907a4fa7543;p=thirdparty%2Fkernel%2Fstable-queue.git 5.15-stable patches added patches: block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch --- diff --git a/queue-5.15/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch b/queue-5.15/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch new file mode 100644 index 00000000000..cc249da1c6a --- /dev/null +++ b/queue-5.15/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch @@ -0,0 +1,70 @@ +From 1364a3c391aedfeb32aa025303ead3d7c91cdf9d Mon Sep 17 00:00:00 2001 +From: Sarthak Kukreti +Date: Wed, 11 Oct 2023 13:12:30 -0700 +Subject: block: Don't invalidate pagecache for invalid falloc modes + +From: Sarthak Kukreti + +commit 1364a3c391aedfeb32aa025303ead3d7c91cdf9d upstream. + +Only call truncate_bdev_range() if the fallocate mode is supported. This +fixes a bug where data in the pagecache could be invalidated if the +fallocate() was called on the block device with an invalid mode. + +Fixes: 25f4c41415e5 ("block: implement (some of) fallocate for block devices") +Cc: stable@vger.kernel.org +Reported-by: "Darrick J. Wong" +Signed-off-by: Sarthak Kukreti +Reviewed-by: Christoph Hellwig +Reviewed-by: "Darrick J. Wong" +Signed-off-by: Mike Snitzer +Fixes: line? I've never seen those wrapped. +Link: https://lore.kernel.org/r/20231011201230.750105-1-sarthakkukreti@chromium.org +Signed-off-by: Jens Axboe +Signed-off-by: Sarthak Kukreti +Signed-off-by: Greg Kroah-Hartman +--- + block/fops.c | 21 ++++++++++++++++----- + 1 file changed, 16 insertions(+), 5 deletions(-) + +--- a/block/fops.c ++++ b/block/fops.c +@@ -599,22 +599,33 @@ static long blkdev_fallocate(struct file + + filemap_invalidate_lock(inode->i_mapping); + +- /* Invalidate the page cache, including dirty pages. */ +- error = truncate_bdev_range(bdev, file->f_mode, start, end); +- if (error) +- goto fail; +- ++ /* ++ * Invalidate the page cache, including dirty pages, for valid ++ * de-allocate mode calls to fallocate(). ++ */ + switch (mode) { + case FALLOC_FL_ZERO_RANGE: + case FALLOC_FL_ZERO_RANGE | FALLOC_FL_KEEP_SIZE: ++ error = truncate_bdev_range(bdev, file->f_mode, start, end); ++ if (error) ++ goto fail; ++ + error = blkdev_issue_zeroout(bdev, start >> 9, len >> 9, + GFP_KERNEL, BLKDEV_ZERO_NOUNMAP); + break; + case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE: ++ error = truncate_bdev_range(bdev, file->f_mode, start, end); ++ if (error) ++ goto fail; ++ + error = blkdev_issue_zeroout(bdev, start >> 9, len >> 9, + GFP_KERNEL, BLKDEV_ZERO_NOFALLBACK); + break; + case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE | FALLOC_FL_NO_HIDE_STALE: ++ error = truncate_bdev_range(bdev, file->f_mode, start, end); ++ if (error) ++ goto fail; ++ + error = blkdev_issue_discard(bdev, start >> 9, len >> 9, + GFP_KERNEL, 0); + break; diff --git a/queue-5.15/series b/queue-5.15/series index 78e00459032..c071d30dc1d 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -1 +1,2 @@ keys-dns-fix-missing-size-check-of-v1-server-list-header.patch +block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch