summaryrefslogtreecommitdiffstats
path: root/fs/kernfs
diff options
context:
space:
mode:
authorTejun Heo2013-12-11 22:02:58 +0100
committerGreg Kroah-Hartman2013-12-17 17:59:15 +0100
commit47a52e91f485dfd935042dbd2f66df1ac3fdfbb9 (patch)
tree883d840cec492ce65584354205874fc92438d262 /fs/kernfs
parentkernfs: mark static names with KERNFS_STATIC_NAME (diff)
downloadkernel-qcow2-linux-47a52e91f485dfd935042dbd2f66df1ac3fdfbb9.tar.gz
kernel-qcow2-linux-47a52e91f485dfd935042dbd2f66df1ac3fdfbb9.tar.xz
kernel-qcow2-linux-47a52e91f485dfd935042dbd2f66df1ac3fdfbb9.zip
kernfs: update kernfs_rename_ns() to consider KERNFS_STATIC_NAME
kernfs_rename_ns() currently assumes that the target sysfs_dirent has a copied name. This has been okay because sysfs supports rename only for directories which always have copied names; however, there's nothing in kernfs interface which calls for such restriction and currently invoking kernfs_rename_ns() on a regular file leads to oops because it ends up trying to kfree() a static name. This patch updates kernfs_rename_ns() so that it skips kfree() of the old name if it's static. This allows it to be used for all node types. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/kernfs')
-rw-r--r--fs/kernfs/dir.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
index e1681775abd5..d33af95321fb 100644
--- a/fs/kernfs/dir.c
+++ b/fs/kernfs/dir.c
@@ -886,7 +886,11 @@ int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent,
if (!new_name)
goto out;
- kfree(kn->name);
+ if (kn->flags & KERNFS_STATIC_NAME)
+ kn->flags &= ~KERNFS_STATIC_NAME;
+ else
+ kfree(kn->name);
+
kn->name = new_name;
}