Loading security/selinux/selinuxfs.c +3 −49 Original line number Diff line number Diff line Loading @@ -1195,30 +1195,8 @@ static const struct file_operations sel_commit_bools_ops = { static void sel_remove_entries(struct dentry *de) { struct list_head *node; spin_lock(&de->d_lock); node = de->d_subdirs.next; while (node != &de->d_subdirs) { struct dentry *d = list_entry(node, struct dentry, d_child); spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED); list_del_init(node); if (d->d_inode) { dget_dlock(d); spin_unlock(&de->d_lock); spin_unlock(&d->d_lock); d_delete(d); simple_unlink(de->d_inode, d); dput(d); spin_lock(&de->d_lock); } else spin_unlock(&d->d_lock); node = de->d_subdirs.next; } spin_unlock(&de->d_lock); d_genocide(de); shrink_dcache_parent(de); } #define BOOL_DIR_NAME "booleans" Loading Loading @@ -1668,37 +1646,13 @@ static int sel_make_class_dir_entries(char *classname, int index, return rc; } static void sel_remove_classes(void) { struct list_head *class_node; list_for_each(class_node, &class_dir->d_subdirs) { struct dentry *class_subdir = list_entry(class_node, struct dentry, d_child); struct list_head *class_subdir_node; list_for_each(class_subdir_node, &class_subdir->d_subdirs) { struct dentry *d = list_entry(class_subdir_node, struct dentry, d_child); if (d->d_inode) if (d->d_inode->i_mode & S_IFDIR) sel_remove_entries(d); } sel_remove_entries(class_subdir); } sel_remove_entries(class_dir); } static int sel_make_classes(void) { int rc, nclasses, i; char **classes; /* delete any existing entries */ sel_remove_classes(); sel_remove_entries(class_dir); rc = security_get_classes(&classes, &nclasses); if (rc) Loading Loading
security/selinux/selinuxfs.c +3 −49 Original line number Diff line number Diff line Loading @@ -1195,30 +1195,8 @@ static const struct file_operations sel_commit_bools_ops = { static void sel_remove_entries(struct dentry *de) { struct list_head *node; spin_lock(&de->d_lock); node = de->d_subdirs.next; while (node != &de->d_subdirs) { struct dentry *d = list_entry(node, struct dentry, d_child); spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED); list_del_init(node); if (d->d_inode) { dget_dlock(d); spin_unlock(&de->d_lock); spin_unlock(&d->d_lock); d_delete(d); simple_unlink(de->d_inode, d); dput(d); spin_lock(&de->d_lock); } else spin_unlock(&d->d_lock); node = de->d_subdirs.next; } spin_unlock(&de->d_lock); d_genocide(de); shrink_dcache_parent(de); } #define BOOL_DIR_NAME "booleans" Loading Loading @@ -1668,37 +1646,13 @@ static int sel_make_class_dir_entries(char *classname, int index, return rc; } static void sel_remove_classes(void) { struct list_head *class_node; list_for_each(class_node, &class_dir->d_subdirs) { struct dentry *class_subdir = list_entry(class_node, struct dentry, d_child); struct list_head *class_subdir_node; list_for_each(class_subdir_node, &class_subdir->d_subdirs) { struct dentry *d = list_entry(class_subdir_node, struct dentry, d_child); if (d->d_inode) if (d->d_inode->i_mode & S_IFDIR) sel_remove_entries(d); } sel_remove_entries(class_subdir); } sel_remove_entries(class_dir); } static int sel_make_classes(void) { int rc, nclasses, i; char **classes; /* delete any existing entries */ sel_remove_classes(); sel_remove_entries(class_dir); rc = security_get_classes(&classes, &nclasses); if (rc) Loading