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

Commit 0955dc03 authored by Stephen Smalley's avatar Stephen Smalley Committed by James Morris
Browse files

SELinux: do not clear f_op when removing entries



Do not clear f_op when removing entries since it isn't safe to do.

Signed-off-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
Signed-off-by: default avatarJames Morris <jmorris@namei.org>
parent e3c0ac04
Loading
Loading
Loading
Loading
+1 −27
Original line number Diff line number Diff line
@@ -838,10 +838,6 @@ static ssize_t sel_read_bool(struct file *filep, char __user *buf,

	ret = -EFAULT;

	/* check to see if this file has been deleted */
	if (!filep->f_op)
		goto out;

	if (count > PAGE_SIZE) {
		ret = -EINVAL;
		goto out;
@@ -882,10 +878,6 @@ static ssize_t sel_write_bool(struct file *filep, const char __user *buf,
	if (length)
		goto out;

	/* check to see if this file has been deleted */
	if (!filep->f_op)
		goto out;

	if (count >= PAGE_SIZE) {
		length = -ENOMEM;
		goto out;
@@ -940,10 +932,6 @@ static ssize_t sel_commit_bools_write(struct file *filep,
	if (length)
		goto out;

	/* check to see if this file has been deleted */
	if (!filep->f_op)
		goto out;

	if (count >= PAGE_SIZE) {
		length = -ENOMEM;
		goto out;
@@ -982,11 +970,9 @@ static const struct file_operations sel_commit_bools_ops = {
	.write          = sel_commit_bools_write,
};

/* partial revoke() from fs/proc/generic.c proc_kill_inodes */
static void sel_remove_entries(struct dentry *de)
{
	struct list_head *p, *node;
	struct super_block *sb = de->d_sb;
	struct list_head *node;

	spin_lock(&dcache_lock);
	node = de->d_subdirs.next;
@@ -1006,18 +992,6 @@ static void sel_remove_entries(struct dentry *de)
	}

	spin_unlock(&dcache_lock);

	file_list_lock();
	list_for_each(p, &sb->s_files) {
		struct file * filp = list_entry(p, struct file, f_u.fu_list);
		struct dentry * dentry = filp->f_path.dentry;

		if (dentry->d_parent != de) {
			continue;
		}
		filp->f_op = NULL;
	}
	file_list_unlock();
}

#define BOOL_DIR_NAME "booleans"