diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-08-06 20:55:56 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-08-06 20:55:56 +0200 |
commit | 184c738582eb190489dd2e9d120b1e036df65401 (patch) | |
tree | c12ad562b1ecff416ed4bc48e0ccb4c1a0fc35c1 | |
parent | 035e71578e98744acba2394bb03686d08f60d956 (diff) |
stty: fix bb_common_bufsiz1 use in NOEXEC
function old new delta
stty_main 1211 1221 +10
do_display 379 370 -9
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | NOFORK_NOEXEC.lst | 2 | ||||
-rw-r--r-- | coreutils/stty.c | 10 | ||||
-rw-r--r-- | debianutils/start_stop_daemon.c | 9 |
3 files changed, 12 insertions, 9 deletions
diff --git a/NOFORK_NOEXEC.lst b/NOFORK_NOEXEC.lst index 02e2ba956..fb76fcf63 100644 --- a/NOFORK_NOEXEC.lst +++ b/NOFORK_NOEXEC.lst @@ -327,7 +327,7 @@ softlimit - noexec. spawner sort - noexec. runner split - runner ssl_client - longterm -start-stop-daemon +start-stop-daemon - not noexec: uses bb_common_bufsiz1 stat - nofork candidate(needs fewer allocs) strings - runner 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 diff --git a/coreutils/stty.c b/coreutils/stty.c index d09f0e453..2292fa5ee 100644 --- a/coreutils/stty.c +++ b/coreutils/stty.c @@ -782,12 +782,12 @@ struct globals { unsigned max_col; /* Current position, to know when to wrap */ unsigned current_col; - char buf[10]; } FIX_ALIASING; #define G (*(struct globals*)bb_common_bufsiz1) #define INIT_G() do { \ G.device_name = bb_msg_standard_input; \ G.max_col = 80; \ + G.current_col = 0; /* we are noexec, must clear */ \ } while (0) static void set_speed_or_die(enum speed_setting type, const char *arg, @@ -1018,6 +1018,8 @@ static void do_display(const struct termios *mode, int all) for (i = 0; i != CIDX_min; ++i) { char ch; + char buf10[10]; + /* If swtch is the same as susp, don't print both */ #if VSWTCH == VSUSP if (i == CIDX_swtch) @@ -1033,10 +1035,10 @@ static void do_display(const struct termios *mode, int all) #endif ch = mode->c_cc[control_info[i].offset]; if (ch == _POSIX_VDISABLE) - strcpy(G.buf, "<undef>"); + strcpy(buf10, "<undef>"); else - visible(ch, G.buf, 0); - wrapf("%s = %s;", nth_string(control_name, i), G.buf); + visible(ch, buf10, 0); + wrapf("%s = %s;", nth_string(control_name, i), buf10); } #if VEOF == VMIN if ((mode->c_lflag & ICANON) == 0) diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c index 07c104baa..9effdc80b 100644 --- a/debianutils/start_stop_daemon.c +++ b/debianutils/start_stop_daemon.c @@ -79,6 +79,7 @@ Misc options: //config: -N|--nicelevel N //applet:IF_START_STOP_DAEMON(APPLET_ODDNAME(start-stop-daemon, start_stop_daemon, BB_DIR_SBIN, BB_SUID_DROP, start_stop_daemon)) +/* not NOEXEC: uses bb_common_bufsiz1 */ //kbuild:lib-$(CONFIG_START_STOP_DAEMON) += start_stop_daemon.o @@ -409,11 +410,11 @@ static const char start_stop_daemon_longopts[] ALIGN1 = "quiet\0" No_argument "q" "test\0" No_argument "t" "make-pidfile\0" No_argument "m" -#if ENABLE_FEATURE_START_STOP_DAEMON_FANCY +# if ENABLE_FEATURE_START_STOP_DAEMON_FANCY "oknodo\0" No_argument "o" "verbose\0" No_argument "v" "nicelevel\0" Required_argument "N" -#endif +# endif "startas\0" Required_argument "a" "name\0" Required_argument "n" "signal\0" Required_argument "s" @@ -421,9 +422,9 @@ static const char start_stop_daemon_longopts[] ALIGN1 = "chuid\0" Required_argument "c" "exec\0" Required_argument "x" "pidfile\0" Required_argument "p" -#if ENABLE_FEATURE_START_STOP_DAEMON_FANCY +# if ENABLE_FEATURE_START_STOP_DAEMON_FANCY "retry\0" Required_argument "R" -#endif +# endif ; #endif |