]> www.infradead.org Git - users/hch/misc.git/commitdiff
squashfs: fix invalid pointer dereference in squashfs_cache_delete
authorZhiyu Zhang <zhiyuzhang999@gmail.com>
Thu, 6 Mar 2025 13:28:55 +0000 (21:28 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 17 Mar 2025 00:40:24 +0000 (17:40 -0700)
When mounting a squashfs fails, squashfs_cache_init() may return an error
pointer (e.g., -ENOMEM) instead of NULL.  However, squashfs_cache_delete()
only checks for a NULL cache, and attempts to dereference the invalid
pointer.  This leads to a kernel crash (BUG: unable to handle kernel
paging request in squashfs_cache_delete).

This patch fixes the issue by checking IS_ERR(cache) before accessing it.

Link: https://lkml.kernel.org/r/20250306132855.2030-1-zhiyuzhang999@gmail.com
Fixes: 49ff29240ebb ("squashfs: make squashfs_cache_init() return ERR_PTR(-ENOMEM)")
Signed-off-by: Zhiyu Zhang <zhiyuzhang999@gmail.com>
Reported-by: Zhiyu Zhang <zhiyuzhang999@gmail.com>
Closes: https://lore.kernel.org/linux-fsdevel/CALf2hKvaq8B4u5yfrE+BYt7aNguao99mfWxHngA+=o5hwzjdOg@mail.gmail.com/
Tested-by: Zhiyu Zhang <zhiyuzhang999@gmail.com>
Reviewed-by: Phillip Lougher <phillip@squashfs.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/squashfs/cache.c

index 4db0d2b0aab8f5139bee7d5d0bbb953a18b6aaa7..181260e72680c2a875ecbbcc84cf7ce67d1ca9a1 100644 (file)
@@ -198,7 +198,7 @@ void squashfs_cache_delete(struct squashfs_cache *cache)
 {
        int i, j;
 
-       if (cache == NULL)
+       if (IS_ERR(cache) || cache == NULL)
                return;
 
        for (i = 0; i < cache->entries; i++) {