[PATCH v10 14/15] libbb: allow forcing all applets to behave as NOEXEC applets
Nadav Tasher
tashernadav at gmail.com
Thu Apr 17 20:01:17 UTC 2025
This patch adds an experimental configuration option to allow the
applet_execvpe function to treat all applets as if they were NOEXEC.
This is experimental, as noted in the configuration description.
Signed-off-by: Nadav Tasher <tashernadav at gmail.com>
---
Config.in | 12 ++++++++++++
libbb/executable.c | 2 +-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/Config.in b/Config.in
index b1dfe98c1..b21940b04 100644
--- a/Config.in
+++ b/Config.in
@@ -320,6 +320,18 @@ config FEATURE_FORCE_APPLETS
This feature extends the "exec prefers applets" feature.
+config FEATURE_ALWAYS_NOEXEC
+ bool "all applets support NOEXEC (experimental)"
+ default n
+ depends on FEATURE_PREFER_APPLETS && !NOMMU
+ help
+ This is an experimental option which makes all applets support NOEXEC
+ invocation.
+ There are good reasons for why applets are not marked as NOEXEC,
+ but for some usecases these reasons do not apply.
+
+ This feature extends the "exec prefers applets" feature.
+
config BUSYBOX_EXEC_PATH
string "Path to busybox executable"
default "/proc/self/exe"
diff --git a/libbb/executable.c b/libbb/executable.c
index dcd2613f0..d5a941a46 100644
--- a/libbb/executable.c
+++ b/libbb/executable.c
@@ -88,7 +88,7 @@ int FAST_FUNC applet_execve(const char *name, char *const argv[], char *const en
* since vfork() requires the child to exec() or _exit() for the
* parent to resume, running applets with NOEXEC and vfork()
* may result in deadlocks, as exec() will never be called. */
- if (BB_MMU && APPLET_IS_NOEXEC(applet)) {
+ if (BB_MMU && (ENABLE_FEATURE_ALWAYS_NOEXEC || APPLET_IS_NOEXEC(applet))) {
/* since run_noexec_applet_and_exit takes char **argv,
* we need to copy argv to a new heap-allocated array. */
char **copied_argv = clone_string_array(argv);
--
2.34.1
More information about the busybox
mailing list