aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Certner <olce@FreeBSD.org>2025-09-16 15:52:20 +0000
committerOlivier Certner <olce@FreeBSD.org>2025-09-17 12:16:06 +0000
commit0b018cfd81d8fdd64af3fe94c6989a82c0d3afa9 (patch)
tree688bd0107a2a3ed2fb341deb78760976ad771d1f
parent696cfb27ca4e60ebd49c45355a8a9c4945f84f98 (diff)
initgroups(3): Fix return value on allocation failure
We must not return ENOMEM, but rather -1 with 'errno' set to ENOMEM, as described in the manual page and as other implementations are doing. A malloc() failure actually already sets ENOMEM for us. Add comments indicating which function set 'errno' each time we return. While here, improve style and remove useless headers. Reviewed by: kib, emaste Fixes: 54404cfb13d4 ("In preparation for raising NGROUPS and NGROUPS_MAX, ...") MFC after: 5 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D52580
-rw-r--r--lib/libc/gen/initgroups.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/lib/libc/gen/initgroups.c b/lib/libc/gen/initgroups.c
index b6697dd7ed8f..55f17a94fa8e 100644
--- a/lib/libc/gen/initgroups.c
+++ b/lib/libc/gen/initgroups.c
@@ -31,11 +31,7 @@
#include <sys/param.h>
-#include "namespace.h"
-#include <err.h>
-#include "un-namespace.h"
#include <errno.h>
-#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -51,12 +47,13 @@ initgroups(const char *uname, gid_t agroup)
* setgroups to fail and set errno.
*/
ngroups_max = sysconf(_SC_NGROUPS_MAX) + 2;
- if ((groups = malloc(sizeof(*groups) * ngroups_max)) == NULL)
- return (ENOMEM);
+ groups = malloc(sizeof(*groups) * ngroups_max);
+ if (groups == NULL)
+ return (-1); /* malloc() set 'errno'. */
ngroups = (int)ngroups_max;
getgrouplist(uname, agroup, groups, &ngroups);
ret = setgroups(ngroups, groups);
free(groups);
- return (ret);
+ return (ret); /* setgroups() set 'errno'. */
}