diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2012-03-03 19:52:01 -0800 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2012-05-03 03:29:34 -0700 |
commit | 52137abe1820196d956bfd51edebc571b3427deb (patch) | |
tree | 29a06b63fa36d6b794f7b848e4a65eea1fb74f0f /fs | |
parent | 8e96e3b7b8407be794ab1fd8e4b332818a358e78 (diff) | |
download | linux-stable-52137abe1820196d956bfd51edebc571b3427deb.tar.gz linux-stable-52137abe1820196d956bfd51edebc571b3427deb.tar.bz2 linux-stable-52137abe1820196d956bfd51edebc571b3427deb.zip |
userns: Convert user specfied uids and gids in chown into kuids and kgid
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/open.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/fs/open.c b/fs/open.c index 92335f663545..e16680138323 100644 --- a/fs/open.c +++ b/fs/open.c @@ -506,15 +506,24 @@ static int chown_common(struct path *path, uid_t user, gid_t group) struct inode *inode = path->dentry->d_inode; int error; struct iattr newattrs; + kuid_t uid; + kgid_t gid; + + uid = make_kuid(current_user_ns(), user); + gid = make_kgid(current_user_ns(), group); newattrs.ia_valid = ATTR_CTIME; if (user != (uid_t) -1) { + if (!uid_valid(uid)) + return -EINVAL; newattrs.ia_valid |= ATTR_UID; - newattrs.ia_uid = user; + newattrs.ia_uid = uid; } if (group != (gid_t) -1) { + if (!gid_valid(gid)) + return -EINVAL; newattrs.ia_valid |= ATTR_GID; - newattrs.ia_gid = group; + newattrs.ia_gid = gid; } if (!S_ISDIR(inode->i_mode)) newattrs.ia_valid |= |