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); }