summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/i386/ibcs2/ibcs2_misc.c10
-rw-r--r--sys/kern/kern_prot.c8
2 files changed, 14 insertions, 4 deletions
diff --git a/sys/i386/ibcs2/ibcs2_misc.c b/sys/i386/ibcs2/ibcs2_misc.c
index 6d25937..c537100 100644
--- a/sys/i386/ibcs2/ibcs2_misc.c
+++ b/sys/i386/ibcs2/ibcs2_misc.c
@@ -663,9 +663,13 @@ ibcs2_getgroups(td, uap)
u_int i, ngrp;
int error;
- if (uap->gidsetsize < 0)
- return (EINVAL);
- ngrp = MIN(uap->gidsetsize, ngroups_max + 1);
+ if (uap->gidsetsize < td->td_ucred->cr_ngroups) {
+ if (uap->gidsetsize == 0)
+ ngrp = 0;
+ else
+ return (EINVAL);
+ } else
+ ngrp = td->td_ucred->cr_ngroups;
gp = malloc(ngrp * sizeof(*gp), M_TEMP, M_WAITOK);
error = kern_getgroups(td, &ngrp, gp);
if (error)
diff --git a/sys/kern/kern_prot.c b/sys/kern/kern_prot.c
index 5a5c24c..16b0f37 100644
--- a/sys/kern/kern_prot.c
+++ b/sys/kern/kern_prot.c
@@ -283,7 +283,13 @@ getgroups(struct thread *td, register struct getgroups_args *uap)
u_int ngrp;
int error;
- ngrp = MIN(uap->gidsetsize, ngroups_max + 1);
+ if (uap->gidsetsize < td->td_ucred->cr_ngroups) {
+ if (uap->gidsetsize == 0)
+ ngrp = 0;
+ else
+ return (EINVAL);
+ } else
+ ngrp = td->td_ucred->cr_ngroups;
groups = malloc(ngrp * sizeof(*groups), M_TEMP, M_WAITOK);
error = kern_getgroups(td, &ngrp, groups);
if (error)
OpenPOWER on IntegriCloud