summaryrefslogtreecommitdiff
path: root/fs/init.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2020-07-22 11:13:26 +0200
committerChristoph Hellwig <hch@lst.de>2020-07-31 08:17:52 +0200
commitb873498f99c77e7b5be3aa5ffe9ca67437232fe0 (patch)
tree6164c389372c34a25a5d1015d1d004a1c0250072 /fs/init.c
parent4b7ca5014cbef51cdb99fd644eae4f3773747a05 (diff)
init: add an init_chown helper
Add a simple helper to chown with a kernel space file name and switch the early init code over to it. Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'fs/init.c')
-rw-r--r--fs/init.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/fs/init.c b/fs/init.c
index 2c78f24814dd..edd024465595 100644
--- a/fs/init.c
+++ b/fs/init.c
@@ -78,6 +78,24 @@ dput_and_out:
return error;
}
+int __init init_chown(const char *filename, uid_t user, gid_t group, int flags)
+{
+ int lookup_flags = (flags & AT_SYMLINK_NOFOLLOW) ? 0 : LOOKUP_FOLLOW;
+ struct path path;
+ int error;
+
+ error = kern_path(filename, lookup_flags, &path);
+ if (error)
+ return error;
+ error = mnt_want_write(path.mnt);
+ if (!error) {
+ error = chown_common(&path, user, group);
+ mnt_drop_write(path.mnt);
+ }
+ path_put(&path);
+ return error;
+}
+
int __init init_unlink(const char *pathname)
{
return do_unlinkat(AT_FDCWD, getname_kernel(pathname));