file->f_path.dentry is pinned down for as long as the file is open...
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 28 Dec 2014 14:27:07 +0000 (09:27 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 26 Jan 2015 04:16:27 +0000 (23:16 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
kernel/auditsc.c
security/commoncap.c

index 072566d..55f82fc 100644 (file)
@@ -2405,7 +2405,6 @@ int __audit_log_bprm_fcaps(struct linux_binprm *bprm,
        struct audit_aux_data_bprm_fcaps *ax;
        struct audit_context *context = current->audit_context;
        struct cpu_vfs_cap_data vcaps;
-       struct dentry *dentry;
 
        ax = kmalloc(sizeof(*ax), GFP_KERNEL);
        if (!ax)
@@ -2415,9 +2414,7 @@ int __audit_log_bprm_fcaps(struct linux_binprm *bprm,
        ax->d.next = context->aux;
        context->aux = (void *)ax;
 
-       dentry = dget(bprm->file->f_path.dentry);
-       get_vfs_caps_from_disk(dentry, &vcaps);
-       dput(dentry);
+       get_vfs_caps_from_disk(bprm->file->f_path.dentry, &vcaps);
 
        ax->fcap.permitted = vcaps.permitted;
        ax->fcap.inheritable = vcaps.inheritable;
index 2915d85..f66713b 100644 (file)
@@ -434,7 +434,6 @@ int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data
  */
 static int get_file_caps(struct linux_binprm *bprm, bool *effective, bool *has_cap)
 {
-       struct dentry *dentry;
        int rc = 0;
        struct cpu_vfs_cap_data vcaps;
 
@@ -446,9 +445,7 @@ static int get_file_caps(struct linux_binprm *bprm, bool *effective, bool *has_c
        if (bprm->file->f_path.mnt->mnt_flags & MNT_NOSUID)
                return 0;
 
-       dentry = dget(bprm->file->f_path.dentry);
-
-       rc = get_vfs_caps_from_disk(dentry, &vcaps);
+       rc = get_vfs_caps_from_disk(bprm->file->f_path.dentry, &vcaps);
        if (rc < 0) {
                if (rc == -EINVAL)
                        printk(KERN_NOTICE "%s: get_vfs_caps_from_disk returned %d for %s\n",
@@ -464,7 +461,6 @@ static int get_file_caps(struct linux_binprm *bprm, bool *effective, bool *has_c
                       __func__, rc, bprm->filename);
 
 out:
-       dput(dentry);
        if (rc)
                bprm_clear_caps(bprm);