ANDROID: sdcardfs: Change current->fs under lock
Adjusted from previous version to add missing include bug: 111641492 Change-Id: I321d83f5d599efb3abdfaf2f3a4900ac512beca6 Reported-by: Jann Horn <jannh@google.com> Signed-off-by: Daniel Rosenberg <drosen@google.com> Git-commit: f6d0920c41a732be06d284177311b57335227bd1 Git-repo: https://android.googlesource.com/kernel/common/ Signed-off-by: Ritesh Harjani <riteshh@codeaurora.org>
This commit is contained in:
parent
3c59fd3182
commit
62b5592573
1 changed files with 14 additions and 2 deletions
|
@ -21,6 +21,7 @@
|
|||
#include "sdcardfs.h"
|
||||
#include <linux/fs_struct.h>
|
||||
#include <linux/ratelimit.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
const struct cred *override_fsids(struct sdcardfs_sb_info *sbi,
|
||||
struct sdcardfs_inode_data *data)
|
||||
|
@ -96,8 +97,11 @@ static int sdcardfs_create(struct inode *dir, struct dentry *dentry,
|
|||
err = -ENOMEM;
|
||||
goto out_unlock;
|
||||
}
|
||||
copied_fs->umask = 0;
|
||||
task_lock(current);
|
||||
current->fs = copied_fs;
|
||||
current->fs->umask = 0;
|
||||
task_unlock(current);
|
||||
|
||||
err = vfs_create2(lower_dentry_mnt, d_inode(lower_parent_dentry), lower_dentry, mode, want_excl);
|
||||
if (err)
|
||||
goto out;
|
||||
|
@ -111,7 +115,9 @@ static int sdcardfs_create(struct inode *dir, struct dentry *dentry,
|
|||
fixup_lower_ownership(dentry, dentry->d_name.name);
|
||||
|
||||
out:
|
||||
task_lock(current);
|
||||
current->fs = saved_fs;
|
||||
task_unlock(current);
|
||||
free_fs_struct(copied_fs);
|
||||
out_unlock:
|
||||
unlock_dir(lower_parent_dentry);
|
||||
|
@ -249,8 +255,11 @@ static int sdcardfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
|
|||
unlock_dir(lower_parent_dentry);
|
||||
goto out_unlock;
|
||||
}
|
||||
copied_fs->umask = 0;
|
||||
task_lock(current);
|
||||
current->fs = copied_fs;
|
||||
current->fs->umask = 0;
|
||||
task_unlock(current);
|
||||
|
||||
err = vfs_mkdir2(lower_mnt, d_inode(lower_parent_dentry), lower_dentry, mode);
|
||||
|
||||
if (err) {
|
||||
|
@ -318,7 +327,10 @@ static int sdcardfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
|
|||
}
|
||||
}
|
||||
out:
|
||||
task_lock(current);
|
||||
current->fs = saved_fs;
|
||||
task_unlock(current);
|
||||
|
||||
free_fs_struct(copied_fs);
|
||||
out_unlock:
|
||||
sdcardfs_put_lower_path(dentry, &lower_path);
|
||||
|
|
Loading…
Add table
Reference in a new issue