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);