userns: Convert stat to return values mapped from kuids and kgids
- Store uids and gids with kuid_t and kgid_t in struct kstat - Convert uid and gids to userspace usable values with from_kuid and from_kgid Acked-by: Serge Hallyn <serge.hallyn@canonical.com> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
This commit is contained in:
12
fs/stat.c
12
fs/stat.c
@@ -137,8 +137,8 @@ static int cp_old_stat(struct kstat *stat, struct __old_kernel_stat __user * sta
|
||||
tmp.st_nlink = stat->nlink;
|
||||
if (tmp.st_nlink != stat->nlink)
|
||||
return -EOVERFLOW;
|
||||
SET_UID(tmp.st_uid, stat->uid);
|
||||
SET_GID(tmp.st_gid, stat->gid);
|
||||
SET_UID(tmp.st_uid, from_kuid_munged(current_user_ns(), stat->uid));
|
||||
SET_GID(tmp.st_gid, from_kgid_munged(current_user_ns(), stat->gid));
|
||||
tmp.st_rdev = old_encode_dev(stat->rdev);
|
||||
#if BITS_PER_LONG == 32
|
||||
if (stat->size > MAX_NON_LFS)
|
||||
@@ -215,8 +215,8 @@ static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)
|
||||
tmp.st_nlink = stat->nlink;
|
||||
if (tmp.st_nlink != stat->nlink)
|
||||
return -EOVERFLOW;
|
||||
SET_UID(tmp.st_uid, stat->uid);
|
||||
SET_GID(tmp.st_gid, stat->gid);
|
||||
SET_UID(tmp.st_uid, from_kuid_munged(current_user_ns(), stat->uid));
|
||||
SET_GID(tmp.st_gid, from_kgid_munged(current_user_ns(), stat->gid));
|
||||
#if BITS_PER_LONG == 32
|
||||
tmp.st_rdev = old_encode_dev(stat->rdev);
|
||||
#else
|
||||
@@ -350,8 +350,8 @@ static long cp_new_stat64(struct kstat *stat, struct stat64 __user *statbuf)
|
||||
#endif
|
||||
tmp.st_mode = stat->mode;
|
||||
tmp.st_nlink = stat->nlink;
|
||||
tmp.st_uid = stat->uid;
|
||||
tmp.st_gid = stat->gid;
|
||||
tmp.st_uid = from_kuid_munged(current_user_ns(), stat->uid);
|
||||
tmp.st_gid = from_kgid_munged(current_user_ns(), stat->gid);
|
||||
tmp.st_atime = stat->atime.tv_sec;
|
||||
tmp.st_atime_nsec = stat->atime.tv_nsec;
|
||||
tmp.st_mtime = stat->mtime.tv_sec;
|
||||
|
Reference in New Issue
Block a user