From: Greg Kroah-Hartman Date: Fri, 5 Jan 2024 14:35:13 +0000 (+0100) Subject: 5.10-stable patches X-Git-Tag: v4.14.335~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a77b8f229bc8d89eba19f298c3e120ab3582698e;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch --- diff --git a/queue-5.10/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch b/queue-5.10/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch new file mode 100644 index 00000000000..194d32c9180 --- /dev/null +++ b/queue-5.10/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 +--- + fs/block_dev.c | 21 ++++++++++++++++----- + 1 file changed, 16 insertions(+), 5 deletions(-) + +--- a/fs/block_dev.c ++++ b/fs/block_dev.c +@@ -2031,22 +2031,33 @@ static long blkdev_fallocate(struct file + if ((start | len) & (bdev_logical_block_size(bdev) - 1)) + return -EINVAL; + +- /* Invalidate the page cache, including dirty pages. */ +- error = truncate_bdev_range(bdev, file->f_mode, start, end); +- if (error) +- return error; +- ++ /* ++ * 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) ++ break; ++ + 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) ++ break; ++ + 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) ++ break; ++ + error = blkdev_issue_discard(bdev, start >> 9, len >> 9, + GFP_KERNEL, 0); + break; diff --git a/queue-5.10/series b/queue-5.10/series index 78e00459032..c071d30dc1d 100644 --- a/queue-5.10/series +++ b/queue-5.10/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