From: "Eric W. Biederman" <ebied...@xmission.com>

Convert getresuid, getresgid, getuid, geteuid, getgid, getegid

Convert struct cred kuids and kgids into userspace uids and gids when
returning them.

These s390 system calls slipped through the cracks in my first
round of converstions :(

Cc: Martin Schwidefsky <schwidef...@de.ibm.com>
Cc: Heiko Carstens <heiko.carst...@de.ibm.com>
Signed-off-by: Eric W. Biederman <ebied...@xmission.com>
---
 arch/s390/kernel/compat_linux.c |   36 ++++++++++++++++++++++++------------
 1 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
index d122508..73995a7 100644
--- a/arch/s390/kernel/compat_linux.c
+++ b/arch/s390/kernel/compat_linux.c
@@ -131,13 +131,19 @@ asmlinkage long sys32_setresuid16(u16 ruid, u16 euid, u16 
suid)
                low2highuid(suid));
 }
 
-asmlinkage long sys32_getresuid16(u16 __user *ruid, u16 __user *euid, u16 
__user *suid)
+asmlinkage long sys32_getresuid16(u16 __user *ruidp, u16 __user *euidp, u16 
__user *suidp)
 {
+       const struct cred *cred = current_cred();
        int retval;
+       u16 ruid, euid, suid;
 
-       if (!(retval = put_user(high2lowuid(current->cred->uid), ruid)) &&
-           !(retval = put_user(high2lowuid(current->cred->euid), euid)))
-               retval = put_user(high2lowuid(current->cred->suid), suid);
+       ruid = high2lowuid(from_kuid_munged(cred->user_ns, cred->uid));
+       euid = high2lowuid(from_kuid_munged(cred->user_ns, cred->euid));
+       suid = high2lowuid(from_kuid_munged(cred->user_ns, cred->suid));
+
+       if (!(retval   = put_user(ruid, ruidp)) &&
+           !(retval   = put_user(euid, euidp)))
+               retval = put_user(suid, suidp);
 
        return retval;
 }
@@ -148,13 +154,19 @@ asmlinkage long sys32_setresgid16(u16 rgid, u16 egid, u16 
sgid)
                low2highgid(sgid));
 }
 
-asmlinkage long sys32_getresgid16(u16 __user *rgid, u16 __user *egid, u16 
__user *sgid)
+asmlinkage long sys32_getresgid16(u16 __user *rgidp, u16 __user *egidp, u16 
__user *sgidp)
 {
+       const struct cred *cred = current_cred();
        int retval;
+       u16 rgid, egid, sgid;
+
+       rgid = high2lowgid(from_kgid_munged(cred->user_ns, cred->gid));
+       egid = high2lowgid(from_kgid_munged(cred->user_ns, cred->egid));
+       sgid = high2lowgid(from_kgid_munged(cred->user_ns, cred->sgid));
 
-       if (!(retval = put_user(high2lowgid(current->cred->gid), rgid)) &&
-           !(retval = put_user(high2lowgid(current->cred->egid), egid)))
-               retval = put_user(high2lowgid(current->cred->sgid), sgid);
+       if (!(retval   = put_user(rgid, rgidp)) &&
+           !(retval   = put_user(egid, egidp)))
+               retval = put_user(sgid, sgidp);
 
        return retval;
 }
@@ -258,22 +270,22 @@ asmlinkage long sys32_setgroups16(int gidsetsize, u16 
__user *grouplist)
 
 asmlinkage long sys32_getuid16(void)
 {
-       return high2lowuid(current->cred->uid);
+       return high2lowuid(from_kuid_munged(current_user_ns(), current_uid()));
 }
 
 asmlinkage long sys32_geteuid16(void)
 {
-       return high2lowuid(current->cred->euid);
+       return high2lowuid(from_kuid_munged(current_user_ns(), current_euid()));
 }
 
 asmlinkage long sys32_getgid16(void)
 {
-       return high2lowgid(current->cred->gid);
+       return high2lowgid(from_kgid_munged(current_user_ns(), current_gid()));
 }
 
 asmlinkage long sys32_getegid16(void)
 {
-       return high2lowgid(current->cred->egid);
+       return high2lowgid(from_kgid_munged(current_user_ns(), current_egid()));
 }
 
 /*
-- 
1.7.5.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to