[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] Fix getgroups() syscall emulation
From: |
Kirill A. Shutemov |
Subject: |
[Qemu-devel] [PATCH] Fix getgroups() syscall emulation |
Date: |
Sat, 23 Aug 2008 03:19:20 +0300 |
According to man page getgroups(2):
If size is zero, list is not modified, but the total number of
supplementary group IDs for the process is returned.
Signed-off-by: Kirill A. Shutemov <address@hidden>
---
linux-user/syscall.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 2abdc83..1f0ab34 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -5242,6 +5242,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
grouplist = alloca(gidsetsize * sizeof(gid_t));
ret = get_errno(getgroups(gidsetsize, grouplist));
+ if (gidsetsize == 0)
+ break;
if (!is_error(ret)) {
target_grouplist = lock_user(VERIFY_WRITE, arg2, gidsetsize *
2, 0);
if (!target_grouplist)
@@ -5392,6 +5394,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
grouplist = alloca(gidsetsize * sizeof(gid_t));
ret = get_errno(getgroups(gidsetsize, grouplist));
+ if (gidsetsize == 0)
+ break;
if (!is_error(ret)) {
target_grouplist = lock_user(VERIFY_WRITE, arg2, gidsetsize *
4, 0);
if (!target_grouplist) {
--
1.5.6.5.GIT
- [Qemu-devel] [PATCH] Fix getgroups() syscall emulation,
Kirill A. Shutemov <=