diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-08-04 19:55:01 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-08-04 19:55:01 +0200 |
commit | 5c527dc57e74c1b60c910dc1a3f3ec9683fca43d (patch) | |
tree | 03bbbda1f4869c079f381bea45c1cdbf6fcd35a7 /NOFORK_NOEXEC.lst | |
parent | 6514785f95878911b3ec88e2367234df74c14cd4 (diff) | |
download | busybox-w32-5c527dc57e74c1b60c910dc1a3f3ec9683fca43d.tar.gz busybox-w32-5c527dc57e74c1b60c910dc1a3f3ec9683fca43d.tar.bz2 busybox-w32-5c527dc57e74c1b60c910dc1a3f3ec9683fca43d.zip |
make 17 state-changing execing applets (ex: "nice PROG ARGS") noexec
The applets with "<applet> [opts] PROG ARGS" API very quickly exec
another program, noexec is okay for them:
chpst/envdir/envuidgid/softlimit/setuidgid
chroot
chrt
ionice
nice
nohup
setarch/linux32/linux64
taskset
cttyhack
"reset" and "sulogin" applets don't have this form, but also exec
another program at once, thus made noexec too.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'NOFORK_NOEXEC.lst')
-rw-r--r-- | NOFORK_NOEXEC.lst | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/NOFORK_NOEXEC.lst b/NOFORK_NOEXEC.lst index ccd8f0c96..5ec9ae3fe 100644 --- a/NOFORK_NOEXEC.lst +++ b/NOFORK_NOEXEC.lst | |||
@@ -20,7 +20,7 @@ suid: runs under different uid - must fork+exec | |||
20 | Why shouldn't be NOFORK/NOEXEC: | 20 | Why shouldn't be NOFORK/NOEXEC: |
21 | rare: not started often enough to bother optimizing (example: poweroff) | 21 | rare: not started often enough to bother optimizing (example: poweroff) |
22 | daemon: runs indefinitely; these are also always fit "rare" category | 22 | daemon: runs indefinitely; these are also always fit "rare" category |
23 | longterm: often runs for a long time (many seconds), execing would make | 23 | longterm: often runs for a long time (many seconds), execing makes |
24 | memory footprint smaller | 24 | memory footprint smaller |
25 | complex: no immediately obvious reason why NOFORK wouldn't work, | 25 | complex: no immediately obvious reason why NOFORK wouldn't work, |
26 | but does some non-obvoius operations (example: fuser, lsof, losetup); | 26 | but does some non-obvoius operations (example: fuser, lsof, losetup); |
@@ -66,9 +66,9 @@ chgrp - noexec. runner | |||
66 | chmod - noexec. runner | 66 | chmod - noexec. runner |
67 | chown - noexec. runner | 67 | chown - noexec. runner |
68 | chpasswd - runner (list of "user:password"s from stdin) | 68 | chpasswd - runner (list of "user:password"s from stdin) |
69 | chpst - noexec candidate, spawner | 69 | chpst - noexec. spawner |
70 | chroot - noexec candidate, spawner | 70 | chroot - noexec. spawner |
71 | chrt - noexec candidate, spawner | 71 | chrt - noexec. spawner |
72 | chvt - leaks: get_console_fd_or_die() may open a new fd, or return one of stdio fds. Also, "rare" category. noexec candidate. | 72 | chvt - leaks: get_console_fd_or_die() may open a new fd, or return one of stdio fds. Also, "rare" category. noexec candidate. |
73 | cksum - noexec. runner | 73 | cksum - noexec. runner |
74 | clear - NOFORK | 74 | clear - NOFORK |
@@ -80,7 +80,7 @@ cpio - runner | |||
80 | crond - daemon | 80 | crond - daemon |
81 | crontab 0 leaks: open+xasprintf | 81 | crontab 0 leaks: open+xasprintf |
82 | cryptpw - changes state: with --password-fd=N, moves N to stdin. Also, "rare" category. noexec candidate. | 82 | cryptpw - changes state: with --password-fd=N, moves N to stdin. Also, "rare" category. noexec candidate. |
83 | cttyhack - noexec candidate, spawner | 83 | cttyhack - noexec. spawner |
84 | cut - noexec. runner | 84 | cut - noexec. runner |
85 | date - noexec. nofork candidate(needs to stop messing up env, free xasprintf result, not use xfuncs after xasprintf) | 85 | date - noexec. nofork candidate(needs to stop messing up env, free xasprintf result, not use xfuncs after xasprintf) |
86 | dc - runner (eats stdin if no params) | 86 | dc - runner (eats stdin if no params) |
@@ -107,8 +107,8 @@ ed - interactive, longterm | |||
107 | egrep - longterm runner ("CMD | egrep ..." may run indefinitely, better to exec to conserve memory) | 107 | egrep - longterm runner ("CMD | egrep ..." may run indefinitely, better to exec to conserve memory) |
108 | eject - leaks: open+ioctl_or_perror_and_die, changes state (moves fds) | 108 | eject - leaks: open+ioctl_or_perror_and_die, changes state (moves fds) |
109 | env - noexec. spawner, changes state (env) | 109 | env - noexec. spawner, changes state (env) |
110 | envdir - noexec candidate, spawner | 110 | envdir - noexec. spawner |
111 | envuidgid - noexec candidate, spawner | 111 | envuidgid - noexec. spawner |
112 | expand - runner | 112 | expand - runner |
113 | expr - leaks: nested allocs | 113 | expr - leaks: nested allocs |
114 | factor - runner (eats stdin if no params) | 114 | factor - runner (eats stdin if no params) |
@@ -128,7 +128,7 @@ flash_eraseall | |||
128 | flash_lock | 128 | flash_lock |
129 | flash_unlock | 129 | flash_unlock |
130 | flashcp | 130 | flashcp |
131 | flock - spawner, changes state (file locks) | 131 | flock - spawner, changes state (file locks), let's play safe and not be noexec |
132 | fold - noexec. runner | 132 | fold - noexec. runner |
133 | free - nofork candidate(struct globals, needs to close /proc/meminfo fd) | 133 | free - nofork candidate(struct globals, needs to close /proc/meminfo fd) |
134 | freeramdisk - leaks: open+ioctl_or_perror_and_die | 134 | freeramdisk - leaks: open+ioctl_or_perror_and_die |
@@ -170,7 +170,7 @@ init - daemon | |||
170 | inotifyd - daemon | 170 | inotifyd - daemon |
171 | insmod - noexec | 171 | insmod - noexec |
172 | install - runner | 172 | install - runner |
173 | ionice - spawner | 173 | ionice - noexec. spawner |
174 | iostat - runner | 174 | iostat - runner |
175 | ip - noexec candidate | 175 | ip - noexec candidate |
176 | ipaddr - noexec candidate | 176 | ipaddr - noexec candidate |
@@ -190,8 +190,8 @@ klogd - daemon | |||
190 | last - runner (I've got 1300 lines of output when tried it) | 190 | last - runner (I've got 1300 lines of output when tried it) |
191 | less - interactive, longterm | 191 | less - interactive, longterm |
192 | link - NOFORK | 192 | link - NOFORK |
193 | linux32 - spawner | 193 | linux32 - noexec. spawner |
194 | linux64 - spawner | 194 | linux64 - noexec. spawner |
195 | linuxrc - daemon | 195 | linuxrc - daemon |
196 | ln - noexec | 196 | ln - noexec |
197 | loadfont - leaks: config_open+bb_error_msg_and_die("map format") | 197 | loadfont - leaks: config_open+bb_error_msg_and_die("map format") |
@@ -247,11 +247,11 @@ netstat - runner with -c | |||
247 | nice - noexec candidate, spawner | 247 | nice - noexec candidate, spawner |
248 | nl - runner | 248 | nl - runner |
249 | nmeter - longterm | 249 | nmeter - longterm |
250 | nohup - noexec candidate (maybe free concat_path_file result?), spawner | 250 | nohup - noexec. spawner |
251 | nproc - NOFORK | 251 | nproc - NOFORK |
252 | ntpd - daemon | 252 | ntpd - daemon |
253 | od - runner | 253 | od - runner |
254 | openvt - spawner | 254 | openvt - longterm: spawns a child and waits for it |
255 | partprobe - noexec candidate (simple), leaks: open+ioctl_or_perror_and_die(BLKRRPART) | 255 | partprobe - noexec candidate (simple), leaks: open+ioctl_or_perror_and_die(BLKRRPART) |
256 | passwd - suid | 256 | passwd - suid |
257 | paste - noexec. runner | 257 | paste - noexec. runner |
@@ -304,15 +304,15 @@ scriptreplay | |||
304 | sed - runner | 304 | sed - runner |
305 | sendmail - runner | 305 | sendmail - runner |
306 | seq - noexec. runner | 306 | seq - noexec. runner |
307 | setarch - spawner | 307 | setarch - noexec. spawner |
308 | setconsole | 308 | setconsole |
309 | setfont | 309 | setfont |
310 | setkeycodes | 310 | setkeycodes |
311 | setlogcons | 311 | setlogcons |
312 | setpriv - spawner | 312 | setpriv - spawner, changes state, let's play safe and not be noexec |
313 | setserial | 313 | setserial |
314 | setsid - spawner | 314 | setsid - spawner, uses fork_or_rexec() [not audted to work in noexec], let's play safe and not be noexec |
315 | setuidgid | 315 | setuidgid - noexec. spawner |
316 | sha1sum - noexec. runner | 316 | sha1sum - noexec. runner |
317 | sha256sum - noexec. runner | 317 | sha256sum - noexec. runner |
318 | sha3sum - noexec. runner | 318 | sha3sum - noexec. runner |
@@ -323,7 +323,7 @@ shuf - noexec. runner | |||
323 | slattach | 323 | slattach |
324 | sleep - runner, longterm | 324 | sleep - runner, longterm |
325 | smemcap - runner | 325 | smemcap - runner |
326 | softlimit - noexec candidate, spawner | 326 | softlimit - noexec. spawner |
327 | sort - noexec. runner | 327 | sort - noexec. runner |
328 | split - runner | 328 | split - runner |
329 | ssl_client - longterm | 329 | ssl_client - longterm |
@@ -332,21 +332,21 @@ stat - nofork candidate(needs fewer allocs) | |||
332 | strings - runner | 332 | strings - runner |
333 | stty - noexec/nofork candidate. has no allocs or opens except xmove_fd(xopen("-F DEVICE"),STDIN). tcsetattr(STDIN) is not a problem: it would work the same across processes sharing this fd | 333 | stty - noexec/nofork candidate. has no allocs or opens except xmove_fd(xopen("-F DEVICE"),STDIN). tcsetattr(STDIN) is not a problem: it would work the same across processes sharing this fd |
334 | su - suid, spawner | 334 | su - suid, spawner |
335 | sulogin - spawner | 335 | sulogin - noexec. spawner |
336 | sum - runner | 336 | sum - runner |
337 | sv - noexec candidate, needs ^C (uses usleep(420000)) | 337 | sv - noexec candidate, needs ^C (uses usleep(420000)) |
338 | svc - noexec candidate, needs ^C (uses usleep(420000)) | 338 | svc - noexec candidate, needs ^C (uses usleep(420000)) |
339 | svlogd - daemon | 339 | svlogd - daemon |
340 | swapoff - rare | 340 | swapoff - rare |
341 | swapon - rare | 341 | swapon - rare |
342 | switch_root - spawner, rare, changes state | 342 | switch_root - spawner, rare, changes state (oh yes), execing may be important to free binary's inode |
343 | sync - NOFORK | 343 | sync - NOFORK |
344 | sysctl - noexec candidate, leaks: xstrdup+xmalloc_read | 344 | sysctl - noexec candidate, leaks: xstrdup+xmalloc_read |
345 | syslogd - daemon | 345 | syslogd - daemon |
346 | tac - noexec. runner | 346 | tac - noexec. runner |
347 | tail - runner | 347 | tail - runner |
348 | tar - runner | 348 | tar - runner |
349 | taskset - spawner | 349 | taskset - noexec. spawner |
350 | tcpsvd - daemon | 350 | tcpsvd - daemon |
351 | tee - runner | 351 | tee - runner |
352 | telnet - interactive, longterm | 352 | telnet - interactive, longterm |
@@ -354,8 +354,8 @@ telnetd - daemon | |||
354 | test - NOFORK | 354 | test - NOFORK |
355 | tftp - runner | 355 | tftp - runner |
356 | tftpd - daemon | 356 | tftpd - daemon |
357 | time - spawner, changes state (signals) | 357 | time - spawner, longterm, changes state (signals) |
358 | timeout - spawner, changes state (signals) | 358 | timeout - spawner, longterm, changes state (signals) |
359 | top - interactive, longterm | 359 | top - interactive, longterm |
360 | touch - NOFORK | 360 | touch - NOFORK |
361 | tr - runner | 361 | tr - runner |