mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-25 10:01:02 +01:00
kern: fail getgroup and setgroup with negative int
Found using https://github.com/NetBSD/src/blob/trunk/tests/lib/libc/sys/t_getgroups.c getgroups/setgroups want an int and therefore casting it to u_int resulted in `getgroups(-1, ...)` not returning -1 / errno = EINVAL. imp@ updated syscall.master and made changes markj@ suggested PR: 189941 Tested by: imp@ Reviewed by: markj@ Pull Request: https://github.com/freebsd/freebsd-src/pull/407 Differential Revision: https://reviews.freebsd.org/D30617
This commit is contained in:
parent
1976e07954
commit
4bc2174a1b
@ -288,7 +288,7 @@ sys_getegid(struct thread *td, struct getegid_args *uap)
|
||||
|
||||
#ifndef _SYS_SYSPROTO_H_
|
||||
struct getgroups_args {
|
||||
u_int gidsetsize;
|
||||
int gidsetsize;
|
||||
gid_t *gidset;
|
||||
};
|
||||
#endif
|
||||
@ -296,8 +296,7 @@ int
|
||||
sys_getgroups(struct thread *td, struct getgroups_args *uap)
|
||||
{
|
||||
struct ucred *cred;
|
||||
u_int ngrp;
|
||||
int error;
|
||||
int ngrp, error;
|
||||
|
||||
cred = td->td_ucred;
|
||||
ngrp = cred->cr_ngroups;
|
||||
@ -791,7 +790,7 @@ fail:
|
||||
|
||||
#ifndef _SYS_SYSPROTO_H_
|
||||
struct setgroups_args {
|
||||
u_int gidsetsize;
|
||||
int gidsetsize;
|
||||
gid_t *gidset;
|
||||
};
|
||||
#endif
|
||||
@ -801,11 +800,10 @@ sys_setgroups(struct thread *td, struct setgroups_args *uap)
|
||||
{
|
||||
gid_t smallgroups[XU_NGROUPS];
|
||||
gid_t *groups;
|
||||
u_int gidsetsize;
|
||||
int error;
|
||||
int gidsetsize, error;
|
||||
|
||||
gidsetsize = uap->gidsetsize;
|
||||
if (gidsetsize > ngroups_max + 1)
|
||||
if (gidsetsize > ngroups_max + 1 || gidsetsize < 0)
|
||||
return (EINVAL);
|
||||
|
||||
if (gidsetsize > XU_NGROUPS)
|
||||
|
@ -523,13 +523,13 @@
|
||||
}
|
||||
79 AUE_GETGROUPS STD {
|
||||
int getgroups(
|
||||
u_int gidsetsize,
|
||||
int gidsetsize,
|
||||
_Out_writes_opt_(gidsetsize) gid_t *gidset
|
||||
);
|
||||
}
|
||||
80 AUE_SETGROUPS STD {
|
||||
int setgroups(
|
||||
u_int gidsetsize,
|
||||
int gidsetsize,
|
||||
_In_reads_(gidsetsize) gid_t *gidset
|
||||
);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user