mirror of https://github.com/xqemu/xqemu.git
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;
|
int gidsetsize = arg1;
|
||||||
target_id *target_grouplist;
|
target_id *target_grouplist;
|
||||||
gid_t *grouplist;
|
gid_t *grouplist = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
if (gidsetsize) {
|
||||||
grouplist = alloca(gidsetsize * sizeof(gid_t));
|
grouplist = alloca(gidsetsize * sizeof(gid_t));
|
||||||
target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize * 2, 1);
|
target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize * 2, 1);
|
||||||
if (!target_grouplist) {
|
if (!target_grouplist) {
|
||||||
ret = -TARGET_EFAULT;
|
ret = -TARGET_EFAULT;
|
||||||
goto fail;
|
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));
|
ret = get_errno(setgroups(gidsetsize, grouplist));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue