diff --git a/packages/sysutils/busybox/patches/busybox-1.18.2-buildsys.patch b/packages/sysutils/busybox/patches/busybox-1.18.2-buildsys.patch new file mode 100644 index 0000000000..d904806bf8 --- /dev/null +++ b/packages/sysutils/busybox/patches/busybox-1.18.2-buildsys.patch @@ -0,0 +1,62 @@ +--- busybox-1.18.2/loginutils/Config.src ++++ busybox-1.18.2-buildsys/loginutils/Config.src +@@ -186,7 +186,6 @@ config GETTY + config LOGIN + bool "login" + default y +- select FEATURE_SUID + select FEATURE_SYSLOG + help + login is used when signing onto a system. +@@ -229,7 +228,6 @@ config FEATURE_SECURETTY + config PASSWD + bool "passwd" + default y +- select FEATURE_SUID + select FEATURE_SYSLOG + help + passwd changes passwords for user and group accounts. A normal user +@@ -265,7 +263,6 @@ config CHPASSWD + config SU + bool "su" + default y +- select FEATURE_SUID + select FEATURE_SYSLOG + help + su is used to become another user during a login session. +@@ -295,7 +292,6 @@ config SULOGIN + config VLOCK + bool "vlock" + default y +- select FEATURE_SUID + help + Build the "vlock" applet which allows you to lock (virtual) terminals. + +--- busybox-1.18.2/miscutils/Config.src ++++ busybox-1.18.2-buildsys/miscutils/Config.src +@@ -170,7 +170,6 @@ config FEATURE_CROND_DIR + config CRONTAB + bool "crontab" + default y +- select FEATURE_SUID + help + Crontab manipulates the crontab for a particular user. Only + the superuser may specify a different user and/or crontab directory. +--- busybox-1.18.2/util-linux/Config.src ++++ busybox-1.18.2-buildsys/util-linux/Config.src +@@ -354,7 +354,6 @@ config FEATURE_HWCLOCK_ADJTIME_FHS + config IPCRM + bool "ipcrm" + default y +- select FEATURE_SUID + help + The ipcrm utility allows the removal of System V interprocess + communication (IPC) objects and the associated data structures +@@ -364,7 +363,6 @@ config IPCS + bool "ipcs" + default y + depends on PLATFORM_LINUX +- select FEATURE_SUID + help + The ipcs utility is used to provide information on the currently + allocated System V interprocess (IPC) objects in the system. diff --git a/packages/sysutils/busybox/patches/busybox-1.18.2-hush.patch b/packages/sysutils/busybox/patches/busybox-1.18.2-hush.patch new file mode 100644 index 0000000000..d08e5194d6 --- /dev/null +++ b/packages/sysutils/busybox/patches/busybox-1.18.2-hush.patch @@ -0,0 +1,34 @@ +--- busybox-1.18.2/shell/hush.c ++++ busybox-1.18.2-hush/shell/hush.c +@@ -4123,15 +4123,26 @@ static struct pipe *parse_stream(char ** + && dest.length == 0 && !dest.has_quoted_part + ) { + /* This newline can be ignored. But... +- * without the below check, interactive shell +- * will ignore even lines with bare , +- * and show the continuation prompt: ++ * Without check #1, interactive shell ++ * ignores even bare , ++ * and shows the continuation prompt: + * ps1_prompt$ +- * ps2> _ <=== wrong prompt, should be ps1 ++ * ps2> _ <=== wrong, should be ps1 ++ * Without check #2, "cmd & " ++ * is similarly mistreated. ++ * (BTW, this makes "cmd & cmd" ++ * and "cmd && cmd" non-orthogonal. ++ * Really, ask yourself, why ++ * "cmd && " doesn't start ++ * cmd but waits for more input? ++ * No reason...) + */ + struct pipe *pi = ctx.list_head; +- if (pi->num_cmds != 0) ++ if (pi->num_cmds != 0 /* check #1 */ ++ && pi->followup != PIPE_BG /* check #2 */ ++ ) { + continue; ++ } + } + /* Treat newline as a command separator. */ + done_pipe(&ctx, PIPE_SEQ); diff --git a/packages/sysutils/busybox/patches/busybox-1.18.2-libbb.patch b/packages/sysutils/busybox/patches/busybox-1.18.2-libbb.patch new file mode 100644 index 0000000000..aa7e75d700 --- /dev/null +++ b/packages/sysutils/busybox/patches/busybox-1.18.2-libbb.patch @@ -0,0 +1,10 @@ +--- busybox-1.18.2/libbb/vfork_daemon_rexec.c ++++ busybox-1.18.2-libbb/libbb/vfork_daemon_rexec.c +@@ -52,6 +52,7 @@ pid_t FAST_FUNC spawn(char **argv) + * Interested party can wait on pid and learn exit code. + * If 111 - then it (most probably) failed to exec */ + if (failed) { ++ safe_waitpid(pid, NULL, 0); /* prevent zombie */ + errno = failed; + return -1; + } diff --git a/packages/sysutils/busybox/patches/busybox-1.18.2-modprobe-small.patch b/packages/sysutils/busybox/patches/busybox-1.18.2-modprobe-small.patch new file mode 100644 index 0000000000..b0623f2550 --- /dev/null +++ b/packages/sysutils/busybox/patches/busybox-1.18.2-modprobe-small.patch @@ -0,0 +1,19 @@ +--- busybox-1.18.2/modutils/modprobe-small.c ++++ busybox-1.18.2-modprobe-small/modutils/modprobe-small.c +@@ -205,6 +205,7 @@ static void parse_module(module_info *in + /* Read (possibly compressed) module */ + len = 64 * 1024 * 1024; /* 64 Mb at most */ + module_image = xmalloc_open_zipped_read_close(pathname, &len); ++ /* module_image == NULL is ok here, find_keyword handles it */ + //TODO: optimize redundant module body reads + + /* "alias1 symbol:sym1 alias2 symbol:sym2" */ +@@ -845,6 +846,8 @@ int modprobe_main(int argc UNUSED_PARAM, + + len = MAXINT(ssize_t); + map = xmalloc_open_zipped_read_close(*argv, &len); ++ if (!map) ++ bb_perror_msg_and_die("can't read '%s'", *argv); + if (init_module(map, len, + IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(options ? options : "") + IF_NOT_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE("") diff --git a/packages/sysutils/busybox/patches/busybox-1.18.2-modprobe.patch b/packages/sysutils/busybox/patches/busybox-1.18.2-modprobe.patch new file mode 100644 index 0000000000..cad887e054 --- /dev/null +++ b/packages/sysutils/busybox/patches/busybox-1.18.2-modprobe.patch @@ -0,0 +1,20 @@ +--- busybox-1.18.2/modutils/modutils.c ++++ busybox-1.18.2-modprobe/modutils/modutils.c +@@ -71,12 +71,11 @@ char* FAST_FUNC parse_cmdline_module_opt + optlen = 0; + while (*++argv) { + options = xrealloc(options, optlen + 2 + strlen(*argv) + 2); +- /* Older versions were enclosing space-containing *argv in "", +- * but both modprobe and insmod from module-init-tools 3.11.1 +- * don't do this anymore. (As to extra trailing space, +- * insmod adds it but modprobe does not. We do in both cases) +- */ +- optlen += sprintf(options + optlen, "%s ", *argv); ++ /* Spaces handled by "" pairs, but no way of escaping quotes */ ++//TODO: module-init-tools version 3.11.1 quotes only value: ++//it generates var="val with spaces", not "var=val with spaces" ++//(and it won't quote var *name* even if it has spaces) ++ optlen += sprintf(options + optlen, (strchr(*argv, ' ') ? "\"%s\" " : "%s "), *argv); + } + return options; + } diff --git a/packages/sysutils/busybox/patches/busybox-1.18.2-wc.patch b/packages/sysutils/busybox/patches/busybox-1.18.2-wc.patch new file mode 100644 index 0000000000..558896d9b7 --- /dev/null +++ b/packages/sysutils/busybox/patches/busybox-1.18.2-wc.patch @@ -0,0 +1,41 @@ +--- busybox-1.18.2/coreutils/wc.c ++++ busybox-1.18.2-wc/coreutils/wc.c +@@ -81,11 +81,11 @@ + * column order in "wc -cmlwL" output: + */ + enum { +- WC_LINES = 0, +- WC_WORDS = 1, +- WC_UNICHARS = 2, +- WC_CHARS = 3, +- WC_LENGTH = 4, ++ WC_LINES = 0, /* -l */ ++ WC_WORDS = 1, /* -w */ ++ WC_UNICHARS = 2, /* -m */ ++ WC_BYTES = 3, /* -c */ ++ WC_LENGTH = 4, /* -L */ + NUM_WCS = 5, + }; + +@@ -104,10 +104,10 @@ int wc_main(int argc UNUSED_PARAM, char + + init_unicode(); + +- print_type = getopt32(argv, "lwcmL"); ++ print_type = getopt32(argv, "lwmcL"); + + if (print_type == 0) { +- print_type = (1 << WC_LINES) | (1 << WC_WORDS) | (1 << WC_CHARS); ++ print_type = (1 << WC_LINES) | (1 << WC_WORDS) | (1 << WC_BYTES); + } + + argv += optind; +@@ -157,7 +157,7 @@ int wc_main(int argc UNUSED_PARAM, char + } + + /* Cater for -c and -m */ +- ++counts[WC_CHARS]; ++ ++counts[WC_BYTES]; + if (unicode_status != UNICODE_ON /* every byte is a new char */ + || (c & 0xc0) != 0x80 /* it isn't a 2nd+ byte of a Unicode char */ + ) {