Date: Mon, 31 Dec 2018 11:20:12 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 234523] elf_aux_info() doesn't expose all AT_* vectors Message-ID: <bug-234523-227@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=234523 Bug ID: 234523 Summary: elf_aux_info() doesn't expose all AT_* vectors Product: Base System Version: CURRENT Hardware: Any OS: Any Status: New Severity: Affects Only Me Priority: --- Component: bin Assignee: bugs@FreeBSD.org Reporter: jbeich@FreeBSD.org KERN_PROC_AUXV allows accessing arbitrary AT_* vectors but libc exposes only few via elf_aux_info(3). For example, one may want to rely on libc caching AT_EXECPATH instead of retrieving KERN_PROC_PATHNAME directly. $ cat elf_aux_info.c #include <sys/auxv.h> #include <limits.h> #include <stdio.h> int main() { char exe[PATH_MAX + 1] = {0}; elf_aux_info(AT_EXECPATH, &exe, sizeof(exe)); printf("%s\n", exe); return 0; } $ make elf_aux_info $ ./elf_aux_info $ vs. $ cat getauxval_naive.c #include <sys/param.h> #include <sys/sysctl.h> #include <elf.h> #include <errno.h> #include <unistd.h> #include <stdio.h> static unsigned long getauxval(unsigned long type) { Elf_Auxinfo auxv[AT_COUNT]; size_t len = sizeof(auxv); int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_AUXV, getpid(), }; if (sysctl(mib, nitems(mib), auxv, &len, NULL, 0) != -1) { for (size_t i = 0; i < nitems(auxv); i++) if ((unsigned long)auxv[i].a_type == type) return auxv[i].a_un.a_val; errno = ENOENT; } return 0; } int main() { printf("%s\n", (char *)getauxval(AT_EXECPATH)); return 0; } $ make getauxval_naive $ ./getauxval_naive /home/foo/getauxval_naive $ -- You are receiving this mail because: You are the assignee for the bug.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-234523-227>
