diff options
author | Christoph Hellwig <hch@lst.de> | 2020-07-22 12:13:26 +0300 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2020-07-31 09:17:52 +0300 |
commit | b873498f99c77e7b5be3aa5ffe9ca67437232fe0 (patch) | |
tree | 6164c389372c34a25a5d1015d1d004a1c0250072 /fs/init.c | |
parent | 4b7ca5014cbef51cdb99fd644eae4f3773747a05 (diff) | |
download | linux-b873498f99c77e7b5be3aa5ffe9ca67437232fe0.tar.xz |
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.c | 18 |
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)); |