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>
This commit is contained in:
parent
2063d608f5
commit
47a52e91f4
@ -886,7 +886,11 @@ int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent,
|
|||||||
if (!new_name)
|
if (!new_name)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
kfree(kn->name);
|
if (kn->flags & KERNFS_STATIC_NAME)
|
||||||
|
kn->flags &= ~KERNFS_STATIC_NAME;
|
||||||
|
else
|
||||||
|
kfree(kn->name);
|
||||||
|
|
||||||
kn->name = new_name;
|
kn->name = new_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user