From: Tejun Heo Date: Wed, 11 Dec 2013 21:02:58 +0000 (-0500) Subject: kernfs: update kernfs_rename_ns() to consider KERNFS_STATIC_NAME X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=47a52e91f485dfd935042dbd2f66df1ac3fdfbb9;p=openwrt%2Fstaging%2Fblogic.git 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 Signed-off-by: Greg Kroah-Hartman --- 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; }