From: Karel Zak Date: Thu, 2 May 2024 08:07:04 +0000 (+0200) Subject: wall: check sysconf() returnvalue X-Git-Tag: v2.42-start~358 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3c92af3a93ca3b308e2017ca04082b81056ce248;p=thirdparty%2Futil-linux.git wall: check sysconf() returnvalue Signed-off-by: Karel Zak --- 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;