You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull misc VFS updates from Al Viro: "This cycle a lot of stuff sits on topical branches, so I'll be sending more or less one pull request per branch. This is the first pile; more to follow in a few. In this one are several misc commits from early in the cycle (before I went for separate branches), plus the rework of mntput/dput ordering on umount, switching to use of fs_pin instead of convoluted games in namespace_unlock()" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: switch the IO-triggering parts of umount to fs_pin new fs_pin killing logics allow attaching fs_pin to a group not associated with some superblock get rid of the second argument of acct_kill() take count and rcu_head out of fs_pin dcache: let the dentry count go down to zero without taking d_lock pull bumping refcount into ->kill() kill pin_put() mode_t whack-a-mole: chelsio file->f_path.dentry is pinned down for as long as the file is open... get rid of lustre_dump_dentry() gut proc_register() a bit kill d_validate() ncpfs: get rid of d_validate() nonsense selinuxfs: don't open-code d_genocide()
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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"
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user