From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KchKl-0007wG-30 for qemu-devel@nongnu.org; Mon, 08 Sep 2008 10:03:15 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KchKi-0007uq-O2 for qemu-devel@nongnu.org; Mon, 08 Sep 2008 10:03:14 -0400 Received: from [199.232.76.173] (port=39227 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KchKi-0007un-Ie for qemu-devel@nongnu.org; Mon, 08 Sep 2008 10:03:12 -0400 Received: from nf-out-0910.google.com ([64.233.182.190]:62378) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KchKh-0007Fs-Uo for qemu-devel@nongnu.org; Mon, 08 Sep 2008 10:03:12 -0400 Received: by nf-out-0910.google.com with SMTP id b2so443313nfb.12 for ; Mon, 08 Sep 2008 07:03:09 -0700 (PDT) From: "Kirill A. Shutemov" Date: Mon, 8 Sep 2008 17:03:30 +0300 Message-Id: <1220882616-18735-2-git-send-email-kirill@shutemov.name> In-Reply-To: <1220882616-18735-1-git-send-email-kirill@shutemov.name> References: <1220882616-18735-1-git-send-email-kirill@shutemov.name> Subject: [Qemu-devel] [PATCH] Fix getgroups() syscall emulation Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: "Kirill A. Shutemov" 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 --- 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 ae7a5a2..9d8542d 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