Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+11 -2
+11 -2
fs/open.c
··· 506 506 struct inode *inode = path->dentry->d_inode; 507 507 int error; 508 508 struct iattr newattrs; 509 + kuid_t uid; 510 + kgid_t gid; 511 + 512 + uid = make_kuid(current_user_ns(), user); 513 + gid = make_kgid(current_user_ns(), group); 509 514 510 515 newattrs.ia_valid = ATTR_CTIME; 511 516 if (user != (uid_t) -1) { 517 + if (!uid_valid(uid)) 518 + return -EINVAL; 512 519 newattrs.ia_valid |= ATTR_UID; 513 - newattrs.ia_uid = user; 520 + newattrs.ia_uid = uid; 514 521 } 515 522 if (group != (gid_t) -1) { 523 + if (!gid_valid(gid)) 524 + return -EINVAL; 516 525 newattrs.ia_valid |= ATTR_GID; 517 - newattrs.ia_gid = group; 526 + newattrs.ia_gid = gid; 518 527 } 519 528 if (!S_ISDIR(inode->i_mode)) 520 529 newattrs.ia_valid |=