Merge tag 'driver-core-3.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[firefly-linux-kernel-4.4.55.git] / fs / sysfs / dir.c
index a5cf784f9cc2abec93c2a5272345838e20fb62ad..6b0bb00d4d2b6061add5a1f266371df257e5c4a9 100644 (file)
@@ -307,6 +307,7 @@ static int sysfs_dentry_revalidate(struct dentry *dentry, unsigned int flags)
 {
        struct sysfs_dirent *sd;
        int is_dir;
+       int type;
 
        if (flags & LOOKUP_RCU)
                return -ECHILD;
@@ -326,6 +327,15 @@ static int sysfs_dentry_revalidate(struct dentry *dentry, unsigned int flags)
        if (strcmp(dentry->d_name.name, sd->s_name) != 0)
                goto out_bad;
 
+       /* The sysfs dirent has been moved to a different namespace */
+       type = KOBJ_NS_TYPE_NONE;
+       if (sd->s_parent) {
+               type = sysfs_ns_type(sd->s_parent);
+               if (type != KOBJ_NS_TYPE_NONE &&
+                               sysfs_info(dentry->d_sb)->ns[type] != sd->s_ns)
+                       goto out_bad;
+       }
+
        mutex_unlock(&sysfs_mutex);
 out_valid:
        return 1;