Message ID | 20230928130548.1203408-1-josimmon@redhat.com |
---|---|
State | New |
Headers | show |
Series | [v3] nss: Get rid of alloca usage in db-XXX | expand |
On Thu, Sep 28, 2023 at 09:05:37AM -0400, Joe Simmons-Talbott wrote: > Replace alloca usage with a scratch_buffer. Ping. > --- > Changes to v2: > * fix '\' alignment. > * set errnop to errno rather than ENOMEM > > nss/nss_db/db-XXX.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c > index 0ce730db5a..8f174fc8ea 100644 > --- a/nss/nss_db/db-XXX.c > +++ b/nss/nss_db/db-XXX.c > @@ -18,6 +18,7 @@ > > #include <dlfcn.h> > #include <fcntl.h> > +#include <scratch_buffer.h> > #include <stdint.h> > #include <sys/mman.h> > #include <libc-lock.h> > @@ -126,6 +127,8 @@ enum nss_status \ > char *buffer, size_t buflen, int *errnop H_ERRNO_PROTO)\ > { \ > struct parser_data *data = (void *) buffer; \ > + struct scratch_buffer sbuf; \ > + scratch_buffer_init (&sbuf); \ > \ > if (buflen < sizeof *data) \ > { \ > @@ -160,7 +163,14 @@ enum nss_status \ > else \ > { \ > const size_t size = (keysize) + 1; \ > - key = alloca (size); \ > + if (!scratch_buffer_set_array_size (&sbuf, 1, size)) \ > + { \ > + *errnop = errno; \ > + H_ERRNO_SET (NETDB_INTERNAL); \ > + status = NSS_STATUS_TRYAGAIN; \ > + goto out; \ > + } \ > + key = sbuf.data; \ > \ > KEYPRINTF keypattern; \ > } \ > @@ -216,6 +226,7 @@ enum nss_status \ > \ > out: \ > internal_endent (&state); \ > + scratch_buffer_free (&sbuf); \ > \ > return status; \ > } > -- > 2.39.2 >
diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c index 0ce730db5a..8f174fc8ea 100644 --- a/nss/nss_db/db-XXX.c +++ b/nss/nss_db/db-XXX.c @@ -18,6 +18,7 @@ #include <dlfcn.h> #include <fcntl.h> +#include <scratch_buffer.h> #include <stdint.h> #include <sys/mman.h> #include <libc-lock.h> @@ -126,6 +127,8 @@ enum nss_status \ char *buffer, size_t buflen, int *errnop H_ERRNO_PROTO)\ { \ struct parser_data *data = (void *) buffer; \ + struct scratch_buffer sbuf; \ + scratch_buffer_init (&sbuf); \ \ if (buflen < sizeof *data) \ { \ @@ -160,7 +163,14 @@ enum nss_status \ else \ { \ const size_t size = (keysize) + 1; \ - key = alloca (size); \ + if (!scratch_buffer_set_array_size (&sbuf, 1, size)) \ + { \ + *errnop = errno; \ + H_ERRNO_SET (NETDB_INTERNAL); \ + status = NSS_STATUS_TRYAGAIN; \ + goto out; \ + } \ + key = sbuf.data; \ \ KEYPRINTF keypattern; \ } \ @@ -216,6 +226,7 @@ enum nss_status \ \ out: \ internal_endent (&state); \ + scratch_buffer_free (&sbuf); \ \ return status; \ }