busybox
The function shutdown_signal is only defined when !DEBUG_INIT. However, it is used in a mandatory feature. Thus, all product with DEBUG_INIT enabled has compile failure.
Bug fixed by commit cf1f2ace391
Type | UndefinedSymbol |
Config | DEBUG_INIT (1st degree) |
Fix-in | mapping |
Location | init/ |
#include <stdio.h> #include <unistd.h> #define SIGTERM 15 /* software termination signal from kill */ #define SIGUSR1 30 /* user defined signal 1 */ #define SIGUSR2 31 /* user defined signal 2 */ #ifndef ENABLE_DEBUG_INIT void shutdown_signal(int sig) { char *m; if (sig == SIGTERM) { m = "reboot"; } else if (sig == SIGUSR2) { m = "poweroff"; } else { m = "halt"; } printf("Requesting system %s.", m); } #endif void open_new_terminal() { shutdown_signal(SIGUSR1); //ERROR } void run() { open_new_terminal(); } void run_actions() { run(); } int main(int argc, char** argv) { run_actions(); return 0; }
diff --git a/simple/cf1f2ac.c b/simple/cf1f2ac.c --- a/simple/cf1f2ac.c +++ b/simple/cf1f2ac.c @@ -24,7 +24,11 @@ void open_new_terminal() { +#ifndef ENABLE_DEBUG_INIT shutdown_signal(SIGUSR1); //ERROR +#else + _exit(2); +#endif } void run()
. call init/init.c:1069:run_actions(int action) .. 635:a->pid = run(a); .. call init/init.c:1069:run(const struct init_action *a) ... 444:open_new_terminal(a->terminal, 1); ... call init/init.c:386:open_new_terminal(const char *device, char fail) .... ERROR 398:shutdown_signal(SIGUSR1);