From 3c92af3a93ca3b308e2017ca04082b81056ce248 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 2 May 2024 10:07:04 +0200 Subject: [PATCH] wall: check sysconf() returnvalue Signed-off-by: Karel Zak --- term-utils/wall.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/term-utils/wall.c b/term-utils/wall.c index 4937bdc80..125fde438 100644 --- a/term-utils/wall.c +++ b/term-utils/wall.c @@ -136,10 +136,17 @@ static gid_t get_group_gid(const char *group) static struct group_workspace *init_group_workspace(const char *group) { - struct group_workspace *buf = xmalloc(sizeof(struct group_workspace)); + struct group_workspace *buf; + long n; + + n = sysconf(_SC_NGROUPS_MAX); + if (n < 0 || n > INT_MAX - 1) + return NULL; + + buf = xmalloc(sizeof(struct group_workspace)); + buf->ngroups = n + 1; /* room for the primary gid */ buf->requested_group = get_group_gid(group); - buf->ngroups = sysconf(_SC_NGROUPS_MAX) + 1; /* room for the primary gid */ buf->groups = xcalloc(buf->ngroups, sizeof(*buf->groups)); return buf; -- 2.47.2