public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] nss: Get rid of alloca usage in db-XXX
@ 2023-09-27 15:38 Joe Simmons-Talbott
  2023-09-27 15:55 ` Andreas Schwab
  0 siblings, 1 reply; 4+ messages in thread
From: Joe Simmons-Talbott @ 2023-09-27 15:38 UTC (permalink / raw)
  To: libc-alpha; +Cc: Joe Simmons-Talbott

Replace alloca usage with a scratch_buffer.
---
 nss/nss_db/db-XXX.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c
index 0ce730db5a..2df31a8077 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,13 @@ enum nss_status								      \
   else									      \
     {									      \
       const size_t size = (keysize) + 1;				      \
-      key = alloca (size);						      \
+      if (!scratch_buffer_set_array_size (&sbuf, 1, size))		      \
+	{								      \
+	  H_ERRNO_SET (NETDB_INTERNAL);					      \
+	  status = NSS_STATUS_TRYAGAIN;					      \
+	  return status;						      \
+	}								      \
+      key = sbuf.data;							      \
 									      \
       KEYPRINTF keypattern;						      \
     }									      \
@@ -216,6 +225,7 @@ enum nss_status								      \
 									      \
  out:									      \
   internal_endent (&state);						      \
+  scratch_buffer_free (&sbuf);						      \
 									      \
   return status;							      \
 }
-- 
2.39.2


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] nss: Get rid of alloca usage in db-XXX
  2023-09-27 15:38 [PATCH] nss: Get rid of alloca usage in db-XXX Joe Simmons-Talbott
@ 2023-09-27 15:55 ` Andreas Schwab
  2023-09-27 20:55   ` Joe Simmons-Talbott
  0 siblings, 1 reply; 4+ messages in thread
From: Andreas Schwab @ 2023-09-27 15:55 UTC (permalink / raw)
  To: Joe Simmons-Talbott; +Cc: libc-alpha

On Sep 27 2023, Joe Simmons-Talbott wrote:

> Replace alloca usage with a scratch_buffer.
> ---
>  nss/nss_db/db-XXX.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c
> index 0ce730db5a..2df31a8077 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,13 @@ enum nss_status								      \
>    else									      \
>      {									      \
>        const size_t size = (keysize) + 1;				      \
> -      key = alloca (size);						      \
> +      if (!scratch_buffer_set_array_size (&sbuf, 1, size))		      \
> +	{								      \
> +	  H_ERRNO_SET (NETDB_INTERNAL);					      \
> +	  status = NSS_STATUS_TRYAGAIN;					      \
> +	  return status;						      \

That needs to set *errnop and goto out.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] nss: Get rid of alloca usage in db-XXX
  2023-09-27 15:55 ` Andreas Schwab
@ 2023-09-27 20:55   ` Joe Simmons-Talbott
  2023-09-28  8:37     ` Andreas Schwab
  0 siblings, 1 reply; 4+ messages in thread
From: Joe Simmons-Talbott @ 2023-09-27 20:55 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: libc-alpha

On Wed, Sep 27, 2023 at 05:55:05PM +0200, Andreas Schwab wrote:
> On Sep 27 2023, Joe Simmons-Talbott wrote:
> 
> > Replace alloca usage with a scratch_buffer.
> > ---
> >  nss/nss_db/db-XXX.c | 12 +++++++++++-
> >  1 file changed, 11 insertions(+), 1 deletion(-)
> >
> > diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c
> > index 0ce730db5a..2df31a8077 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,13 @@ enum nss_status								      \
> >    else									      \
> >      {									      \
> >        const size_t size = (keysize) + 1;				      \
> > -      key = alloca (size);						      \
> > +      if (!scratch_buffer_set_array_size (&sbuf, 1, size))		      \
> > +	{								      \
> > +	  H_ERRNO_SET (NETDB_INTERNAL);					      \
> > +	  status = NSS_STATUS_TRYAGAIN;					      \
> > +	  return status;						      \
> 
> That needs to set *errnop and goto out.
> 

Thanks.  Fixed in v2.  I left the H_ERRNO_SET call in there as I wasn't
sure if I needed it or not.

Thanks,
Joe


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] nss: Get rid of alloca usage in db-XXX
  2023-09-27 20:55   ` Joe Simmons-Talbott
@ 2023-09-28  8:37     ` Andreas Schwab
  0 siblings, 0 replies; 4+ messages in thread
From: Andreas Schwab @ 2023-09-28  8:37 UTC (permalink / raw)
  To: Joe Simmons-Talbott; +Cc: libc-alpha

On Sep 27 2023, Joe Simmons-Talbott wrote:

> Thanks.  Fixed in v2.  I left the H_ERRNO_SET call in there as I wasn't
> sure if I needed it or not.

It is not redundant.  NETDB_INTERNAL is the resolver error that says
that there was a system error, with the cause recorded in errno.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-09-28  8:37 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-27 15:38 [PATCH] nss: Get rid of alloca usage in db-XXX Joe Simmons-Talbott
2023-09-27 15:55 ` Andreas Schwab
2023-09-27 20:55   ` Joe Simmons-Talbott
2023-09-28  8:37     ` Andreas Schwab

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).