diff options
Diffstat (limited to 'fs/namespace.c')
-rw-r--r-- | fs/namespace.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index 79bd8a46e1e7..34156260c9b6 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
@@ -40,7 +40,7 @@ static inline int sysfs_init(void) | |||
40 | __cacheline_aligned_in_smp DEFINE_SPINLOCK(vfsmount_lock); | 40 | __cacheline_aligned_in_smp DEFINE_SPINLOCK(vfsmount_lock); |
41 | 41 | ||
42 | static struct list_head *mount_hashtable; | 42 | static struct list_head *mount_hashtable; |
43 | static int hash_mask, hash_bits; | 43 | static int hash_mask __read_mostly, hash_bits __read_mostly; |
44 | static kmem_cache_t *mnt_cache; | 44 | static kmem_cache_t *mnt_cache; |
45 | 45 | ||
46 | static inline unsigned long hash(struct vfsmount *mnt, struct dentry *dentry) | 46 | static inline unsigned long hash(struct vfsmount *mnt, struct dentry *dentry) |
@@ -1334,8 +1334,12 @@ asmlinkage long sys_pivot_root(const char __user *new_root, const char __user *p | |||
1334 | error = -EINVAL; | 1334 | error = -EINVAL; |
1335 | if (user_nd.mnt->mnt_root != user_nd.dentry) | 1335 | if (user_nd.mnt->mnt_root != user_nd.dentry) |
1336 | goto out2; /* not a mountpoint */ | 1336 | goto out2; /* not a mountpoint */ |
1337 | if (user_nd.mnt->mnt_parent == user_nd.mnt) | ||
1338 | goto out2; /* not attached */ | ||
1337 | if (new_nd.mnt->mnt_root != new_nd.dentry) | 1339 | if (new_nd.mnt->mnt_root != new_nd.dentry) |
1338 | goto out2; /* not a mountpoint */ | 1340 | goto out2; /* not a mountpoint */ |
1341 | if (new_nd.mnt->mnt_parent == new_nd.mnt) | ||
1342 | goto out2; /* not attached */ | ||
1339 | tmp = old_nd.mnt; /* make sure we can reach put_old from new_root */ | 1343 | tmp = old_nd.mnt; /* make sure we can reach put_old from new_root */ |
1340 | spin_lock(&vfsmount_lock); | 1344 | spin_lock(&vfsmount_lock); |
1341 | if (tmp != new_nd.mnt) { | 1345 | if (tmp != new_nd.mnt) { |