Message ID | 20230927204944.3578445-1-josimmon@redhat.com |
---|---|
State | New |
Headers | show |
Series | [v2] nss: Get rid of alloca usage in db-XXX | expand |
On Sep 27 2023, Joe Simmons-Talbott wrote: > @@ -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 = ENOMEM; \ > + H_ERRNO_SET (NETDB_INTERNAL); \ > + status = NSS_STATUS_TRYAGAIN; \ > + goto out; \ The backslash is not aligned. Ok with that change.
On Sep 27 2023, Joe Simmons-Talbott wrote: > @@ -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 = ENOMEM; \ One more change: this should be errno, not ENOMEM.
On Thu, Sep 28, 2023 at 01:19:30PM +0200, Andreas Schwab wrote: > On Sep 27 2023, Joe Simmons-Talbott wrote: > > > @@ -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 = ENOMEM; \ > > One more change: this should be errno, not ENOMEM. Thanks for the review. I've posted a v3 with both changes. Thanks, Joe
diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c index 0ce730db5a..012446fed8 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 = ENOMEM; \ + 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; \ }