cosmopolitan/examples
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
..
package Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
pyapp Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
pylife 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
clear.c Overhaul process spawning 2023-09-10 08:17:44 -07:00
crashreport.c Make improvements 2023-09-18 21:04:47 -07:00
ctrlc.c Fix some additional Windows TTY issues 2023-10-04 02:17:25 -07:00
date.c Make improvements to cosmocc toolchain 2023-06-10 15:50:01 -07:00
dlopen.c Fix dlopen() for FreeBSD and NetBSD 2023-11-18 04:35:48 -08:00
env.c Loader path security (#1012) 2023-12-15 12:23:58 -05:00
greenbean.c Support <isystem> includes in monorepo 2023-11-08 19:14:56 -08:00
gui.c Make examples folder somewhat more focused 2021-03-05 06:09:12 -08:00
hangman.c Fix warnings 2023-09-01 20:50:18 -07:00
hello.c Remove printf() linking hack 2023-06-17 10:13:50 -07:00
hello2.c Introduce new linker for fat ape binaries 2023-08-11 04:39:19 -07:00
hellolua.c Fix warnings 2023-09-01 20:50:18 -07:00
hellolua.lua Add Hello World example for LUA C API (#97) 2021-03-08 14:15:59 -08:00
hiredis.c Clean up some code 2023-11-16 17:31:07 -08:00
kilo.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
life.c Always initialize thread local storage 2022-07-19 00:21:46 -07:00
linenoise.c Clean up some code 2023-10-11 11:45:31 -07:00
ls.c Replace COSMO define with _COSMO_SOURCE 2023-08-13 20:55:04 -07:00
nc.c Fix warnings 2023-09-01 20:50:18 -07:00
nesemu1.cc Reduce header complexity 2023-11-28 14:39:42 -08:00
parsefloat.c Floating point parsing support for scanf family (#924) 2023-11-18 02:25:36 -08:00
pause.c Write more tests and improve kill() on Windows 2023-10-13 04:38:45 -07:00
picol.c Clean up some code 2023-11-16 17:31:07 -08:00
portscan.c Clean up some code 2023-11-16 17:31:07 -08:00
print-struct.c Cull the examples folder 2023-10-11 21:45:32 -07:00
printargs.c Make improvements 2022-04-24 10:06:05 -07:00
rusage.c Simplify the rusage.com command 2023-09-07 05:41:18 -07:00
script.c Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00
script.txt Add script.com and whois.com courtesy of FreeBSD 2022-09-13 20:26:13 -07:00
seq.c Cull the examples folder 2023-10-11 21:45:32 -07:00
setcontext.c Implement swapcontext() and makecontext() 2023-07-02 09:01:44 -07:00
setitimer.c Cull the examples folder 2023-10-11 21:45:32 -07:00
spawn_bench.c Make improvements 2023-09-18 21:04:47 -07:00
stackexplorer.c Mint APE Loader v1.7 2023-08-17 09:04:50 -07:00
stat.c Clean up some code 2023-11-16 17:31:07 -08:00
statfs.c Mint APE Loader v1.7 2023-08-17 09:04:50 -07:00
stringbuffer.c Clean up some code 2023-11-16 17:31:07 -08:00
sysconf.c Clean up some code 2023-10-11 11:45:31 -07:00
sysinfo.c Clean up some code 2023-10-11 11:45:31 -07:00
system.c Mint APE Loader v1.5 2023-07-26 13:54:49 -07:00
ttyinfo.c Clean up some code 2023-11-16 17:31:07 -08:00
ucontext-sigfpe-recovery.c Cull the examples folder 2023-10-11 21:45:32 -07:00
uname.c Improve quality of uname/gethostname/getdomainname 2022-09-03 20:20:40 -07:00
unbourne.c flip et / noet in modelines 2023-12-07 22:17:11 -05:00
vga.c Mint APE Loader v1.5 2023-07-26 13:54:49 -07:00
vga2.c [metal] Add a uprintf() routine, for non-emergency boot logging (#905) 2023-10-25 14:32:20 -07:00
walk.c Make fixes and improvements 2023-07-09 05:21:11 -07:00
wall.c Clean up some code 2023-11-16 17:31:07 -08:00
whois.c Fix more vi modelines (#1006) 2023-12-13 02:28:11 -05:00