From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1792) id 425FC3858D28; Sat, 17 Jun 2023 23:08:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 425FC3858D28 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1687043311; bh=ZnTFTSAMVs56rylDGg/MqEsWVk6VOvVmj93kpm2Ckjk=; h=From:To:Subject:Date:From; b=f0siJhCRYKBmSLnLYdcYxKaXlrjknNysa8N40hZycyQuEr+Fz8AVOFkJwWhlCjBKJ TZ24oV7Jy7OMAjw2N8ve/5HVC7YPc5uRXO+/y2JLLDc3FvZ4cabX7KqmHlm0lUvmk/ BlbUyAf+WBydc+wJ5m4Ax9LszHFDNMPC51Yw7noY= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Samuel Thibault To: glibc-cvs@sourceware.org Subject: [glibc] grantpt: Get rid of alloca X-Act-Checkin: glibc X-Git-Author: Joe Simmons-Talbott X-Git-Refname: refs/heads/master X-Git-Oldrev: 1d44530a5be2442e064baa48139adc9fdfb1fc6b X-Git-Newrev: 01dd2875f85213b26beefb66caad3564da89d1d1 Message-Id: <20230617230831.425FC3858D28@sourceware.org> Date: Sat, 17 Jun 2023 23:08:31 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=01dd2875f85213b26beefb66caad3564da89d1d1 commit 01dd2875f85213b26beefb66caad3564da89d1d1 Author: Joe Simmons-Talbott Date: Tue Jun 13 15:16:31 2023 -0400 grantpt: Get rid of alloca Replace alloca with a scratch_buffer to avoid potential stack overflows. Message-Id: <20230613191631.1080455-1-josimmon@redhat.com> Diff: --- sysdeps/unix/grantpt.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/sysdeps/unix/grantpt.c b/sysdeps/unix/grantpt.c index 38fce52576..226e7adb75 100644 --- a/sysdeps/unix/grantpt.c +++ b/sysdeps/unix/grantpt.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -147,10 +148,19 @@ grantpt (int fd) /* `sysconf' does not support _SC_GETGR_R_SIZE_MAX. Try a moderate value. */ grbuflen = 1024; - grtmpbuf = (char *) __alloca (grbuflen); + struct scratch_buffer sbuf; + scratch_buffer_init (&sbuf); + if (!scratch_buffer_set_array_size (&sbuf, 1, grbuflen)) + { + retval = -1; + goto cleanup; + } + grtmpbuf = sbuf.data; __getgrnam_r (TTY_GROUP, &grbuf, grtmpbuf, grbuflen, &p); if (p != NULL) tty_gid = p->gr_gid; + + scratch_buffer_free(&sbuf); } gid_t gid = tty_gid == -1 ? __getgid () : tty_gid;