1 Why an applet can't be NOFORK or NOEXEC?
4 interactive: may wait for user input, ^C has to work
5 spawner: "tool PROG ARGS" which changes program's environment - must fork
6 changes state: e.g. environment, signal handlers
7 runner: sometimes may run for long(ish) time, and/or works with network:
8 ^C has to work (cat BIGFILE, chmod -R, ftpget, nc)
10 "runners" can become eligible after hush is taught ^C to interrupt NOFORKs!
13 suid: runs under different uid - must fork+exec
15 Why shouldn't be NOFORK/NOEXEC:
16 complex: no immediately obvious reason why NOFORK wouldn't work,
17 but does some non-obvoius operations (example: fuser, lsof, losetup);
18 nested xmallocs (typical in complex code) is a problem for NOFORK
19 rare: not used often enough to bother optimizing (example: poweroff)
20 longterm: often runs for a long time (many seconds), execing would make
21 memory footprint smaller
22 daemon: runs indefinitely
49 cal - runner: cal -n9999
53 chgrp - noexec. runner
54 chmod - noexec. runner
55 chown - noexec. runner
56 chpasswd - runner (list of "user:password"s from stdin)
61 cksum - noexec. runner
73 date - noexec. nofork candidate(needs to stop messing up env, free xasprintf result, not use xfuncs after xasprintf)
74 dc - runner (eats stdin if no params)
80 devmem - runner, complex (access to device memory may hang)
81 df - complex (nested allocs)
87 dnsdomainname - DNS resolution may trigger, need ^C
88 dos2unix - noexec. runner
97 env - noexec. changes state (env)
101 expr - complex (nested allocs)
102 factor - runner (eats stdin if no params)
105 fatattr - complex (xopen+xioctl can leak fd)
107 fbsplash - runner, interactive
113 find - noexec. runner
120 fold - noexec. runner
121 free - nofork candidate(struct globals, needs to close /proc/meminfo fd)
140 hdparm - complex, rare
141 head - noexec. runner
142 hexdump - noexec. runner
144 hostname - DNS resolution may trigger, need ^C
178 last - runner (I've got 1300 lines of output when tried it)
188 login - suid, interactive
207 man - spawner, interactive
208 md5sum - noexec. runner
211 microcom - interactive, complex
230 mv - runner (can be noexec?)
234 netstat - runner with -c
245 paste - noexec. runner
247 pgrep - nofork candidate(xregcomp, procps_scan - are they ok?)
248 pidof - nofork candidate(uses find_pid_by_name, is that ok?)
253 pkill - nofork candidate(xregcomp, procps_scan - are they ok?)
257 powertop - interactive, longterm
274 renice - nofork candidate(uses getpwnam, is that ok?)
275 reset - spawner (execs "stty")
276 resize - noexec. changes state (signal handlers)
278 rm - noexec. rm -i interactive
284 rtcwake - complex, rare
305 sha1sum - noexec. runner
306 sha256sum - noexec. runner
307 sha3sum - noexec. runner
308 sha512sum - noexec. runner
309 showkey - interactive
311 shuf - noexec. runner
316 sort - noexec. runner
320 stat - nofork candidate(needs fewer allocs)
331 switch_root - spawner, rare, changes state
346 time - spawner, changes state (signals)
347 timeout - spawner, changes state (signals)
348 top - interactive, longterm
351 traceroute - suid, runner
352 traceroute6 - suid, runner
375 unix2dos - noexec. runner
381 uptime - nofork candidate(is getutxent ok?)
382 users - nofork candidate(is getutxent ok?)
400 xargs - noexec. spawner