Skip to content

Commit

Permalink
userns: Convert s390 getting uid and gid system calls to use kuid and…
Browse files Browse the repository at this point in the history
… kgid

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 <[email protected]>
Cc: Heiko Carstens <[email protected]>
Signed-off-by: Eric W. Biederman <[email protected]>
  • Loading branch information
ebiederm committed Sep 21, 2012
1 parent 6a62a21 commit 558a447
Showing 1 changed file with 24 additions and 12 deletions.
36 changes: 24 additions & 12 deletions arch/s390/kernel/compat_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -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;
}
Expand Down Expand Up @@ -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()));
}

/*
Expand Down

0 comments on commit 558a447

Please sign in to comment.