diff options
| author | Phillip Lougher <[email protected]> | 2025-08-11 22:37:40 +0000 |
|---|---|---|
| committer | Andrew Morton <[email protected]> | 2025-08-19 23:35:53 +0000 |
| commit | b64700d41bdc4e9f82f1346c15a3678ebb91a89c (patch) | |
| tree | c8be9bf503c746e9e308bf366144807bc2a33662 | |
| parent | kho: warn if KHO is disabled due to an error (diff) | |
| download | kernel-b64700d41bdc4e9f82f1346c15a3678ebb91a89c.tar.gz kernel-b64700d41bdc4e9f82f1346c15a3678ebb91a89c.zip | |
squashfs: fix memory leak in squashfs_fill_super
If sb_min_blocksize returns 0, squashfs_fill_super exits without freeing
allocated memory (sb->s_fs_info).
Fix this by moving the call to sb_min_blocksize to before memory is
allocated.
Link: https://lkml.kernel.org/r/[email protected]
Fixes: 734aa85390ea ("Squashfs: check return result of sb_min_blocksize")
Signed-off-by: Phillip Lougher <[email protected]>
Reported-by: Scott GUO <[email protected]>
Closes: https://lore.kernel.org/all/[email protected]
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
| -rw-r--r-- | fs/squashfs/super.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/squashfs/super.c b/fs/squashfs/super.c index 992ea0e37257..4465cf05603a 100644 --- a/fs/squashfs/super.c +++ b/fs/squashfs/super.c @@ -187,10 +187,15 @@ static int squashfs_fill_super(struct super_block *sb, struct fs_context *fc) unsigned short flags; unsigned int fragments; u64 lookup_table_start, xattr_id_table_start, next_table; - int err; + int err, devblksize = sb_min_blocksize(sb, SQUASHFS_DEVBLK_SIZE); TRACE("Entered squashfs_fill_superblock\n"); + if (!devblksize) { + errorf(fc, "squashfs: unable to set blocksize\n"); + return -EINVAL; + } + sb->s_fs_info = kzalloc(sizeof(*msblk), GFP_KERNEL); if (sb->s_fs_info == NULL) { ERROR("Failed to allocate squashfs_sb_info\n"); @@ -201,12 +206,7 @@ static int squashfs_fill_super(struct super_block *sb, struct fs_context *fc) msblk->panic_on_errors = (opts->errors == Opt_errors_panic); - msblk->devblksize = sb_min_blocksize(sb, SQUASHFS_DEVBLK_SIZE); - if (!msblk->devblksize) { - errorf(fc, "squashfs: unable to set blocksize\n"); - return -EINVAL; - } - + msblk->devblksize = devblksize; msblk->devblksize_log2 = ffz(~msblk->devblksize); mutex_init(&msblk->meta_index_mutex); |
