]> Pileus Git - ~andy/linux/blobdiff - fs/kernfs/dir.c
kernfs: add REMOVED check to create and rename paths
[~andy/linux] / fs / kernfs / dir.c
index e55bb02f15a473bdea2a29b9eb7fc3dbf972e054..ba5f372a226d597fdd9d2eef0ff21e5d23625792 100644 (file)
@@ -430,6 +430,9 @@ int kernfs_add_one(struct kernfs_addrm_cxt *acxt, struct kernfs_node *kn,
        if (kernfs_type(parent) != KERNFS_DIR)
                return -EINVAL;
 
+       if (parent->flags & KERNFS_REMOVED)
+               return -ENOENT;
+
        kn->hash = kernfs_name_hash(kn->name, kn->ns);
        kn->parent = parent;
        kernfs_get(parent);
@@ -863,6 +866,10 @@ int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent,
 
        mutex_lock(&kernfs_mutex);
 
+       error = -ENOENT;
+       if ((kn->flags | new_parent->flags) & KERNFS_REMOVED)
+               goto out;
+
        error = 0;
        if ((kn->parent == new_parent) && (kn->ns == new_ns) &&
            (strcmp(kn->name, new_name) == 0))