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 state and execs - must fork
6 changes state: e.g. environment, signal handlers
7 alloc+xfunc: xmalloc, then xfunc - leaks memory if xfunc dies
8 open+xfunc: opens fd, then calls xfunc - fd is leaked if xfunc dies
9 leaks: does not free allocated memory or opened fds
10 runner: sometimes may run for long(ish) time, and/or works with network:
11 ^C has to work (cat BIGFILE, chmod -R, ftpget, nc)
13 "runners" can become eligible after shell is taught ^C to interrupt NOFORKs,
14 need to be inspected that they do not fall into alloc+xfunc, open+xfunc
18 suid: runs under different uid - must fork+exec
20 Why shouldn't be NOFORK/NOEXEC:
21 rare: not started often enough to bother optimizing (example: poweroff)
22 daemon: runs indefinitely; these are also always fit "rare" category
23 longterm: often runs for a long time (many seconds), execing would make
24 memory footprint smaller
25 complex: no immediately obvious reason why NOFORK wouldn't work,
26 but does some non-obvoius operations (example: fuser, lsof, losetup)
53 cal - runner: cal -n9999
57 chgrp - noexec. runner
58 chmod - noexec. runner
59 chown - noexec. runner
60 chpasswd - runner (list of "user:password"s from stdin)
64 chvt - leaks: get_console_fd_or_die() may open a new fd, or return one of stdio fds. Also, "rare" category. Can be noexec.
65 cksum - noexec. runner
74 cryptpw - changes state: with --password-fd=N, moves N to stdin. Also, "rare" category. Can be noexec.
77 date - noexec. nofork candidate(needs to stop messing up env, free xasprintf result, not use xfuncs after xasprintf)
78 dc - runner (eats stdin if no params)
84 devmem - runner, complex (access to device memory may hang)
85 df - complex (nested allocs)
91 dnsdomainname - DNS resolution may trigger, need ^C
92 dos2unix - noexec. runner
101 env - noexec. changes state (env)
105 expr - complex (nested allocs)
106 factor - runner (eats stdin if no params)
109 fatattr - complex (xopen+xioctl can leak fd)
111 fbsplash - runner, interactive
117 find - noexec. runner
124 fold - noexec. runner
125 free - nofork candidate(struct globals, needs to close /proc/meminfo fd)
136 getopt - noexec. complex (many allocs)
144 hdparm - complex, rare
145 head - noexec. runner
146 hexdump - noexec. runner
148 hostname - DNS resolution may trigger, need ^C
167 ip - noexec candidate
168 ipaddr - noexec candidate
169 ipcalc - noexec candidate
170 ipcrm - noexec candidate
171 ipcs - noexec candidate
172 iplink - noexec candidate
173 ipneigh - noexec candidate
174 iproute - noexec candidate
175 iprule - noexec candidate
176 iptunnel - noexec candidate
182 last - runner (I've got 1300 lines of output when tried it)
192 login - suid, interactive
211 man - spawner, interactive
212 md5sum - noexec. runner
215 microcom - interactive, complex
234 mv - runner (can be noexec?)
238 netstat - runner with -c
249 paste - noexec. runner
251 pgrep - nofork candidate(xregcomp, procps_scan - are they ok?)
252 pidof - nofork candidate(uses find_pid_by_name, is that ok?)
257 pkill - nofork candidate(xregcomp, procps_scan - are they ok?)
261 powertop - interactive, longterm
264 ps - noexec candidate
278 renice - nofork candidate(uses getpwnam, is that ok?)
279 reset - spawner (execs "stty")
280 resize - noexec. changes state (signal handlers)
282 rm - noexec. rm -i interactive
288 rtcwake - complex, rare
309 sha1sum - noexec. runner
310 sha256sum - noexec. runner
311 sha3sum - noexec. runner
312 sha512sum - noexec. runner
313 showkey - interactive
315 shuf - noexec. runner
320 sort - noexec. runner
324 stat - nofork candidate(needs fewer allocs)
335 switch_root - spawner, rare, changes state
350 time - spawner, changes state (signals)
351 timeout - spawner, changes state (signals)
352 top - interactive, longterm
355 traceroute - suid, runner
356 traceroute6 - suid, runner
379 unix2dos - noexec. runner
385 uptime - nofork candidate(is getutxent ok?)
386 users - nofork candidate(is getutxent ok?)
404 xargs - noexec. spawner