Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4a4a8b1 authored by Al Viro's avatar Al Viro
Browse files

file->f_path.dentry is pinned down for as long as the file is open...



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 5e9e2040
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -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;
+1 −5
Original line number Diff line number Diff line
@@ -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);