* [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).