diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-08-07 18:45:33 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-08-07 18:45:33 +0200 |
commit | f2cf1cc716216308a8a6d07e3afab23be07a6b02 (patch) | |
tree | 81c2a8231d59e39ab1f3cecf219616f0104fea80 /libbb | |
parent | 248a67fb75a0d2c98f4f9935b7bb9e11382b2c78 (diff) | |
download | busybox-w32-f2cf1cc716216308a8a6d07e3afab23be07a6b02.tar.gz busybox-w32-f2cf1cc716216308a8a6d07e3afab23be07a6b02.tar.bz2 busybox-w32-f2cf1cc716216308a8a6d07e3afab23be07a6b02.zip |
noexec: set comm field for noexecs
function old new delta
set_task_comm - 18 +18
tryexec 152 159 +7
pseudo_exec_argv 321 328 +7
main 106 97 -9
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 3/2 up/down: 34/-13) Total: 23 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/appletlib.c | 13 | ||||
-rw-r--r-- | libbb/vfork_daemon_rexec.c | 7 |
2 files changed, 15 insertions, 5 deletions
diff --git a/libbb/appletlib.c b/libbb/appletlib.c index fa28d433b..ce259446b 100644 --- a/libbb/appletlib.c +++ b/libbb/appletlib.c | |||
@@ -911,6 +911,14 @@ int busybox_main(int argc UNUSED_PARAM, char **argv) | |||
911 | } | 911 | } |
912 | # endif | 912 | # endif |
913 | 913 | ||
914 | #if defined(__linux__) && (NUM_APPLETS > 1) | ||
915 | void FAST_FUNC set_task_comm(const char *comm) | ||
916 | { | ||
917 | /* okay if too long (truncates) */ | ||
918 | prctl(PR_SET_NAME, (long)comm, 0, 0, 0); | ||
919 | } | ||
920 | #endif | ||
921 | |||
914 | # if NUM_APPLETS > 0 | 922 | # if NUM_APPLETS > 0 |
915 | void FAST_FUNC run_applet_no_and_exit(int applet_no, const char *name, char **argv) | 923 | void FAST_FUNC run_applet_no_and_exit(int applet_no, const char *name, char **argv) |
916 | { | 924 | { |
@@ -1064,15 +1072,14 @@ int main(int argc UNUSED_PARAM, char **argv) | |||
1064 | applet_name++; | 1072 | applet_name++; |
1065 | applet_name = bb_basename(applet_name); | 1073 | applet_name = bb_basename(applet_name); |
1066 | 1074 | ||
1067 | # if defined(__linux__) | ||
1068 | /* If we are a result of execv("/proc/self/exe"), fix ugly comm of "exe" */ | 1075 | /* If we are a result of execv("/proc/self/exe"), fix ugly comm of "exe" */ |
1069 | if (ENABLE_FEATURE_SH_STANDALONE | 1076 | if (ENABLE_FEATURE_SH_STANDALONE |
1070 | || ENABLE_FEATURE_PREFER_APPLETS | 1077 | || ENABLE_FEATURE_PREFER_APPLETS |
1071 | || !BB_MMU | 1078 | || !BB_MMU |
1072 | ) { | 1079 | ) { |
1073 | prctl(PR_SET_NAME, (long)applet_name, 0, 0, 0); | 1080 | if (NUM_APPLETS > 1) |
1081 | set_task_comm(applet_name); | ||
1074 | } | 1082 | } |
1075 | # endif | ||
1076 | 1083 | ||
1077 | parse_config_file(); /* ...maybe, if FEATURE_SUID_CONFIG */ | 1084 | parse_config_file(); /* ...maybe, if FEATURE_SUID_CONFIG */ |
1078 | run_applet_and_exit(applet_name, argv); | 1085 | run_applet_and_exit(applet_name, argv); |
diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c index 50ecea762..546cc9e36 100644 --- a/libbb/vfork_daemon_rexec.c +++ b/libbb/vfork_daemon_rexec.c | |||
@@ -175,8 +175,6 @@ int FAST_FUNC spawn_and_wait(char **argv) | |||
175 | return wait4pid(rc); | 175 | return wait4pid(rc); |
176 | 176 | ||
177 | /* child */ | 177 | /* child */ |
178 | //TODO: prctl(PR_SET_NAME, (long)argv[0], 0, 0, 0);? [think pidof, pgrep, pkill] | ||
179 | //Rewrite /proc/PID/cmdline? (need to save argv0 and length at init for this to work!) | ||
180 | /* reset some state and run without execing */ | 178 | /* reset some state and run without execing */ |
181 | 179 | ||
182 | /* msg_eol = "\n"; - no caller needs this reinited yet */ | 180 | /* msg_eol = "\n"; - no caller needs this reinited yet */ |
@@ -185,6 +183,11 @@ int FAST_FUNC spawn_and_wait(char **argv) | |||
185 | * init, or a NOFORK applet. But none of those call us | 183 | * init, or a NOFORK applet. But none of those call us |
186 | * as of yet (and that should probably always stay true). | 184 | * as of yet (and that should probably always stay true). |
187 | */ | 185 | */ |
186 | //TODO: think pidof, pgrep, pkill! | ||
187 | //set_task_comm() makes our pidof find NOEXECs (e.g. "yes >/dev/null"), | ||
188 | //but one from procps-ng-3.3.10 needs more! | ||
189 | //Rewrite /proc/PID/cmdline? (need to save argv0 and length at init for this to work!) | ||
190 | set_task_comm(argv[0]); | ||
188 | /* xfunc_error_retval and applet_name are init by: */ | 191 | /* xfunc_error_retval and applet_name are init by: */ |
189 | run_applet_no_and_exit(a, argv[0], argv); | 192 | run_applet_no_and_exit(a, argv[0], argv); |
190 | } | 193 | } |