socket-util: start SO_PEERGROUP loop with sysconf(_SC_NGROUPS_MAX), too

We do this for getgroups_malloc() hence we should do this here too,
after all whether we do it for a socket peer or for ourselves doesn't
make too much of a difference.
This commit is contained in:
Lennart Poettering
2024-01-29 10:18:30 +01:00
parent 25e6ce1c11
commit 7e8aa5c2ee

View File

@@ -930,12 +930,14 @@ int getpeersec(int fd, char **ret) {
}
int getpeergroups(int fd, gid_t **ret) {
socklen_t n = sizeof(gid_t) * 64;
_cleanup_free_ gid_t *d = NULL;
assert(fd >= 0);
assert(ret);
long ngroups_max = sysconf(_SC_NGROUPS_MAX);
socklen_t n = sizeof(gid_t) * MAX((socklen_t) ngroups_max, 64U);
for (;;) {
d = malloc(n);
if (!d)
@@ -953,7 +955,7 @@ int getpeergroups(int fd, gid_t **ret) {
assert_se(n % sizeof(gid_t) == 0);
n /= sizeof(gid_t);
if ((socklen_t) (int) n != n)
if (n > INT_MAX)
return -E2BIG;
*ret = TAKE_PTR(d);