mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
ovl: port ovl_open_realfile() to cred guard
Use the scoped ovl cred guard. Link: https://patch.msgid.link/20251117-work-ovl-cred-guard-v4-7-b31603935724@kernel.org Reviewed-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
@@ -31,7 +31,6 @@ static struct file *ovl_open_realfile(const struct file *file,
|
||||
struct inode *inode = file_inode(file);
|
||||
struct mnt_idmap *real_idmap;
|
||||
struct file *realfile;
|
||||
const struct cred *old_cred;
|
||||
int flags = file->f_flags | OVL_OPEN_FLAGS;
|
||||
int acc_mode = ACC_MODE(flags);
|
||||
int err;
|
||||
@@ -39,19 +38,19 @@ static struct file *ovl_open_realfile(const struct file *file,
|
||||
if (flags & O_APPEND)
|
||||
acc_mode |= MAY_APPEND;
|
||||
|
||||
old_cred = ovl_override_creds(inode->i_sb);
|
||||
real_idmap = mnt_idmap(realpath->mnt);
|
||||
err = inode_permission(real_idmap, realinode, MAY_OPEN | acc_mode);
|
||||
if (err) {
|
||||
realfile = ERR_PTR(err);
|
||||
} else {
|
||||
if (!inode_owner_or_capable(real_idmap, realinode))
|
||||
flags &= ~O_NOATIME;
|
||||
with_ovl_creds(inode->i_sb) {
|
||||
real_idmap = mnt_idmap(realpath->mnt);
|
||||
err = inode_permission(real_idmap, realinode, MAY_OPEN | acc_mode);
|
||||
if (err) {
|
||||
realfile = ERR_PTR(err);
|
||||
} else {
|
||||
if (!inode_owner_or_capable(real_idmap, realinode))
|
||||
flags &= ~O_NOATIME;
|
||||
|
||||
realfile = backing_file_open(file_user_path(file),
|
||||
flags, realpath, current_cred());
|
||||
realfile = backing_file_open(file_user_path(file),
|
||||
flags, realpath, current_cred());
|
||||
}
|
||||
}
|
||||
ovl_revert_creds(old_cred);
|
||||
|
||||
pr_debug("open(%p[%pD2/%c], 0%o) -> (%p, 0%o)\n",
|
||||
file, file, ovl_whatisit(inode, realinode), file->f_flags,
|
||||
|
||||
Reference in New Issue
Block a user