From 9802c0f2fec787ffcd192e1f2d6871dc586c6dad Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Tue, 24 Sep 2024 13:23:10 +0200 Subject: [PATCH] elf: Eliminate alloca in open_verify With the two-stage approach for exception handling, the name can be freed after it has been copied into the exception, but before it is raised. --- elf/dl-load.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/elf/dl-load.c b/elf/dl-load.c index c47ae093f3..ac8e217a7f 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -1592,15 +1592,13 @@ open_verify (const char *name, int fd, errval = errno; errstring = (errval == 0 ? N_("file too short") : N_("cannot read file data")); - lose: + lose:; + struct dl_exception exception; + _dl_exception_create (&exception, name, errstring); if (free_name) - { - char *realname = (char *) name; - name = strdupa (realname); - free (realname); - } + free ((char *) name); __close_nocancel (fd); - _dl_signal_error (errval, name, NULL, errstring); + _dl_signal_exception (errval, &exception, NULL); } /* See whether the ELF header is what we expect. */