diff options
author | Tejun Heo <tj@kernel.org> | 2013-12-11 16:02:58 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-12-17 08:59:15 -0800 |
commit | 47a52e91f485dfd935042dbd2f66df1ac3fdfbb9 (patch) | |
tree | 883d840cec492ce65584354205874fc92438d262 | |
parent | 2063d608f5110d120db60e896ec2c70c95bb7978 (diff) | |
download | op-kernel-dev-47a52e91f485dfd935042dbd2f66df1ac3fdfbb9.zip op-kernel-dev-47a52e91f485dfd935042dbd2f66df1ac3fdfbb9.tar.gz |
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>
-rw-r--r-- | fs/kernfs/dir.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c index e168177..d33af95 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; } |