kernfs: allow creating kernfs objects with arbitrary uid/gid
This change allows creating kernfs files and directories with arbitrary uid/gid instead of always using GLOBAL_ROOT_UID/GID by extending kernfs_create_dir_ns() and kernfs_create_file_ns() with uid/gid arguments. The "simple" kernfs_create_file() and kernfs_create_dir() are left alone and always create objects belonging to the global root. When creating symlinks ownership (uid/gid) is taken from the target kernfs object. Co-Developed-by: Tyler Hicks <tyhicks@canonical.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Signed-off-by: Tyler Hicks <tyhicks@canonical.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
7c4ec749a3
commit
488dee96bb
@@ -146,6 +146,7 @@ static int rdtgroup_add_file(struct kernfs_node *parent_kn, struct rftype *rft)
|
||||
int ret;
|
||||
|
||||
kn = __kernfs_create_file(parent_kn, rft->name, rft->mode,
|
||||
GLOBAL_ROOT_UID, GLOBAL_ROOT_GID,
|
||||
0, rft->kf_ops, rft, NULL, NULL);
|
||||
if (IS_ERR(kn))
|
||||
return PTR_ERR(kn);
|
||||
@@ -1503,7 +1504,8 @@ static int mon_addfile(struct kernfs_node *parent_kn, const char *name,
|
||||
struct kernfs_node *kn;
|
||||
int ret = 0;
|
||||
|
||||
kn = __kernfs_create_file(parent_kn, name, 0444, 0,
|
||||
kn = __kernfs_create_file(parent_kn, name, 0444,
|
||||
GLOBAL_ROOT_UID, GLOBAL_ROOT_GID, 0,
|
||||
&kf_mondata_ops, priv, NULL, NULL);
|
||||
if (IS_ERR(kn))
|
||||
return PTR_ERR(kn);
|
||||
|
Reference in New Issue
Block a user