mirror of
https://github.com/joel16/android_kernel_sony_msm8994.git
synced 2024-12-11 22:34:20 +00:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs fixes from Al Viro: "Regression fix in mtdchar_open(), fix for a really old leak (almost never hit in practice - it's a b0rken failure exit in simple_fill_super()) and a typo fix in vfs.txt (misspelled method type)." * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: typo fix in Documentation/filesystems/vfs.txt dentry leak in simple_fill_super() failure exit fix breakage in mtdchar_open(), sanitize failure exits
This commit is contained in:
commit
5ba7026b44
@ -114,7 +114,7 @@ members are defined:
|
||||
struct file_system_type {
|
||||
const char *name;
|
||||
int fs_flags;
|
||||
struct dentry (*mount) (struct file_system_type *, int,
|
||||
struct dentry *(*mount) (struct file_system_type *, int,
|
||||
const char *, void *);
|
||||
void (*kill_sb) (struct super_block *);
|
||||
struct module *owner;
|
||||
|
@ -106,16 +106,14 @@ static int mtdchar_open(struct inode *inode, struct file *file)
|
||||
}
|
||||
|
||||
if (mtd->type == MTD_ABSENT) {
|
||||
put_mtd_device(mtd);
|
||||
ret = -ENODEV;
|
||||
goto out;
|
||||
goto out1;
|
||||
}
|
||||
|
||||
mtd_ino = iget_locked(mnt->mnt_sb, devnum);
|
||||
if (!mtd_ino) {
|
||||
put_mtd_device(mtd);
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
goto out1;
|
||||
}
|
||||
if (mtd_ino->i_state & I_NEW) {
|
||||
mtd_ino->i_private = mtd;
|
||||
@ -127,23 +125,25 @@ static int mtdchar_open(struct inode *inode, struct file *file)
|
||||
|
||||
/* You can't open it RW if it's not a writeable device */
|
||||
if ((file->f_mode & FMODE_WRITE) && !(mtd->flags & MTD_WRITEABLE)) {
|
||||
iput(mtd_ino);
|
||||
put_mtd_device(mtd);
|
||||
ret = -EACCES;
|
||||
goto out;
|
||||
goto out2;
|
||||
}
|
||||
|
||||
mfi = kzalloc(sizeof(*mfi), GFP_KERNEL);
|
||||
if (!mfi) {
|
||||
iput(mtd_ino);
|
||||
put_mtd_device(mtd);
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
goto out2;
|
||||
}
|
||||
mfi->ino = mtd_ino;
|
||||
mfi->mtd = mtd;
|
||||
file->private_data = mfi;
|
||||
mutex_unlock(&mtd_mutex);
|
||||
return 0;
|
||||
|
||||
out2:
|
||||
iput(mtd_ino);
|
||||
out1:
|
||||
put_mtd_device(mtd);
|
||||
out:
|
||||
mutex_unlock(&mtd_mutex);
|
||||
simple_release_fs(&mnt, &count);
|
||||
|
@ -529,6 +529,7 @@ int simple_fill_super(struct super_block *s, unsigned long magic,
|
||||
return 0;
|
||||
out:
|
||||
d_genocide(root);
|
||||
shrink_dcache_parent(root);
|
||||
dput(root);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user