[PATCH] grantpt: Get rid of alloca
Samuel Thibault
samuel.thibault@ens-lyon.org
Wed Jun 7 00:40:09 GMT 2023
Hello,
* Joe Simmons-Talbott via Libc-alpha:
> > Replace alloca with a scratch_buffer to avoid potential stack overflows.
> > ---
> > 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..e5d2390bf2 100644
> > --- a/sysdeps/unix/grantpt.c
> > +++ b/sysdeps/unix/grantpt.c
> > @@ -147,7 +148,14 @@ 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;
This does not compile, missing =
> > + goto cleanup;
> > + }
> > + grtmpbuf = sbuf.data;
> > __getgrnam_r (TTY_GROUP, &grbuf, grtmpbuf, grbuflen, &p);
> > if (p != NULL)
> > tty_gid = p->gr_gid;
> > @@ -255,6 +263,8 @@ grantpt (int fd)
> > if (buf != _buf)
> > free (buf);
> >
> > + scratch_buffer_free(sbuf);
sbuf is undefined here since it was defined in the
if (__glibc_unlikely (tty_gid == -1))
block. Probably you just want to just move the scratch_buffer_free call
to the end of that block. Also, you need to pass &sbuf, not sbuf.
Samuel
More information about the Libc-alpha
mailing list