git: 91d8163803b4 - main - rtld: fix leak in get_program_var_addr() on the error path
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 25 Oct 2026 17:34:31 UTC
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=91d8163803b4fa25e51afe1209d0f5c30c603b93
commit 91d8163803b4fa25e51afe1209d0f5c30c603b93
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-10-25 15:28:14 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-10-25 17:33:46 +0000
rtld: fix leak in get_program_var_addr() on the error path
Fixes: 1e370f038778 ("rtld: stop using unbound alloca()")
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
---
libexec/rtld-elf/rtld.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index b637a3032218..0ff7d1bb5227 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -4775,8 +4775,9 @@ get_program_var_addr(const char *name, RtldLockState *lockstate)
symlook_init(&req, name);
req.lockstate = lockstate;
donelist_init(&donelist, NULL);
+ res = NULL;
if (symlook_global(&req, &donelist) != 0)
- return (NULL);
+ goto out;
if (ELF_ST_TYPE(req.sym_out->st_info) == STT_FUNC)
res = (const void **)make_function_pointer(req.sym_out,
req.defobj_out);
@@ -4786,6 +4787,7 @@ get_program_var_addr(const char *name, RtldLockState *lockstate)
else
res = (const void **)(req.defobj_out->relocbase +
req.sym_out->st_value);
+out:
donelist_free(&donelist);
return (res);
}