mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 13:00:06 +00:00
grantpt: Get rid of alloca
Replace alloca with a scratch_buffer to avoid potential stack overflows. Message-Id: <20230613191631.1080455-1-josimmon@redhat.com>
This commit is contained in:
parent
1d44530a5b
commit
01dd2875f8
@ -20,6 +20,7 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <scratch_buffer.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
@ -147,10 +148,19 @@ grantpt (int fd)
|
|||||||
/* `sysconf' does not support _SC_GETGR_R_SIZE_MAX.
|
/* `sysconf' does not support _SC_GETGR_R_SIZE_MAX.
|
||||||
Try a moderate value. */
|
Try a moderate value. */
|
||||||
grbuflen = 1024;
|
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);
|
__getgrnam_r (TTY_GROUP, &grbuf, grtmpbuf, grbuflen, &p);
|
||||||
if (p != NULL)
|
if (p != NULL)
|
||||||
tty_gid = p->gr_gid;
|
tty_gid = p->gr_gid;
|
||||||
|
|
||||||
|
scratch_buffer_free(&sbuf);
|
||||||
}
|
}
|
||||||
gid_t gid = tty_gid == -1 ? __getgid () : tty_gid;
|
gid_t gid = tty_gid == -1 ? __getgid () : tty_gid;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user