chat: trim help text

Noticed while auditing nofork/noexec status

function                                             old     new   delta
packed_usage                                       31777   31747     -30

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-08-04 17:36:16 +02:00
parent dd5a40246b
commit 74c05f5b2c
3 changed files with 58 additions and 47 deletions

View File

@ -11,8 +11,8 @@ runner: sometimes may run for long(ish) time, and/or works with network:
^C has to work (cat BIGFILE, chmod -R, ftpget, nc)
"runners" can become eligible after shell is taught ^C to interrupt NOFORKs,
need to be inspected that they do not fall into alloc+xfunc, open+xfunc
categories.
need to be inspected that they do not fall into alloc+xfunc, open+xfunc,
leak categories.
Why can't be NOEXEC:
suid: runs under different uid - must fork+exec
@ -23,7 +23,15 @@ daemon: runs indefinitely; these are also always fit "rare" category
longterm: often runs for a long time (many seconds), execing would make
memory footprint smaller
complex: no immediately obvious reason why NOFORK wouldn't work,
but does some non-obvoius operations (example: fuser, lsof, losetup)
but does some non-obvoius operations (example: fuser, lsof, losetup);
detailed audit often turns out that it's a leaker
Interesting example of "interactive" applet which is nevertheless can be
(and is) NOEXEC is "rm". Yes, "rm -i" is interactive - but it's not that typical
for users to keep it waiting for many minutes, whereas running "rm" in shell
is very typical, and speeding up this common use via NOEXEC is useful.
IOW: rm is "interactive", but not "longterm".
[ - NOFORK
[[ - NOFORK
@ -34,9 +42,9 @@ adduser
adjtimex
ar - runner
arch - NOFORK
arp
arp - complex, rare
arping - runner
ash - interactive
ash - interactive, longterm
awk - noexec. runner
base64 - runner
basename - NOFORK
@ -52,7 +60,7 @@ bzcat - runner
bzip2 - runner
cal - runner: cal -n9999
cat - runner
chat
chat - needs ^C to work
chattr - runner
chgrp - noexec. runner
chmod - noexec. runner
@ -77,10 +85,10 @@ cut - noexec. runner
date - noexec. nofork candidate(needs to stop messing up env, free xasprintf result, not use xfuncs after xasprintf)
dc - runner (eats stdin if no params)
dd - noexec. runner
deallocvt
deallocvt - leaks: get_console_fd_or_die() may open a new fd, or return one of stdio fds. Also, "rare" category. Can be noexec.
delgroup
deluser
depmod
depmod - complex, rare
devmem - runner, complex (access to device memory may hang)
df - complex (nested allocs)
dhcprelay - daemon
@ -88,16 +96,16 @@ diff - runner
dirname - NOFORK
dmesg - runner
dnsd - daemon
dnsdomainname - DNS resolution may trigger, need ^C
dnsdomainname - needs ^C (may talk to DNS servers, which may be down)
dos2unix - noexec. runner
dpkg - runner
du - runner
dumpkmap
dumpkmap - leaks: get_console_fd_or_die() may open a new fd, or return one of stdio fds. Also, "rare" category. Can be noexec.
dumpleases
echo - NOFORK
ed - interactive
egrep - runner
eject
ed - interactive, longterm
egrep - longterm runner ("CMD | egrep ..." may run indefinitely, better to exec to conserve memory)
eject - leaks: open+ioctl_or_perror_and_die, changes state (moves fds)
env - noexec. changes state (env)
envdir - spawner
envuidgid - spawner
@ -107,24 +115,24 @@ factor - runner (eats stdin if no params)
fakeidentd - daemon
false - NOFORK
fatattr - complex (xopen+xioctl can leak fd)
fbset
fbsplash - runner, interactive
fdflush
fdformat - runner
fdisk - interactive
fgconsole
fgrep - runner
fbset - leaks: open+xfunc, complex, rare
fbsplash - runner, longterm
fdflush - leaks: open+ioctl_or_perror_and_die, needs ^C (floppy may be unresponsive), rare
fdformat - needs ^C (floppy may be unresponsive), longterm, rare
fdisk - interactive, longterm
fgconsole - leaks: get_console_fd_or_die() may open a new fd, or return one of stdio fds. Also, "rare" category. Can be noexec.
fgrep - longterm runner ("CMD | fgrep ..." may run indefinitely, better to exec to conserve memory)
find - noexec. runner
findfs - suid
flash_eraseall
flash_lock
flash_unlock
flashcp
flock
flock - spawner, changes state (file locks)
fold - noexec. runner
free - nofork candidate(struct globals, needs to close /proc/meminfo fd)
freeramdisk
fsck - interactive
freeramdisk - leaks: open+ioctl_or_perror_and_die
fsck - interactive, longterm
fsck.minix
fsfreeze
fstrim
@ -134,8 +142,8 @@ ftpget - runner
ftpput - runner
fuser - complex
getopt - noexec. complex (many allocs)
getty - interactive
grep - runner
getty - interactive, longterm
grep - longterm runner ("CMD | grep ..." may run indefinitely, better to exec to conserve memory)
groups - noexec
gunzip - runner
gzip - runner
@ -147,7 +155,7 @@ hexdump - noexec. runner
hostid - NOFORK
hostname - DNS resolution may trigger, need ^C
httpd - daemon
hush - interactive
hush - interactive, longterm
hwclock
i2cdetect
i2cdump
@ -180,39 +188,39 @@ killall - NOFORK
killall5 - NOFORK
klogd - daemon
last - runner (I've got 1300 lines of output when tried it)
less - interactive
less - interactive, longterm
link - NOFORK
linux32 - spawner
linux64 - spawner
linuxrc - daemon
ln - noexec
loadfont
loadkmap
loadkmap - leaks: get_console_fd_or_die() may open a new fd, or return one of stdio fds. Also, "rare" category. Can be noexec.
logger - runner
login - suid, interactive
login - suid, interactive, longterm
logname - NOFORK
losetup - complex
lpd - daemon
lpq - runner
lpr - runner
ls - noexec. runner
lsattr
lsattr - runner. noexec candidate (ls is, why not this one?)
lsmod - noexec
lsof - complex
lspci
lsscsi
lsusb
lspci - noexec candidate, too rare to bother for nofork
lsscsi - noexec candidate, too rare to bother for nofork
lsusb - noexec candidate, too rare to bother for nofork
lzcat - runner
lzma - runner
lzop - runner
lzopcat - runner
makedevs
makemime - runner
man - spawner, interactive
man - spawner, interactive, longterm
md5sum - noexec. runner
mdev - daemon
mesg
microcom - interactive, complex
microcom - interactive, longterm
mkdir - NOFORK
mkdosfs
mke2fs
@ -223,10 +231,10 @@ mkfs.vfat
mknod - noexec
mkpasswd
mkswap
mktemp
mktemp - leaks: xstrdup+concat_path_file
modinfo - noexec
modprobe - noexec
more - interactive
more - interactive, longterm
mount - suid
mountpoint
mpstat
@ -305,12 +313,11 @@ setpriv - spawner
setserial
setsid - spawner
setuidgid
sh - interactive
sha1sum - noexec. runner
sha256sum - noexec. runner
sha3sum - noexec. runner
sha512sum - noexec. runner
showkey - interactive
showkey - interactive, longterm
shred - runner
shuf - noexec. runner
slattach
@ -342,7 +349,7 @@ tar - runner
taskset - spawner
tcpsvd - daemon
tee - runner
telnet - interactive
telnet - interactive, longterm
telnetd - daemon
test - NOFORK
tftp - runner
@ -359,7 +366,7 @@ truncate - NOFORK
tty - NOFORK
ttysize - NOFORK
tunctl
tune2fs
tune2fs - leaks: open+xfunc
ubiattach
ubidetach
ubimkvol
@ -387,8 +394,8 @@ users - nofork candidate(is getutxent ok?)
usleep - NOFORK
uudecode - runner
uuencode - runner
vconfig
vi - interactive
vconfig - leaks: xsocket+ioctl_or_perror_and_die
vi - interactive, longterm
vlock - suid
volname - runner
w

View File

@ -82,8 +82,8 @@
//usage: "EXPECT [SEND [EXPECT [SEND...]]]"
//usage:#define chat_full_usage "\n\n"
//usage: "Useful for interacting with a modem connected to stdin/stdout.\n"
//usage: "A script consists of one or more \"expect-send\" pairs of strings,\n"
//usage: "each pair is a pair of arguments. Example:\n"
//usage: "A script consists of \"expect-send\" argument pairs.\n"
//usage: "Example:\n"
//usage: "chat '' ATZ OK ATD123456 CONNECT '' ogin: pppuser word: ppppass '~'"
#include "libbb.h"

View File

@ -67,8 +67,12 @@ int freeramdisk_main(int argc UNUSED_PARAM, char **argv)
fd = xopen(single_argv(argv), O_RDWR);
// Act like freeramdisk, fdflush, or both depending on configuration.
ioctl_or_perror_and_die(fd, (ENABLE_FREERAMDISK && applet_name[1] == 'r')
|| !ENABLE_FDFLUSH ? BLKFLSBUF : FDFLUSH, NULL, "%s", argv[1]);
ioctl_or_perror_and_die(fd,
((ENABLE_FREERAMDISK && applet_name[1] == 'r') || !ENABLE_FDFLUSH)
? BLKFLSBUF
: FDFLUSH,
NULL, "%s", argv[1]
);
if (ENABLE_FEATURE_CLEAN_UP) close(fd);