The output of /proc/self/comm shall only be changed to the applet name if it is "exe". It shall not be changed if it is for example the name of a shell script.
Signed-off-by: Lukasz Serafin <[email protected]> --- include/libbb.h | 2 ++ libbb/appletlib.c | 11 +++++++++-- libbb/vfork_daemon_rexec.c | 5 +++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/include/libbb.h b/include/libbb.h index 392c0443d..2e8d7f3d0 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -1177,8 +1177,10 @@ void run_applet_no_and_exit(int a, const char *name, char **argv) NORETURN FAST_ #endif #if defined(__linux__) void set_task_comm(const char *comm) FAST_FUNC; +void get_task_comm(char *buffer) FAST_FUNC; #else # define set_task_comm(name) ((void)0) +# define get_task_comm(name) ((void)0) #endif /* Helpers for daemonization. diff --git a/libbb/appletlib.c b/libbb/appletlib.c index f842e73cc..ad3affba4 100644 --- a/libbb/appletlib.c +++ b/libbb/appletlib.c @@ -33,6 +33,8 @@ # include <malloc.h> /* for mallopt */ #endif +#define COMM_MAX_SIZE 16 + /* Declare <applet>_main() */ #define PROTOTYPES #include "applets.h" @@ -1115,8 +1117,13 @@ int main(int argc UNUSED_PARAM, char **argv) || ENABLE_FEATURE_PREFER_APPLETS || !BB_MMU ) { - if (NUM_APPLETS > 1) - set_task_comm(applet_name); + if (NUM_APPLETS > 1) { + char buffer[COMM_MAX_SIZE]; + buffer[0] = '\0'; + get_task_comm(buffer); + if (strcmp(buffer, "exe") == 0) + set_task_comm(applet_name); + } } parse_config_file(); /* ...maybe, if FEATURE_SUID_CONFIG */ diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c index 65271e84f..c12173cd0 100644 --- a/libbb/vfork_daemon_rexec.c +++ b/libbb/vfork_daemon_rexec.c @@ -33,6 +33,11 @@ void FAST_FUNC set_task_comm(const char *comm) /* okay if too long (truncates) */ prctl(PR_SET_NAME, (long)comm, 0, 0, 0); } +void FAST_FUNC get_task_comm(char* buffer) +{ + /* returned name can be up to 16 bytes long (including null byte) */ + prctl(PR_GET_NAME, (long)buffer, 0, 0, 0); +} #endif /* -- 2.11.0
_______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
