linux-user: Support setgroups syscall with no groups
Signed-off-by: Dillon Amburgey <dillona@dillona.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
parent
bfb669f39f
commit
f2b79ce9dc
@ -7680,18 +7680,20 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
||||
{
|
||||
int gidsetsize = arg1;
|
||||
target_id *target_grouplist;
|
||||
gid_t *grouplist;
|
||||
gid_t *grouplist = NULL;
|
||||
int i;
|
||||
|
||||
grouplist = alloca(gidsetsize * sizeof(gid_t));
|
||||
target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize * 2, 1);
|
||||
if (!target_grouplist) {
|
||||
ret = -TARGET_EFAULT;
|
||||
goto fail;
|
||||
if (gidsetsize) {
|
||||
grouplist = alloca(gidsetsize * sizeof(gid_t));
|
||||
target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize * 2, 1);
|
||||
if (!target_grouplist) {
|
||||
ret = -TARGET_EFAULT;
|
||||
goto fail;
|
||||
}
|
||||
for (i = 0; i < gidsetsize; i++) {
|
||||
grouplist[i] = low2highgid(tswapid(target_grouplist[i]));
|
||||
}
|
||||
unlock_user(target_grouplist, arg2, 0);
|
||||
}
|
||||
for(i = 0;i < gidsetsize; i++)
|
||||
grouplist[i] = low2highgid(tswapid(target_grouplist[i]));
|
||||
unlock_user(target_grouplist, arg2, 0);
|
||||
ret = get_errno(setgroups(gidsetsize, grouplist));
|
||||
}
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user