Index: qemu-arm-eabi/linux-user/syscall.c =================================================================== --- qemu-arm-eabi.orig/linux-user/syscall.c 2007-12-07 19:59:03.000000000 -0300 +++ qemu-arm-eabi/linux-user/syscall.c 2007-12-07 20:01:47.000000000 -0300 @@ -5024,12 +5024,13 @@ { int gidsetsize = arg1; uint16_t *target_grouplist; - gid_t *grouplist; + gid_t *grouplist = NULL; int i; - grouplist = alloca(gidsetsize * sizeof(gid_t)); + if (gidsetsize) + grouplist = alloca(gidsetsize * sizeof(gid_t)); ret = get_errno(getgroups(gidsetsize, grouplist)); - if (!is_error(ret)) { + if (gidsetsize && !is_error(ret)) { target_grouplist = lock_user(VERIFY_WRITE, arg2, gidsetsize * 2, 0); if (!target_grouplist) goto efault; @@ -5174,12 +5175,13 @@ { int gidsetsize = arg1; uint32_t *target_grouplist; - gid_t *grouplist; + gid_t *grouplist = NULL; int i; - grouplist = alloca(gidsetsize * sizeof(gid_t)); + if (gidsetsize) + grouplist = alloca(gidsetsize * sizeof(gid_t)); ret = get_errno(getgroups(gidsetsize, grouplist)); - if (!is_error(ret)) { + if (gidsetsize && !is_error(ret)) { target_grouplist = lock_user(VERIFY_WRITE, arg2, gidsetsize * 4, 0); if (!target_grouplist) { ret = -TARGET_EFAULT;