From owner-freebsd-standards@FreeBSD.ORG Tue Oct 2 16:00:29 2012 Return-Path: Delivered-To: freebsd-standards@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 692401065673 for ; Tue, 2 Oct 2012 16:00:29 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 45F808FC12 for ; Tue, 2 Oct 2012 16:00:22 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q92G0M9C026074 for ; Tue, 2 Oct 2012 16:00:22 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q92G0MPb026073; Tue, 2 Oct 2012 16:00:22 GMT (envelope-from gnats) Resent-Date: Tue, 2 Oct 2012 16:00:22 GMT Resent-Message-Id: <201210021600.q92G0MPb026073@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-standards@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Ed Maste Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6AA921065670 for ; Tue, 2 Oct 2012 15:58:20 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 555348FC12 for ; Tue, 2 Oct 2012 15:58:20 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q92FwK9F026000 for ; Tue, 2 Oct 2012 15:58:20 GMT (envelope-from emaste@freefall.freebsd.org) Received: (from emaste@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q92FwKlb025999; Tue, 2 Oct 2012 15:58:20 GMT (envelope-from emaste) Message-Id: <201210021558.q92FwKlb025999@freefall.freebsd.org> Date: Tue, 2 Oct 2012 15:58:20 GMT From: Ed Maste To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: standards/172276: POSIX: {get, set}groups gidsetsize is u_int not int X-BeenThere: freebsd-standards@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Ed Maste List-Id: Standards compliance List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Oct 2012 16:00:29 -0000 >Number: 172276 >Category: standards >Synopsis: POSIX: {get,set}groups gidsetsize is u_int not int >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-standards >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Oct 02 16:00:21 UTC 2012 >Closed-Date: >Last-Modified: >Originator: Ed Maste >Release: FreeBSD 9.0-STABLE i386 >Organization: ADARA Networks >Environment: System: FreeBSD freefall.freebsd.org 9.0-STABLE FreeBSD 9.0-STABLE #6 r235139: Tue May 8 21:19:03 UTC 2012 simon@freefall.freebsd.org:/usr/obj/usr/src/sys/FREEFALL i386 >Description: GNU Autoconf doesn't like our getgroups: On some platforms, this function fails to reject a negative count, even though that is less than the size that would be returned: >How-To-Repeat: Run gnulib autoconf, configure:54098: checking whether getgroups handles negative values http://pubs.opengroup.org/onlinepubs/9699919799/functions/getgroups.html >Fix: --- getsetgroups_arg.diff begins here --- Index: sys/kern/kern_prot.c =================================================================== --- sys/kern/kern_prot.c (revision 240919) +++ sys/kern/kern_prot.c (working copy) @@ -279,7 +279,7 @@ #ifndef _SYS_SYSPROTO_H_ struct getgroups_args { - u_int gidsetsize; + int gidsetsize; gid_t *gidset; }; #endif @@ -801,7 +801,7 @@ #ifndef _SYS_SYSPROTO_H_ struct setgroups_args { - u_int gidsetsize; + int gidsetsize; gid_t *gidset; }; #endif @@ -812,7 +812,7 @@ gid_t *groups = NULL; int error; - if (uap->gidsetsize > ngroups_max + 1) + if (uap->gidsetsize < 0 || uap->gidsetsize > ngroups_max + 1) return (EINVAL); groups = malloc(uap->gidsetsize * sizeof(gid_t), M_TEMP, M_WAITOK); error = copyin(uap->gidset, groups, uap->gidsetsize * sizeof(gid_t)); Index: sys/kern/systrace_args.c =================================================================== --- sys/kern/systrace_args.c (revision 240919) +++ sys/kern/systrace_args.c (working copy) @@ -491,7 +491,7 @@ /* getgroups */ case 79: { struct getgroups_args *p = params; - uarg[0] = p->gidsetsize; /* u_int */ + iarg[0] = p->gidsetsize; /* int */ uarg[1] = (intptr_t) p->gidset; /* gid_t * */ *n_args = 2; break; @@ -499,7 +499,7 @@ /* setgroups */ case 80: { struct setgroups_args *p = params; - uarg[0] = p->gidsetsize; /* u_int */ + iarg[0] = p->gidsetsize; /* int */ uarg[1] = (intptr_t) p->gidset; /* gid_t * */ *n_args = 2; break; Index: sys/kern/syscalls.master =================================================================== --- sys/kern/syscalls.master (revision 240919) +++ sys/kern/syscalls.master (working copy) @@ -183,9 +183,9 @@ 77 AUE_NULL OBSOL vlimit 78 AUE_MINCORE STD { int mincore(const void *addr, size_t len, \ char *vec); } -79 AUE_GETGROUPS STD { int getgroups(u_int gidsetsize, \ +79 AUE_GETGROUPS STD { int getgroups(int gidsetsize, \ gid_t *gidset); } -80 AUE_SETGROUPS STD { int setgroups(u_int gidsetsize, \ +80 AUE_SETGROUPS STD { int setgroups(int gidsetsize, \ gid_t *gidset); } 81 AUE_GETPGRP STD { int getpgrp(void); } 82 AUE_SETPGRP STD { int setpgid(int pid, int pgid); } Index: sys/compat/freebsd32/syscalls.master =================================================================== --- sys/compat/freebsd32/syscalls.master (revision 240919) +++ sys/compat/freebsd32/syscalls.master (working copy) @@ -181,9 +181,9 @@ 77 AUE_NULL OBSOL vlimit 78 AUE_MINCORE NOPROTO { int mincore(const void *addr, size_t len, \ char *vec); } -79 AUE_GETGROUPS NOPROTO { int getgroups(u_int gidsetsize, \ +79 AUE_GETGROUPS NOPROTO { int getgroups(int gidsetsize, \ gid_t *gidset); } -80 AUE_SETGROUPS NOPROTO { int setgroups(u_int gidsetsize, \ +80 AUE_SETGROUPS NOPROTO { int setgroups(int gidsetsize, \ gid_t *gidset); } 81 AUE_GETPGRP NOPROTO { int getpgrp(void); } 82 AUE_SETPGRP NOPROTO { int setpgid(int pid, int pgid); } --- getsetgroups_arg.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted: