mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
minixfs: misplaced checks lead to dentry leak
bitmap size sanity checks should be done *before* allocating ->s_root; there their cleanup on failure would be correct. As it is, we do iput() on root inode, but leak the root dentry... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Acked-by: Josh Boyer <jwboyer@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
8a88951b58
commit
d6042eac44
1 changed files with 17 additions and 17 deletions
|
@ -263,23 +263,6 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)
|
||||||
goto out_no_root;
|
goto out_no_root;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = -ENOMEM;
|
|
||||||
s->s_root = d_alloc_root(root_inode);
|
|
||||||
if (!s->s_root)
|
|
||||||
goto out_iput;
|
|
||||||
|
|
||||||
if (!(s->s_flags & MS_RDONLY)) {
|
|
||||||
if (sbi->s_version != MINIX_V3) /* s_state is now out from V3 sb */
|
|
||||||
ms->s_state &= ~MINIX_VALID_FS;
|
|
||||||
mark_buffer_dirty(bh);
|
|
||||||
}
|
|
||||||
if (!(sbi->s_mount_state & MINIX_VALID_FS))
|
|
||||||
printk("MINIX-fs: mounting unchecked file system, "
|
|
||||||
"running fsck is recommended\n");
|
|
||||||
else if (sbi->s_mount_state & MINIX_ERROR_FS)
|
|
||||||
printk("MINIX-fs: mounting file system with errors, "
|
|
||||||
"running fsck is recommended\n");
|
|
||||||
|
|
||||||
/* Apparently minix can create filesystems that allocate more blocks for
|
/* Apparently minix can create filesystems that allocate more blocks for
|
||||||
* the bitmaps than needed. We simply ignore that, but verify it didn't
|
* the bitmaps than needed. We simply ignore that, but verify it didn't
|
||||||
* create one with not enough blocks and bail out if so.
|
* create one with not enough blocks and bail out if so.
|
||||||
|
@ -300,6 +283,23 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)
|
||||||
goto out_iput;
|
goto out_iput;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = -ENOMEM;
|
||||||
|
s->s_root = d_alloc_root(root_inode);
|
||||||
|
if (!s->s_root)
|
||||||
|
goto out_iput;
|
||||||
|
|
||||||
|
if (!(s->s_flags & MS_RDONLY)) {
|
||||||
|
if (sbi->s_version != MINIX_V3) /* s_state is now out from V3 sb */
|
||||||
|
ms->s_state &= ~MINIX_VALID_FS;
|
||||||
|
mark_buffer_dirty(bh);
|
||||||
|
}
|
||||||
|
if (!(sbi->s_mount_state & MINIX_VALID_FS))
|
||||||
|
printk("MINIX-fs: mounting unchecked file system, "
|
||||||
|
"running fsck is recommended\n");
|
||||||
|
else if (sbi->s_mount_state & MINIX_ERROR_FS)
|
||||||
|
printk("MINIX-fs: mounting file system with errors, "
|
||||||
|
"running fsck is recommended\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_iput:
|
out_iput:
|
||||||
|
|
Loading…
Add table
Reference in a new issue