mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 08:25:20 +09:00
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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user