[v3] nss: Get rid of alloca usage in db-XXX
Checks
Context |
Check |
Description |
redhat-pt-bot/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
redhat-pt-bot/TryBot-32bit |
success
|
Build for i686
|
linaro-tcwg-bot/tcwg_glibc_build--master-aarch64 |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_glibc_check--master-aarch64 |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_glibc_build--master-arm |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_glibc_check--master-arm |
success
|
Testing passed
|
Commit Message
Replace alloca usage with a scratch_buffer.
---
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(-)
Comments
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
>
@@ -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; \
}