cosmopolitan/test/libc
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
..
calls Loader path security (#1012) 2023-12-15 12:23:58 -05:00
dns Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
fmt Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
intrin Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
log Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
mem Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
nexgen32e Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
proc Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
release Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
runtime Fix ZipOS deadlock/segfault (#1011) 2023-12-14 19:59:20 -08:00
sock Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
stdio Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
str Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
thread Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
time Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
tinymath Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
x Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
xed Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
BUILD.mk Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00