From: Andreas Schwab Date: Tue, 9 Apr 2013 05:41:33 +0000 (+0000) Subject: linux-user: fix setgroups/getgroups for non-UID16 archs X-Git-Tag: v1.5.0-rc0~206^2 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=03903ffcfb5a7c75e52da97d00eb9d0bb0660f28;p=qemu.git linux-user: fix setgroups/getgroups for non-UID16 archs Don't assume target_id is a short. Signed-off-by: Andreas Schwab Signed-off-by: Riku Voipio --- diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 5a786f2fe..c705960d7 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -7743,12 +7743,12 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, if (gidsetsize == 0) break; if (!is_error(ret)) { - target_grouplist = lock_user(VERIFY_WRITE, arg2, gidsetsize * 2, 0); + target_grouplist = lock_user(VERIFY_WRITE, arg2, gidsetsize * sizeof(target_id), 0); if (!target_grouplist) goto efault; for(i = 0;i < ret; i++) target_grouplist[i] = tswapid(high2lowgid(grouplist[i])); - unlock_user(target_grouplist, arg2, gidsetsize * 2); + unlock_user(target_grouplist, arg2, gidsetsize * sizeof(target_id)); } } break; @@ -7760,7 +7760,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, int i; if (gidsetsize) { grouplist = alloca(gidsetsize * sizeof(gid_t)); - target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize * 2, 1); + target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize * sizeof(target_id), 1); if (!target_grouplist) { ret = -TARGET_EFAULT; goto fail;