blob: dbcd6679c9b9210a9bdb9913f737407dc3ddff59 [file] [log] [blame]
From: Vincent Whitchurch <vincent.whitchurch@axis.com>
Subject: squashfs: fix page update race
Date: Fri, 26 May 2023 15:25:45 +0200
We only put the page into the cache after we've read it, so the
PageUptodate() check should not be necessary. In fact, it's actively
harmful since the check could fail (since we used find_get_page() and not
find_lock_page()) and we could end up submitting a page for I/O after it
has been read and while it's actively being used, which could lead to
corruption depending on what the block driver does with it.
Link: https://lkml.kernel.org/r/20230526-squashfs-cache-fixup-v1-1-d54a7fa23e7b@axis.com
Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Phillip Lougher <phillip@squashfs.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
fs/squashfs/block.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/fs/squashfs/block.c~squashfs-cache-partial-compressed-blocks-fix-2
+++ a/fs/squashfs/block.c
@@ -92,7 +92,7 @@ static int squashfs_bio_read_cached(stru
bio_for_each_segment_all(bv, fullbio, iter_all) {
struct page *page = bv->bv_page;
- if (page->mapping == cache_mapping && PageUptodate(page)) {
+ if (page->mapping == cache_mapping) {
idx++;
continue;
}
_