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: Stephen Smalley <sds@tycho.nsa.gov> Signed-off-by: James Morris <jmorris@namei.org>
This commit is contained in:
Родитель
e3c0ac04f9
Коммит
0955dc03ae
|
@ -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"
|
||||
|
|
Загрузка…
Ссылка в новой задаче