aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2017-08-07 23:23:18 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2017-08-07 23:23:18 +0200
commitaf5d0086694b9c9b7cbf896e49e1997ec7039904 (patch)
tree88e96ff8e145a57ca585decd0bd6c0bd0f0adabf
parentec98e3a628b06f6cb8823e5197dcd413113d7ed6 (diff)
downloadbusybox-af5d0086694b9c9b7cbf896e49e1997ec7039904.tar.gz
expr: make it NOEXEC
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--NOFORK_NOEXEC.lst4
-rw-r--r--coreutils/expr.c7
2 files changed, 7 insertions, 4 deletions
diff --git a/NOFORK_NOEXEC.lst b/NOFORK_NOEXEC.lst
index fd5306317..acbe29e6f 100644
--- a/NOFORK_NOEXEC.lst
+++ b/NOFORK_NOEXEC.lst
@@ -108,12 +108,12 @@ dumpleases - leaks: open+xread
echo - NOFORK
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)
+eject - hardware, leaks: open+ioctl_or_perror_and_die, changes state (moves fds)
env - noexec. spawner, changes state (env)
envdir - noexec. spawner
envuidgid - noexec. spawner
expand - runner
-expr - leaks: nested allocs
+expr - noexec. leaks: nested allocs
factor - runner (eats stdin if no params)
fakeidentd - daemon
false - NOFORK
diff --git a/coreutils/expr.c b/coreutils/expr.c
index a2bbfdd69..e54afbb62 100644
--- a/coreutils/expr.c
+++ b/coreutils/expr.c
@@ -38,7 +38,7 @@
//config: the applet slightly larger, but will allow computation with very
//config: large numbers.
-//applet:IF_EXPR(APPLET(expr, BB_DIR_USR_BIN, BB_SUID_DROP))
+//applet:IF_EXPR(APPLET_NOEXEC(expr, expr, BB_DIR_USR_BIN, BB_SUID_DROP, expr))
//kbuild:lib-$(CONFIG_EXPR) += expr.o
@@ -118,7 +118,10 @@ struct globals {
char **args;
} FIX_ALIASING;
#define G (*(struct globals*)bb_common_bufsiz1)
-#define INIT_G() do { setup_common_bufsiz(); } while (0)
+#define INIT_G() do { \
+ setup_common_bufsiz(); \
+ /* NB: noexec applet - globals not zeroed */ \
+} while (0)
/* forward declarations */
static VALUE *eval(void);