Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (46 commits) [PATCH] fs: add a sanity check in d_free [PATCH] i_version: remount support [patch] vfs: make security_inode_setattr() calling consistent [patch 1/3] FS_MBCACHE: don't needlessly make it built-in [PATCH] move executable checking into ->permission() [PATCH] fs/dcache.c: update comment of d_validate() [RFC PATCH] touch_mnt_namespace when the mount flags change [PATCH] reiserfs: add missing llseek method [PATCH] fix ->llseek for more directories [PATCH vfs-2.6 6/6] vfs: add LOOKUP_RENAME_TARGET intent [PATCH vfs-2.6 5/6] vfs: remove LOOKUP_PARENT from non LOOKUP_PARENT lookup [PATCH vfs-2.6 4/6] vfs: remove unnecessary fsnotify_d_instantiate() [PATCH vfs-2.6 3/6] vfs: add __d_instantiate() helper [PATCH vfs-2.6 2/6] vfs: add d_ancestor() [PATCH vfs-2.6 1/6] vfs: replace parent == dentry->d_parent by IS_ROOT() [PATCH] get rid of on-stack dentry in udf [PATCH 2/2] anondev: switch to IDA [PATCH 1/2] anondev: init IDR statically [JFFS2] Use d_splice_alias() not d_add() in jffs2_lookup() [PATCH] Optimise NFS readdir hack slightly. ...
This commit is contained in:
@ -532,7 +532,7 @@ void audit_trim_trees(void)
|
||||
list_add(&cursor, &tree_list);
|
||||
while (cursor.next != &tree_list) {
|
||||
struct audit_tree *tree;
|
||||
struct nameidata nd;
|
||||
struct path path;
|
||||
struct vfsmount *root_mnt;
|
||||
struct node *node;
|
||||
struct list_head list;
|
||||
@ -544,12 +544,12 @@ void audit_trim_trees(void)
|
||||
list_add(&cursor, &tree->list);
|
||||
mutex_unlock(&audit_filter_mutex);
|
||||
|
||||
err = path_lookup(tree->pathname, 0, &nd);
|
||||
err = kern_path(tree->pathname, 0, &path);
|
||||
if (err)
|
||||
goto skip_it;
|
||||
|
||||
root_mnt = collect_mounts(nd.path.mnt, nd.path.dentry);
|
||||
path_put(&nd.path);
|
||||
root_mnt = collect_mounts(path.mnt, path.dentry);
|
||||
path_put(&path);
|
||||
if (!root_mnt)
|
||||
goto skip_it;
|
||||
|
||||
@ -580,19 +580,19 @@ skip_it:
|
||||
}
|
||||
|
||||
static int is_under(struct vfsmount *mnt, struct dentry *dentry,
|
||||
struct nameidata *nd)
|
||||
struct path *path)
|
||||
{
|
||||
if (mnt != nd->path.mnt) {
|
||||
if (mnt != path->mnt) {
|
||||
for (;;) {
|
||||
if (mnt->mnt_parent == mnt)
|
||||
return 0;
|
||||
if (mnt->mnt_parent == nd->path.mnt)
|
||||
if (mnt->mnt_parent == path->mnt)
|
||||
break;
|
||||
mnt = mnt->mnt_parent;
|
||||
}
|
||||
dentry = mnt->mnt_mountpoint;
|
||||
}
|
||||
return is_subdir(dentry, nd->path.dentry);
|
||||
return is_subdir(dentry, path->dentry);
|
||||
}
|
||||
|
||||
int audit_make_tree(struct audit_krule *rule, char *pathname, u32 op)
|
||||
@ -618,7 +618,7 @@ void audit_put_tree(struct audit_tree *tree)
|
||||
int audit_add_tree_rule(struct audit_krule *rule)
|
||||
{
|
||||
struct audit_tree *seed = rule->tree, *tree;
|
||||
struct nameidata nd;
|
||||
struct path path;
|
||||
struct vfsmount *mnt, *p;
|
||||
struct list_head list;
|
||||
int err;
|
||||
@ -637,11 +637,11 @@ int audit_add_tree_rule(struct audit_krule *rule)
|
||||
/* do not set rule->tree yet */
|
||||
mutex_unlock(&audit_filter_mutex);
|
||||
|
||||
err = path_lookup(tree->pathname, 0, &nd);
|
||||
err = kern_path(tree->pathname, 0, &path);
|
||||
if (err)
|
||||
goto Err;
|
||||
mnt = collect_mounts(nd.path.mnt, nd.path.dentry);
|
||||
path_put(&nd.path);
|
||||
mnt = collect_mounts(path.mnt, path.dentry);
|
||||
path_put(&path);
|
||||
if (!mnt) {
|
||||
err = -ENOMEM;
|
||||
goto Err;
|
||||
@ -690,29 +690,29 @@ int audit_tag_tree(char *old, char *new)
|
||||
{
|
||||
struct list_head cursor, barrier;
|
||||
int failed = 0;
|
||||
struct nameidata nd;
|
||||
struct path path;
|
||||
struct vfsmount *tagged;
|
||||
struct list_head list;
|
||||
struct vfsmount *mnt;
|
||||
struct dentry *dentry;
|
||||
int err;
|
||||
|
||||
err = path_lookup(new, 0, &nd);
|
||||
err = kern_path(new, 0, &path);
|
||||
if (err)
|
||||
return err;
|
||||
tagged = collect_mounts(nd.path.mnt, nd.path.dentry);
|
||||
path_put(&nd.path);
|
||||
tagged = collect_mounts(path.mnt, path.dentry);
|
||||
path_put(&path);
|
||||
if (!tagged)
|
||||
return -ENOMEM;
|
||||
|
||||
err = path_lookup(old, 0, &nd);
|
||||
err = kern_path(old, 0, &path);
|
||||
if (err) {
|
||||
drop_collected_mounts(tagged);
|
||||
return err;
|
||||
}
|
||||
mnt = mntget(nd.path.mnt);
|
||||
dentry = dget(nd.path.dentry);
|
||||
path_put(&nd.path);
|
||||
mnt = mntget(path.mnt);
|
||||
dentry = dget(path.dentry);
|
||||
path_put(&path);
|
||||
|
||||
if (dentry == tagged->mnt_root && dentry == mnt->mnt_root)
|
||||
follow_up(&mnt, &dentry);
|
||||
@ -733,7 +733,7 @@ int audit_tag_tree(char *old, char *new)
|
||||
list_add(&cursor, &tree->list);
|
||||
mutex_unlock(&audit_filter_mutex);
|
||||
|
||||
err = path_lookup(tree->pathname, 0, &nd);
|
||||
err = kern_path(tree->pathname, 0, &path);
|
||||
if (err) {
|
||||
put_tree(tree);
|
||||
mutex_lock(&audit_filter_mutex);
|
||||
@ -741,15 +741,15 @@ int audit_tag_tree(char *old, char *new)
|
||||
}
|
||||
|
||||
spin_lock(&vfsmount_lock);
|
||||
if (!is_under(mnt, dentry, &nd)) {
|
||||
if (!is_under(mnt, dentry, &path)) {
|
||||
spin_unlock(&vfsmount_lock);
|
||||
path_put(&nd.path);
|
||||
path_put(&path);
|
||||
put_tree(tree);
|
||||
mutex_lock(&audit_filter_mutex);
|
||||
continue;
|
||||
}
|
||||
spin_unlock(&vfsmount_lock);
|
||||
path_put(&nd.path);
|
||||
path_put(&path);
|
||||
|
||||
list_for_each_entry(p, &list, mnt_list) {
|
||||
failed = tag_chunk(p->mnt_root->d_inode, tree);
|
||||
|
Reference in New Issue
Block a user