git: 91d8163803b4 - main - rtld: fix leak in get_program_var_addr() on the error path

From: Konstantin Belousov <kib_at_FreeBSD.org>
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);
 }