cosmopolitan/libc/runtime
Jōshin f94c11d978
Loader path security (#1012)
The ape loader now passes the program executable name directly as a
register. `x2` is used on aarch64, `%rdx` on x86_64. This is passed
as the third argument to `cosmo()` (M1) or `Launch` (non-M1) and is
assigned to the global `__program_executable_name`.

`GetProgramExecutableName` now returns this global's value, setting
it if it is initially null. `InitProgramExecutableName` first tries
exotic, secure methods: `KERN_PROC_PATHNAME` on FreeBSD/NetBSD, and
`/proc` on Linux. If those produce a reasonable response (i.e., not
`"/usr/bin/ape"`, which happens with the loader before this change),
that is used. Otherwise, if `issetugid()`, the empty string is used.
Otherwise, the old argv/envp parsing code is run.

The value returned from the loader is always the full absolute path
of the binary to be executed, having passed through `realpath`. For
the non-M1 loader, this necessitated writing `RealPath`, which uses
`readlinkat` of `"/proc/self/fd/[progfd]"` on Linux, `F_GETPATH` on
Xnu, and the `__realpath` syscall on OpenBSD. On FreeBSD/NetBSD, it
punts to `GetProgramExecutableName`, which is secure on those OSes.

With the loader, all platforms now have a secure program executable
name. With no loader or an old loader, everything still works as it
did, but setuid/setgid is not supported if the insecure pathfinding
code would have been needed.

Fixes #991.
2023-12-15 12:23:58 -05:00
..
.cosmo Move zipos into runtime package 2023-08-11 23:14:02 -07:00
__sigsetjmp_tail.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
BUILD.mk Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
clktck.h Reduce header complexity 2023-11-28 14:39:42 -08:00
clone-linux.S Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
clone-openbsd.S Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
clone-xnu.S Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
clone.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
closesymboltable.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
cosmo.S Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
cosmo2.c Loader path security (#1012) 2023-12-15 12:23:58 -05:00
cxaguard.c Add more fixes for new cosmocc toolchain 2023-11-11 23:28:19 -08:00
dsohandle.S Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
e820.internal.h Support malloc() on bare metal 2021-02-24 00:53:24 -08:00
efimain.greg.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
efipostboot.S Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
enable_tls.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
exit.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
fenv.h Reduce header complexity 2023-11-28 14:39:42 -08:00
fesetround.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
findcombinary.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
fltrounds.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
fpathconf.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
fpreset.S Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
ftrace-hook.S Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
ftrace_install.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
ftrace_stackdigs.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
ftraceinit.greg.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
ftracer.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getargmax.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getavphyspages.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getdosargv.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getdosenviron.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getinterpreterexecutablename.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getlogin.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getlogin_r.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getmemtracksize.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getpagesize.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getphyspages.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getresourcelimit.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getsymbol.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getsymbolbyaddr.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getsymbolname.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getsymboltable.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
getsysctl.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
grow.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
hook.greg.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
inflate.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
init.S Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
interceptflag.greg.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
internal.h Reduce header complexity 2023-11-28 14:39:42 -08:00
isheap.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
ismemtracked.greg.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
isstackoverflow.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
jit.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
login_tty.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
mapanon.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
mapshared.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
mapstack.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
memtrack.internal.h Exclude strace from MODE=tiny builds 2023-11-29 03:45:54 -08:00
memtrack64.txt Iterate more on recent changes 2023-11-11 00:28:22 -08:00
memtracknt.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
metalprintf.greg.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
metalprintf.internal.h Reduce header complexity 2023-11-28 14:39:42 -08:00
mman.internal.h Reduce header complexity 2023-11-28 14:39:42 -08:00
mmap.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
morph.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
morph_tls.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
mprotect-nt.greg.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
mprotect.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
msync-nt.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
msync.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
munmap.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
openexecutable.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
opensymboltable.greg.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
pathconf.h Reduce header complexity 2023-11-28 14:39:42 -08:00
pc.internal.h flip et / noet in modelines 2023-12-07 22:17:11 -05:00
printgarbage.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
printmaps.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
progname.S flip et / noet in modelines 2023-12-07 22:17:11 -05:00
runtime.h Loader path security (#1012) 2023-12-15 12:23:58 -05:00
set_tls.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
sigsetjmp.S Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
stack.h Reduce header complexity 2023-11-28 14:39:42 -08:00
straceinit.greg.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
symbols.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
symbols.internal.h Reduce header complexity 2023-11-28 14:39:42 -08:00
sysconf.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
sysconf.h Reduce header complexity 2023-11-28 14:39:42 -08:00
syslib.internal.h Reduce header complexity 2023-11-28 14:39:42 -08:00
untrackmemoryintervals.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
unwind.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
unwind.h Reduce header complexity 2023-11-28 14:39:42 -08:00
utmp.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
utmp.h Reduce header complexity 2023-11-28 14:39:42 -08:00
utmpx.h Reduce header complexity 2023-11-28 14:39:42 -08:00
valist.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
warnifpowersave.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
weakfree.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
winargs.internal.h Reduce header complexity 2023-11-28 14:39:42 -08:00
winmain.greg.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-access.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-close.c Cleanup zipos vfork (#1004) 2023-12-13 01:36:44 -08:00
zipos-fcntl.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-find.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-fstat.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-get.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-inode.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-mmap.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-normpath.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-notat.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-open.c Fix ZipOS deadlock/segfault (#1011) 2023-12-14 19:59:20 -08:00
zipos-parseuri.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-read.c Fix ZipOS deadlock/segfault (#1011) 2023-12-14 19:59:20 -08:00
zipos-seek.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-stat-impl.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos-stat.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
zipos.internal.h refs is atomic_size_t (#976) 2023-12-02 16:48:58 -08:00
zipos.S Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00