]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
Merge branch 'upstream' of git://git.infradead.org/users/pcmoore/selinux into for...
authorJames Morris <james.l.morris@oracle.com>
Fri, 27 Mar 2015 09:33:27 +0000 (20:33 +1100)
committerJames Morris <james.l.morris@oracle.com>
Fri, 27 Mar 2015 09:33:27 +0000 (20:33 +1100)
1  2 
security/selinux/selinuxfs.c

index 1684bcc78b34e42395b1db335c9122c405987c23,138949a31eabeabcbcf2c6a36c644aa02b63aa85..5fde34326dcf28312ab4c36cb09623ecb811760b
@@@ -152,7 -152,7 +152,7 @@@ static ssize_t sel_write_enforce(struc
                goto out;
  
        /* No partial writes. */
-       length = EINVAL;
+       length = -EINVAL;
        if (*ppos != 0)
                goto out;
  
@@@ -1195,8 -1195,30 +1195,8 @@@ static const struct file_operations sel
  
  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"
@@@ -1646,13 -1668,37 +1646,13 @@@ static int sel_make_class_dir_entries(c
        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)