busybox: move patches to new model
authorGustavo Zacarias <gustavo@zacarias.com.ar>
Mon, 22 Apr 2013 14:47:46 +0000 (11:47 -0300)
committerPeter Korsgaard <jacmet@sunsite.dk>
Tue, 23 Apr 2013 06:59:23 +0000 (08:59 +0200)
On commit 5538e4766201aa0c1c23721cfc99cbbde595964b the versioned package
patches changed the directory structure but the packages weren't fixed.

Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
16 files changed:
package/busybox/1.19.4/busybox-1.19.4-udhcp.patch [new file with mode: 0644]
package/busybox/1.20.2/busybox-1.20.2-kernel_ver.patch [new file with mode: 0644]
package/busybox/1.20.2/busybox-1.20.2-ntpd.patch [new file with mode: 0644]
package/busybox/1.20.2/busybox-1.20.2-pkg-config-selinux.patch [new file with mode: 0644]
package/busybox/1.20.2/busybox-1.20.2-sys-resource.patch [new file with mode: 0644]
package/busybox/1.21.0/busybox-1.21.0-mdev.patch [new file with mode: 0644]
package/busybox/1.21.0/busybox-1.21.0-platform.patch [new file with mode: 0644]
package/busybox/1.21.0/busybox-1.21.0-xz.patch [new file with mode: 0644]
package/busybox/busybox-1.19.4/busybox-1.19.4-udhcp.patch [deleted file]
package/busybox/busybox-1.20.2/busybox-1.20.2-kernel_ver.patch [deleted file]
package/busybox/busybox-1.20.2/busybox-1.20.2-ntpd.patch [deleted file]
package/busybox/busybox-1.20.2/busybox-1.20.2-pkg-config-selinux.patch [deleted file]
package/busybox/busybox-1.20.2/busybox-1.20.2-sys-resource.patch [deleted file]
package/busybox/busybox-1.21.0/busybox-1.21.0-mdev.patch [deleted file]
package/busybox/busybox-1.21.0/busybox-1.21.0-platform.patch [deleted file]
package/busybox/busybox-1.21.0/busybox-1.21.0-xz.patch [deleted file]

diff --git a/package/busybox/1.19.4/busybox-1.19.4-udhcp.patch b/package/busybox/1.19.4/busybox-1.19.4-udhcp.patch
new file mode 100644 (file)
index 0000000..94d5f34
--- /dev/null
@@ -0,0 +1,164 @@
+--- busybox-1.19.4/networking/udhcp/common.c
++++ busybox-1.19.4-udhcp/networking/udhcp/common.c
+@@ -29,16 +29,16 @@ const struct dhcp_optflag dhcp_optflags[
+ //    { OPTION_IP | OPTION_LIST                 , 0x07 }, /* DHCP_LOG_SERVER    */
+ //    { OPTION_IP | OPTION_LIST                 , 0x08 }, /* DHCP_COOKIE_SERVER */
+       { OPTION_IP | OPTION_LIST                 , 0x09 }, /* DHCP_LPR_SERVER    */
+-      { OPTION_STRING               | OPTION_REQ, 0x0c }, /* DHCP_HOST_NAME     */
++      { OPTION_STRING_HOST          | OPTION_REQ, 0x0c }, /* DHCP_HOST_NAME     */
+       { OPTION_U16                              , 0x0d }, /* DHCP_BOOT_SIZE     */
+-      { OPTION_STRING               | OPTION_REQ, 0x0f }, /* DHCP_DOMAIN_NAME   */
++      { OPTION_STRING_HOST          | OPTION_REQ, 0x0f }, /* DHCP_DOMAIN_NAME   */
+       { OPTION_IP                               , 0x10 }, /* DHCP_SWAP_SERVER   */
+       { OPTION_STRING                           , 0x11 }, /* DHCP_ROOT_PATH     */
+       { OPTION_U8                               , 0x17 }, /* DHCP_IP_TTL        */
+       { OPTION_U16                              , 0x1a }, /* DHCP_MTU           */
+       { OPTION_IP                   | OPTION_REQ, 0x1c }, /* DHCP_BROADCAST     */
+       { OPTION_IP_PAIR | OPTION_LIST            , 0x21 }, /* DHCP_ROUTES        */
+-      { OPTION_STRING                           , 0x28 }, /* DHCP_NIS_DOMAIN    */
++      { OPTION_STRING_HOST                      , 0x28 }, /* DHCP_NIS_DOMAIN    */
+       { OPTION_IP | OPTION_LIST                 , 0x29 }, /* DHCP_NIS_SERVER    */
+       { OPTION_IP | OPTION_LIST     | OPTION_REQ, 0x2a }, /* DHCP_NTP_SERVER    */
+       { OPTION_IP | OPTION_LIST                 , 0x2c }, /* DHCP_WINS_SERVER   */
+@@ -46,7 +46,7 @@ const struct dhcp_optflag dhcp_optflags[
+       { OPTION_IP                               , 0x36 }, /* DHCP_SERVER_ID     */
+       { OPTION_STRING                           , 0x38 }, /* DHCP_ERR_MESSAGE   */
+ //TODO: must be combined with 'sname' and 'file' handling:
+-      { OPTION_STRING                           , 0x42 }, /* DHCP_TFTP_SERVER_NAME */
++      { OPTION_STRING_HOST                      , 0x42 }, /* DHCP_TFTP_SERVER_NAME */
+       { OPTION_STRING                           , 0x43 }, /* DHCP_BOOT_FILE     */
+ //TODO: not a string, but a set of LASCII strings:
+ //    { OPTION_STRING                           , 0x4D }, /* DHCP_USER_CLASS    */
+@@ -143,6 +143,7 @@ const uint8_t dhcp_option_lengths[] ALIG
+       [OPTION_IP_PAIR] = 8,
+ //    [OPTION_BOOLEAN] = 1,
+       [OPTION_STRING] =  1,  /* ignored by udhcp_str2optset */
++      [OPTION_STRING_HOST] = 1,  /* ignored by udhcp_str2optset */
+ #if ENABLE_FEATURE_UDHCP_RFC3397
+       [OPTION_DNS_STRING] = 1,  /* ignored by both udhcp_str2optset and xmalloc_optname_optval */
+       [OPTION_SIP_SERVERS] = 1,
+@@ -411,7 +412,9 @@ static NOINLINE void attach_option(
+                       /* actually 255 is ok too, but adding a space can overlow it */
+                       existing->data = xrealloc(existing->data, OPT_DATA + 1 + old_len + length);
+-                      if ((optflag->flags & OPTION_TYPE_MASK) == OPTION_STRING) {
++                      if ((optflag->flags & OPTION_TYPE_MASK) == OPTION_STRING
++                       || (optflag->flags & OPTION_TYPE_MASK) == OPTION_STRING_HOST
++                      ) {
+                               /* add space separator between STRING options in a list */
+                               existing->data[OPT_DATA + old_len] = ' ';
+                               old_len++;
+@@ -475,6 +478,7 @@ int FAST_FUNC udhcp_str2optset(const cha
+                               retval = udhcp_str2nip(val, buffer + 4);
+                       break;
+               case OPTION_STRING:
++              case OPTION_STRING_HOST:
+ #if ENABLE_FEATURE_UDHCP_RFC3397
+               case OPTION_DNS_STRING:
+ #endif
+--- busybox-1.19.4/networking/udhcp/common.h
++++ busybox-1.19.4-udhcp/networking/udhcp/common.h
+@@ -80,6 +80,9 @@ enum {
+       OPTION_IP = 1,
+       OPTION_IP_PAIR,
+       OPTION_STRING,
++      /* Opts of STRING_HOST type will be sanitized before they are passed
++       * to udhcpc script's environment: */
++      OPTION_STRING_HOST,
+ //    OPTION_BOOLEAN,
+       OPTION_U8,
+       OPTION_U16,
+--- busybox-1.19.4/networking/udhcp/dhcpc.c
++++ busybox-1.19.4-udhcp/networking/udhcp/dhcpc.c
+@@ -101,6 +101,7 @@ static const uint8_t len_of_option_as_st
+       [OPTION_IP_PAIR         ] = sizeof("255.255.255.255 ") * 2,
+       [OPTION_STATIC_ROUTES   ] = sizeof("255.255.255.255/32 255.255.255.255 "),
+       [OPTION_STRING          ] = 1,
++      [OPTION_STRING_HOST     ] = 1,
+ #if ENABLE_FEATURE_UDHCP_RFC3397
+       [OPTION_DNS_STRING      ] = 1, /* unused */
+       /* Hmmm, this severely overestimates size if SIP_SERVERS option
+@@ -135,6 +136,63 @@ static int mton(uint32_t mask)
+       return i;
+ }
++/* Check if a given label represents a valid DNS label
++ * Return pointer to the first character after the label upon success,
++ * NULL otherwise.
++ * See RFC1035, 2.3.1
++ */
++/* We don't need to be particularly anal. For example, allowing _, hyphen
++ * at the end, or leading and trailing dots would be ok, since it
++ * can't be used for attacks. (Leading hyphen can be, if someone uses
++ * cmd "$hostname"
++ * in the script: then hostname may be treated as an option)
++ */
++static const char *valid_domain_label(const char *label)
++{
++      unsigned char ch;
++      unsigned pos = 0;
++
++      for (;;) {
++              ch = *label;
++              if ((ch|0x20) < 'a' || (ch|0x20) > 'z') {
++                      if (pos == 0) {
++                              /* label must begin with letter */
++                              return NULL;
++                      }
++                      if (ch < '0' || ch > '9') {
++                              if (ch == '\0' || ch == '.')
++                                      return label;
++                              /* DNS allows only '-', but we are more permissive */
++                              if (ch != '-' && ch != '_')
++                                      return NULL;
++                      }
++              }
++              label++;
++              pos++;
++              //Do we want this?
++              //if (pos > 63) /* NS_MAXLABEL; labels must be 63 chars or less */
++              //      return NULL;
++      }
++}
++
++/* Check if a given name represents a valid DNS name */
++/* See RFC1035, 2.3.1 */
++static int good_hostname(const char *name)
++{
++      //const char *start = name;
++
++      for (;;) {
++              name = valid_domain_label(name);
++              if (!name)
++                      return 0;
++              if (!name[0])
++                      return 1;
++                      //Do we want this?
++                      //return ((name - start) < 1025); /* NS_MAXDNAME */
++              name++;
++      }
++}
++
+ /* Create "opt_name=opt_value" string */
+ static NOINLINE char *xmalloc_optname_optval(uint8_t *option, const struct dhcp_optflag *optflag, const char *opt_name)
+ {
+@@ -185,8 +243,11 @@ static NOINLINE char *xmalloc_optname_op
+                       break;
+               }
+               case OPTION_STRING:
++              case OPTION_STRING_HOST:
+                       memcpy(dest, option, len);
+                       dest[len] = '\0';
++                      if (type == OPTION_STRING_HOST && !good_hostname(dest))
++                              safe_strncpy(dest, "bad", len);
+                       return ret;      /* Short circuit this case */
+               case OPTION_STATIC_ROUTES: {
+                       /* Option binary format:
+@@ -314,6 +375,7 @@ static char **fill_envp(struct dhcp_pack
+       /* +1 element for each option, +2 for subnet option: */
+       if (packet) {
+               /* note: do not search for "pad" (0) and "end" (255) options */
++//TODO: change logic to scan packet _once_
+               for (i = 1; i < 255; i++) {
+                       temp = udhcp_get_option(packet, i);
+                       if (temp) {
diff --git a/package/busybox/1.20.2/busybox-1.20.2-kernel_ver.patch b/package/busybox/1.20.2/busybox-1.20.2-kernel_ver.patch
new file mode 100644 (file)
index 0000000..456fb08
--- /dev/null
@@ -0,0 +1,25 @@
+--- busybox-1.20.2/libbb/kernel_version.c
++++ busybox-1.20.2-kernel_ver/libbb/kernel_version.c
+@@ -20,18 +20,15 @@
+ int FAST_FUNC get_linux_version_code(void)
+ {
+       struct utsname name;
+-      char *s;
++      char *s, *t;
+       int i, r;
+-      if (uname(&name) == -1) {
+-              bb_perror_msg("can't get system information");
+-              return 0;
+-      }
+-
++      uname(&name); /* never fails */
+       s = name.release;
+       r = 0;
+       for (i = 0; i < 3; i++) {
+-              r = r * 256 + atoi(strtok(s, "."));
++              t = strtok(s, ".");
++              r = r * 256 + (t ? atoi(t) : 0);
+               s = NULL;
+       }
+       return r;
diff --git a/package/busybox/1.20.2/busybox-1.20.2-ntpd.patch b/package/busybox/1.20.2/busybox-1.20.2-ntpd.patch
new file mode 100644 (file)
index 0000000..17fc0b1
--- /dev/null
@@ -0,0 +1,11 @@
+--- busybox-1.20.2/networking/ntpd.c
++++ busybox-1.20.2-ntpd/networking/ntpd.c
+@@ -1840,7 +1840,7 @@ recv_and_process_client_pkt(void /*int f
+       /* Build a reply packet */
+       memset(&msg, 0, sizeof(msg));
+-      msg.m_status = G.stratum < MAXSTRAT ? G.ntp_status : LI_ALARM;
++      msg.m_status = G.stratum < MAXSTRAT ? (G.ntp_status & LI_MASK) : LI_ALARM;
+       msg.m_status |= (query_status & VERSION_MASK);
+       msg.m_status |= ((query_status & MODE_MASK) == MODE_CLIENT) ?
+                        MODE_SERVER : MODE_SYM_PAS;
diff --git a/package/busybox/1.20.2/busybox-1.20.2-pkg-config-selinux.patch b/package/busybox/1.20.2/busybox-1.20.2-pkg-config-selinux.patch
new file mode 100644 (file)
index 0000000..f39250c
--- /dev/null
@@ -0,0 +1,67 @@
+From b1cec5003b73080a8aa7ea277621bf1c71c3e8d6 Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier@gentoo.org>
+Date: Sat, 20 Oct 2012 15:01:26 -0400
+Subject: [PATCH] build system: use pkg-config to look up selinux libs
+
+Newer versions of libselinux has started linking against more libs.
+Rather than continuing hardcoding things, switch to using pkg-config
+to query for its dependencies.
+
+Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+---
+ Makefile       |  1 +
+ Makefile.flags | 12 +++++++++++-
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index fccde4a..3a0a5e1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -297,6 +297,7 @@ NM         = $(CROSS_COMPILE)nm
+ STRIP         = $(CROSS_COMPILE)strip
+ OBJCOPY               = $(CROSS_COMPILE)objcopy
+ OBJDUMP               = $(CROSS_COMPILE)objdump
++PKG_CONFIG    ?= $(CROSS_COMPILE)pkg-config
+ AWK           = awk
+ GENKSYMS      = scripts/genksyms/genksyms
+ DEPMOD                = /sbin/depmod
+diff --git a/Makefile.flags b/Makefile.flags
+index c43c8dc..15dcc1f 100644
+--- a/Makefile.flags
++++ b/Makefile.flags
+@@ -74,6 +74,12 @@ ARCH_FPIC ?= -fpic
+ ARCH_FPIE ?= -fpie
+ ARCH_PIE ?= -pie
++# Usage: $(eval $(call pkg_check_modules,VARIABLE-PREFIX,MODULES))
++define pkg_check_modules
++$(1)_CFLAGS := $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags $(2))
++$(1)_LIBS := $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs $(2))
++endef
++
+ ifeq ($(CONFIG_BUILD_LIBBUSYBOX),y)
+ # on i386: 14% smaller libbusybox.so
+ # (code itself is 9% bigger, we save on relocs/PLT/GOT)
+@@ -85,6 +91,7 @@ endif
+ ifeq ($(CONFIG_STATIC),y)
+ CFLAGS_busybox += -static
++PKG_CONFIG_FLAGS += --static
+ endif
+ ifeq ($(CONFIG_PIE),y)
+@@ -127,7 +134,10 @@ LDLIBS += pam pam_misc pthread
+ endif
+ ifeq ($(CONFIG_SELINUX),y)
+-LDLIBS += selinux sepol
++SELINUX_PC_MODULES = libselinux libsepol
++$(eval $(call pkg_check_modules,SELINUX,$(SELINUX_PC_MODULES)))
++CPPFLAGS += $(SELINUX_CFLAGS)
++LDLIBS += $(if $(SELINUX_LIBS),$(SELINUX_LIBS:-l%=%),$(SELINUX_PC_MODULES:lib%=%))
+ endif
+ ifeq ($(CONFIG_EFENCE),y)
+-- 
+1.7.12
+
diff --git a/package/busybox/1.20.2/busybox-1.20.2-sys-resource.patch b/package/busybox/1.20.2/busybox-1.20.2-sys-resource.patch
new file mode 100644 (file)
index 0000000..7b18500
--- /dev/null
@@ -0,0 +1,123 @@
+From 5a5dfcad6ba96d12d68bd7b39279215a8fee70d3 Mon Sep 17 00:00:00 2001
+From: Tias Guns <tias@ulyssis.org>
+Date: Sun, 10 Jun 2012 14:19:01 +0200
+Subject: [PATCH] inetd: fix build failure in Android
+
+Signed-off-by: Tias Guns <tias@ulyssis.org>
+Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
+(cherry picked from commit 64f763b42a43cbf36e401690ff6767c25575e520)
+---
+ networking/inetd.c | 1 +
+ 1 file changed, 1 insertion(+)
+-- 
+1.7.12
+
+From 246ea72843d5b7e9d4cd902dc5e9d71359196303 Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier@gentoo.org>
+Date: Thu, 5 Jul 2012 23:19:09 -0400
+Subject: [PATCH] include sys/resource.h where needed
+
+We use functions from sys/resource.h in misc applets, but don't include
+the header.  This breaks building with newer glibc versions, so add the
+include where needed.
+
+Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+(cherry picked from commit c5fe9f7b723f949457263ef8e22ab807d5b549ce)
+---
+ loginutils/passwd.c      | 1 +
+ miscutils/time.c         | 1 +
+ networking/inetd.c       | 1 +
+ networking/ntpd.c        | 1 +
+ networking/ntpd_simple.c | 1 +
+ runit/chpst.c            | 1 +
+ shell/shell_common.c     | 1 +
+ 7 files changed, 7 insertions(+)
+
+diff --git a/loginutils/passwd.c b/loginutils/passwd.c
+index b83db00..a7006f0 100644
+--- a/loginutils/passwd.c
++++ b/loginutils/passwd.c
+@@ -15,6 +15,7 @@
+ #include "libbb.h"
+ #include <syslog.h>
++#include <sys/resource.h> /* setrlimit */
+ static void nuke_str(char *str)
+ {
+diff --git a/miscutils/time.c b/miscutils/time.c
+index 945f15f..ffed386 100644
+--- a/miscutils/time.c
++++ b/miscutils/time.c
+@@ -16,6 +16,7 @@
+ //usage:     "\n      -v      Verbose"
+ #include "libbb.h"
++#include <sys/resource.h> /* getrusage */
+ /* Information on the resources used by a child process.  */
+ typedef struct {
+diff --git a/networking/inetd.c b/networking/inetd.c
+index 1308d74..00baf69 100644
+--- a/networking/inetd.c
++++ b/networking/inetd.c
+@@ -165,6 +165,8 @@
+ //usage:     "\n              (default: 0 - disabled)"
+ #include <syslog.h>
++#include <sys/resource.h> /* setrlimit */
++#include <sys/socket.h> /* un.h may need this */
+ #include <sys/un.h>
+ #include "libbb.h"
+diff --git a/networking/ntpd.c b/networking/ntpd.c
+index 603801e..b885215 100644
+--- a/networking/ntpd.c
++++ b/networking/ntpd.c
+@@ -46,6 +46,7 @@
+ #include "libbb.h"
+ #include <math.h>
+ #include <netinet/ip.h> /* For IPTOS_LOWDELAY definition */
++#include <sys/resource.h> /* setpriority */
+ #include <sys/timex.h>
+ #ifndef IPTOS_LOWDELAY
+ # define IPTOS_LOWDELAY 0x10
+diff --git a/networking/ntpd_simple.c b/networking/ntpd_simple.c
+index 4ad44e4..1b7c66b 100644
+--- a/networking/ntpd_simple.c
++++ b/networking/ntpd_simple.c
+@@ -7,6 +7,7 @@
+  */
+ #include "libbb.h"
+ #include <netinet/ip.h> /* For IPTOS_LOWDELAY definition */
++#include <sys/resource.h> /* setpriority */
+ #ifndef IPTOS_LOWDELAY
+ # define IPTOS_LOWDELAY 0x10
+ #endif
+diff --git a/runit/chpst.c b/runit/chpst.c
+index ac296ba..ed72c8b 100644
+--- a/runit/chpst.c
++++ b/runit/chpst.c
+@@ -91,6 +91,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ //usage:     "\n                      a SIGXCPU after N seconds"
+ #include "libbb.h"
++#include <sys/resource.h> /* getrlimit */
+ /*
+ Five applets here: chpst, envdir, envuidgid, setuidgid, softlimit.
+diff --git a/shell/shell_common.c b/shell/shell_common.c
+index 51c92d6..780e27e 100644
+--- a/shell/shell_common.c
++++ b/shell/shell_common.c
+@@ -18,6 +18,7 @@
+  */
+ #include "libbb.h"
+ #include "shell_common.h"
++#include <sys/resource.h> /* getrlimit */
+ const char defifsvar[] ALIGN1 = "IFS= \t\n";
+-- 
+1.7.12
+
diff --git a/package/busybox/1.21.0/busybox-1.21.0-mdev.patch b/package/busybox/1.21.0/busybox-1.21.0-mdev.patch
new file mode 100644 (file)
index 0000000..cb873fa
--- /dev/null
@@ -0,0 +1,35 @@
+--- busybox-1.21.0/util-linux/mdev.c
++++ busybox-1.21.0-mdev/util-linux/mdev.c
+@@ -661,6 +661,8 @@ static void make_device(char *device_nam
+                       if (mknod(node_name, rule->mode | type, makedev(major, minor)) && errno != EEXIST)
+                               bb_perror_msg("can't create '%s'", node_name);
+                       if (ENABLE_FEATURE_MDEV_CONF) {
++                              if (G.verbose)
++                                      bb_error_msg("chmod: %o chown: %u:%u", rule->mode, rule->ugid.uid, rule->ugid.gid);
+                               chmod(node_name, rule->mode);
+                               chown(node_name, rule->ugid.uid, rule->ugid.gid);
+                       }
+@@ -813,6 +815,7 @@ static void load_firmware(const char *fi
+               full_write(loading_fd, "-1", 2);
+  out:
++      xchdir("/dev");
+       if (ENABLE_FEATURE_CLEAN_UP) {
+               close(firmware_fd);
+               close(loading_fd);
+@@ -919,11 +922,13 @@ int mdev_main(int argc UNUSED_PARAM, cha
+               }
+               {
+-                      int logfd = open("/dev/mdev.log", O_WRONLY | O_APPEND);
++                      int logfd = open("mdev.log", O_WRONLY | O_APPEND);
+                       if (logfd >= 0) {
+                               xmove_fd(logfd, STDERR_FILENO);
+                               G.verbose = 1;
+-                              bb_error_msg("seq: %s action: %s", seq, action);
++                              if (seq)
++                                      applet_name = xasprintf("%s[%s]", applet_name, seq);
++                              bb_error_msg("action: %s", action);
+                       }
+               }
diff --git a/package/busybox/1.21.0/busybox-1.21.0-platform.patch b/package/busybox/1.21.0/busybox-1.21.0-platform.patch
new file mode 100644 (file)
index 0000000..9be6cb8
--- /dev/null
@@ -0,0 +1,24 @@
+--- busybox-1.21.0/archival/libarchive/decompress_unxz.c
++++ busybox-1.21.0-platform/archival/libarchive/decompress_unxz.c
+@@ -30,8 +30,8 @@ static uint32_t xz_crc32(const uint8_t *
+ /* We use arch-optimized unaligned accessors */
+ #define get_unaligned_le32(buf) ({ uint32_t v; move_from_unaligned32(v, buf); SWAP_LE32(v); })
+ #define get_unaligned_be32(buf) ({ uint32_t v; move_from_unaligned32(v, buf); SWAP_BE32(v); })
+-#define put_unaligned_le32(val, buf) move_to_unaligned16(buf, SWAP_LE32(val))
+-#define put_unaligned_be32(val, buf) move_to_unaligned16(buf, SWAP_BE32(val))
++#define put_unaligned_le32(val, buf) move_to_unaligned32(buf, SWAP_LE32(val))
++#define put_unaligned_be32(val, buf) move_to_unaligned32(buf, SWAP_BE32(val))
+ #include "unxz/xz_dec_bcj.c"
+ #include "unxz/xz_dec_lzma2.c"
+--- busybox-1.21.0/include/platform.h
++++ busybox-1.21.0-platform/include/platform.h
+@@ -228,7 +228,7 @@ typedef uint32_t bb__aliased_uint32_t FI
+ # define move_from_unaligned32(v, u32p) (memcpy(&(v), (u32p), 4))
+ # define move_to_unaligned16(u16p, v) do { \
+       uint16_t __t = (v); \
+-      memcpy((u16p), &__t, 4); \
++      memcpy((u16p), &__t, 2); \
+ } while (0)
+ # define move_to_unaligned32(u32p, v) do { \
+       uint32_t __t = (v); \
diff --git a/package/busybox/1.21.0/busybox-1.21.0-xz.patch b/package/busybox/1.21.0/busybox-1.21.0-xz.patch
new file mode 100644 (file)
index 0000000..56ba1a2
--- /dev/null
@@ -0,0 +1,84 @@
+--- busybox-1.21.0/archival/libarchive/decompress_unxz.c
++++ busybox-1.21.0-xz/archival/libarchive/decompress_unxz.c
+@@ -40,6 +40,7 @@ static uint32_t xz_crc32(const uint8_t *
+ IF_DESKTOP(long long) int FAST_FUNC
+ unpack_xz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd)
+ {
++      enum xz_ret xz_result;
+       struct xz_buf iobuf;
+       struct xz_dec *state;
+       unsigned char *membuf;
+@@ -63,9 +64,8 @@ unpack_xz_stream(transformer_aux_data_t
+       /* Limit memory usage to about 64 MiB. */
+       state = xz_dec_init(XZ_DYNALLOC, 64*1024*1024);
++      xz_result = X_OK;
+       while (1) {
+-              enum xz_ret r;
+-
+               if (iobuf.in_pos == iobuf.in_size) {
+                       int rd = safe_read(src_fd, membuf, BUFSIZ);
+                       if (rd < 0) {
+@@ -73,28 +73,57 @@ unpack_xz_stream(transformer_aux_data_t
+                               total = -1;
+                               break;
+                       }
++                      if (rd == 0 && xz_result == XZ_STREAM_END)
++                              break;
+                       iobuf.in_size = rd;
+                       iobuf.in_pos = 0;
+               }
++              if (xz_result == XZ_STREAM_END) {
++                      /*
++                       * Try to start decoding next concatenated stream.
++                       * Stream padding must always be a multiple of four
++                       * bytes to preserve four-byte alignment. To keep the
++                       * code slightly smaller, we aren't as strict here as
++                       * the .xz spec requires. We just skip all zero-bytes
++                       * without checking the alignment and thus can accept
++                       * files that aren't valid, e.g. the XZ utils test
++                       * files bad-0pad-empty.xz and bad-0catpad-empty.xz.
++                       */
++                      do {
++                              if (membuf[iobuf.in_pos] != 0) {
++                                      xz_dec_reset(state);
++                                      goto do_run;
++                              }
++                              iobuf.in_pos++;
++                      } while (iobuf.in_pos < iobuf.in_size);
++              }
++ do_run:
+ //            bb_error_msg(">in pos:%d size:%d out pos:%d size:%d",
+ //                            iobuf.in_pos, iobuf.in_size, iobuf.out_pos, iobuf.out_size);
+-              r = xz_dec_run(state, &iobuf);
++              xz_result = xz_dec_run(state, &iobuf);
+ //            bb_error_msg("<in pos:%d size:%d out pos:%d size:%d r:%d",
+-//                            iobuf.in_pos, iobuf.in_size, iobuf.out_pos, iobuf.out_size, r);
++//                            iobuf.in_pos, iobuf.in_size, iobuf.out_pos, iobuf.out_size, xz_result);
+               if (iobuf.out_pos) {
+                       xwrite(dst_fd, iobuf.out, iobuf.out_pos);
+                       IF_DESKTOP(total += iobuf.out_pos;)
+                       iobuf.out_pos = 0;
+               }
+-              if (r == XZ_STREAM_END) {
+-                      break;
++              if (xz_result == XZ_STREAM_END) {
++                      /*
++                       * Can just "break;" here, if not for concatenated
++                       * .xz streams.
++                       * Checking for padding may require buffer
++                       * replenishment. Can't do it here.
++                       */
++                      continue;
+               }
+-              if (r != XZ_OK && r != XZ_UNSUPPORTED_CHECK) {
++              if (xz_result != XZ_OK && xz_result != XZ_UNSUPPORTED_CHECK) {
+                       bb_error_msg("corrupted data");
+                       total = -1;
+                       break;
+               }
+       }
++
+       xz_dec_end(state);
+       free(membuf);
diff --git a/package/busybox/busybox-1.19.4/busybox-1.19.4-udhcp.patch b/package/busybox/busybox-1.19.4/busybox-1.19.4-udhcp.patch
deleted file mode 100644 (file)
index 94d5f34..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
---- busybox-1.19.4/networking/udhcp/common.c
-+++ busybox-1.19.4-udhcp/networking/udhcp/common.c
-@@ -29,16 +29,16 @@ const struct dhcp_optflag dhcp_optflags[
- //    { OPTION_IP | OPTION_LIST                 , 0x07 }, /* DHCP_LOG_SERVER    */
- //    { OPTION_IP | OPTION_LIST                 , 0x08 }, /* DHCP_COOKIE_SERVER */
-       { OPTION_IP | OPTION_LIST                 , 0x09 }, /* DHCP_LPR_SERVER    */
--      { OPTION_STRING               | OPTION_REQ, 0x0c }, /* DHCP_HOST_NAME     */
-+      { OPTION_STRING_HOST          | OPTION_REQ, 0x0c }, /* DHCP_HOST_NAME     */
-       { OPTION_U16                              , 0x0d }, /* DHCP_BOOT_SIZE     */
--      { OPTION_STRING               | OPTION_REQ, 0x0f }, /* DHCP_DOMAIN_NAME   */
-+      { OPTION_STRING_HOST          | OPTION_REQ, 0x0f }, /* DHCP_DOMAIN_NAME   */
-       { OPTION_IP                               , 0x10 }, /* DHCP_SWAP_SERVER   */
-       { OPTION_STRING                           , 0x11 }, /* DHCP_ROOT_PATH     */
-       { OPTION_U8                               , 0x17 }, /* DHCP_IP_TTL        */
-       { OPTION_U16                              , 0x1a }, /* DHCP_MTU           */
-       { OPTION_IP                   | OPTION_REQ, 0x1c }, /* DHCP_BROADCAST     */
-       { OPTION_IP_PAIR | OPTION_LIST            , 0x21 }, /* DHCP_ROUTES        */
--      { OPTION_STRING                           , 0x28 }, /* DHCP_NIS_DOMAIN    */
-+      { OPTION_STRING_HOST                      , 0x28 }, /* DHCP_NIS_DOMAIN    */
-       { OPTION_IP | OPTION_LIST                 , 0x29 }, /* DHCP_NIS_SERVER    */
-       { OPTION_IP | OPTION_LIST     | OPTION_REQ, 0x2a }, /* DHCP_NTP_SERVER    */
-       { OPTION_IP | OPTION_LIST                 , 0x2c }, /* DHCP_WINS_SERVER   */
-@@ -46,7 +46,7 @@ const struct dhcp_optflag dhcp_optflags[
-       { OPTION_IP                               , 0x36 }, /* DHCP_SERVER_ID     */
-       { OPTION_STRING                           , 0x38 }, /* DHCP_ERR_MESSAGE   */
- //TODO: must be combined with 'sname' and 'file' handling:
--      { OPTION_STRING                           , 0x42 }, /* DHCP_TFTP_SERVER_NAME */
-+      { OPTION_STRING_HOST                      , 0x42 }, /* DHCP_TFTP_SERVER_NAME */
-       { OPTION_STRING                           , 0x43 }, /* DHCP_BOOT_FILE     */
- //TODO: not a string, but a set of LASCII strings:
- //    { OPTION_STRING                           , 0x4D }, /* DHCP_USER_CLASS    */
-@@ -143,6 +143,7 @@ const uint8_t dhcp_option_lengths[] ALIG
-       [OPTION_IP_PAIR] = 8,
- //    [OPTION_BOOLEAN] = 1,
-       [OPTION_STRING] =  1,  /* ignored by udhcp_str2optset */
-+      [OPTION_STRING_HOST] = 1,  /* ignored by udhcp_str2optset */
- #if ENABLE_FEATURE_UDHCP_RFC3397
-       [OPTION_DNS_STRING] = 1,  /* ignored by both udhcp_str2optset and xmalloc_optname_optval */
-       [OPTION_SIP_SERVERS] = 1,
-@@ -411,7 +412,9 @@ static NOINLINE void attach_option(
-                       /* actually 255 is ok too, but adding a space can overlow it */
-                       existing->data = xrealloc(existing->data, OPT_DATA + 1 + old_len + length);
--                      if ((optflag->flags & OPTION_TYPE_MASK) == OPTION_STRING) {
-+                      if ((optflag->flags & OPTION_TYPE_MASK) == OPTION_STRING
-+                       || (optflag->flags & OPTION_TYPE_MASK) == OPTION_STRING_HOST
-+                      ) {
-                               /* add space separator between STRING options in a list */
-                               existing->data[OPT_DATA + old_len] = ' ';
-                               old_len++;
-@@ -475,6 +478,7 @@ int FAST_FUNC udhcp_str2optset(const cha
-                               retval = udhcp_str2nip(val, buffer + 4);
-                       break;
-               case OPTION_STRING:
-+              case OPTION_STRING_HOST:
- #if ENABLE_FEATURE_UDHCP_RFC3397
-               case OPTION_DNS_STRING:
- #endif
---- busybox-1.19.4/networking/udhcp/common.h
-+++ busybox-1.19.4-udhcp/networking/udhcp/common.h
-@@ -80,6 +80,9 @@ enum {
-       OPTION_IP = 1,
-       OPTION_IP_PAIR,
-       OPTION_STRING,
-+      /* Opts of STRING_HOST type will be sanitized before they are passed
-+       * to udhcpc script's environment: */
-+      OPTION_STRING_HOST,
- //    OPTION_BOOLEAN,
-       OPTION_U8,
-       OPTION_U16,
---- busybox-1.19.4/networking/udhcp/dhcpc.c
-+++ busybox-1.19.4-udhcp/networking/udhcp/dhcpc.c
-@@ -101,6 +101,7 @@ static const uint8_t len_of_option_as_st
-       [OPTION_IP_PAIR         ] = sizeof("255.255.255.255 ") * 2,
-       [OPTION_STATIC_ROUTES   ] = sizeof("255.255.255.255/32 255.255.255.255 "),
-       [OPTION_STRING          ] = 1,
-+      [OPTION_STRING_HOST     ] = 1,
- #if ENABLE_FEATURE_UDHCP_RFC3397
-       [OPTION_DNS_STRING      ] = 1, /* unused */
-       /* Hmmm, this severely overestimates size if SIP_SERVERS option
-@@ -135,6 +136,63 @@ static int mton(uint32_t mask)
-       return i;
- }
-+/* Check if a given label represents a valid DNS label
-+ * Return pointer to the first character after the label upon success,
-+ * NULL otherwise.
-+ * See RFC1035, 2.3.1
-+ */
-+/* We don't need to be particularly anal. For example, allowing _, hyphen
-+ * at the end, or leading and trailing dots would be ok, since it
-+ * can't be used for attacks. (Leading hyphen can be, if someone uses
-+ * cmd "$hostname"
-+ * in the script: then hostname may be treated as an option)
-+ */
-+static const char *valid_domain_label(const char *label)
-+{
-+      unsigned char ch;
-+      unsigned pos = 0;
-+
-+      for (;;) {
-+              ch = *label;
-+              if ((ch|0x20) < 'a' || (ch|0x20) > 'z') {
-+                      if (pos == 0) {
-+                              /* label must begin with letter */
-+                              return NULL;
-+                      }
-+                      if (ch < '0' || ch > '9') {
-+                              if (ch == '\0' || ch == '.')
-+                                      return label;
-+                              /* DNS allows only '-', but we are more permissive */
-+                              if (ch != '-' && ch != '_')
-+                                      return NULL;
-+                      }
-+              }
-+              label++;
-+              pos++;
-+              //Do we want this?
-+              //if (pos > 63) /* NS_MAXLABEL; labels must be 63 chars or less */
-+              //      return NULL;
-+      }
-+}
-+
-+/* Check if a given name represents a valid DNS name */
-+/* See RFC1035, 2.3.1 */
-+static int good_hostname(const char *name)
-+{
-+      //const char *start = name;
-+
-+      for (;;) {
-+              name = valid_domain_label(name);
-+              if (!name)
-+                      return 0;
-+              if (!name[0])
-+                      return 1;
-+                      //Do we want this?
-+                      //return ((name - start) < 1025); /* NS_MAXDNAME */
-+              name++;
-+      }
-+}
-+
- /* Create "opt_name=opt_value" string */
- static NOINLINE char *xmalloc_optname_optval(uint8_t *option, const struct dhcp_optflag *optflag, const char *opt_name)
- {
-@@ -185,8 +243,11 @@ static NOINLINE char *xmalloc_optname_op
-                       break;
-               }
-               case OPTION_STRING:
-+              case OPTION_STRING_HOST:
-                       memcpy(dest, option, len);
-                       dest[len] = '\0';
-+                      if (type == OPTION_STRING_HOST && !good_hostname(dest))
-+                              safe_strncpy(dest, "bad", len);
-                       return ret;      /* Short circuit this case */
-               case OPTION_STATIC_ROUTES: {
-                       /* Option binary format:
-@@ -314,6 +375,7 @@ static char **fill_envp(struct dhcp_pack
-       /* +1 element for each option, +2 for subnet option: */
-       if (packet) {
-               /* note: do not search for "pad" (0) and "end" (255) options */
-+//TODO: change logic to scan packet _once_
-               for (i = 1; i < 255; i++) {
-                       temp = udhcp_get_option(packet, i);
-                       if (temp) {
diff --git a/package/busybox/busybox-1.20.2/busybox-1.20.2-kernel_ver.patch b/package/busybox/busybox-1.20.2/busybox-1.20.2-kernel_ver.patch
deleted file mode 100644 (file)
index 456fb08..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- busybox-1.20.2/libbb/kernel_version.c
-+++ busybox-1.20.2-kernel_ver/libbb/kernel_version.c
-@@ -20,18 +20,15 @@
- int FAST_FUNC get_linux_version_code(void)
- {
-       struct utsname name;
--      char *s;
-+      char *s, *t;
-       int i, r;
--      if (uname(&name) == -1) {
--              bb_perror_msg("can't get system information");
--              return 0;
--      }
--
-+      uname(&name); /* never fails */
-       s = name.release;
-       r = 0;
-       for (i = 0; i < 3; i++) {
--              r = r * 256 + atoi(strtok(s, "."));
-+              t = strtok(s, ".");
-+              r = r * 256 + (t ? atoi(t) : 0);
-               s = NULL;
-       }
-       return r;
diff --git a/package/busybox/busybox-1.20.2/busybox-1.20.2-ntpd.patch b/package/busybox/busybox-1.20.2/busybox-1.20.2-ntpd.patch
deleted file mode 100644 (file)
index 17fc0b1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- busybox-1.20.2/networking/ntpd.c
-+++ busybox-1.20.2-ntpd/networking/ntpd.c
-@@ -1840,7 +1840,7 @@ recv_and_process_client_pkt(void /*int f
-       /* Build a reply packet */
-       memset(&msg, 0, sizeof(msg));
--      msg.m_status = G.stratum < MAXSTRAT ? G.ntp_status : LI_ALARM;
-+      msg.m_status = G.stratum < MAXSTRAT ? (G.ntp_status & LI_MASK) : LI_ALARM;
-       msg.m_status |= (query_status & VERSION_MASK);
-       msg.m_status |= ((query_status & MODE_MASK) == MODE_CLIENT) ?
-                        MODE_SERVER : MODE_SYM_PAS;
diff --git a/package/busybox/busybox-1.20.2/busybox-1.20.2-pkg-config-selinux.patch b/package/busybox/busybox-1.20.2/busybox-1.20.2-pkg-config-selinux.patch
deleted file mode 100644 (file)
index f39250c..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-From b1cec5003b73080a8aa7ea277621bf1c71c3e8d6 Mon Sep 17 00:00:00 2001
-From: Mike Frysinger <vapier@gentoo.org>
-Date: Sat, 20 Oct 2012 15:01:26 -0400
-Subject: [PATCH] build system: use pkg-config to look up selinux libs
-
-Newer versions of libselinux has started linking against more libs.
-Rather than continuing hardcoding things, switch to using pkg-config
-to query for its dependencies.
-
-Signed-off-by: Mike Frysinger <vapier@gentoo.org>
----
- Makefile       |  1 +
- Makefile.flags | 12 +++++++++++-
- 2 files changed, 12 insertions(+), 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index fccde4a..3a0a5e1 100644
---- a/Makefile
-+++ b/Makefile
-@@ -297,6 +297,7 @@ NM         = $(CROSS_COMPILE)nm
- STRIP         = $(CROSS_COMPILE)strip
- OBJCOPY               = $(CROSS_COMPILE)objcopy
- OBJDUMP               = $(CROSS_COMPILE)objdump
-+PKG_CONFIG    ?= $(CROSS_COMPILE)pkg-config
- AWK           = awk
- GENKSYMS      = scripts/genksyms/genksyms
- DEPMOD                = /sbin/depmod
-diff --git a/Makefile.flags b/Makefile.flags
-index c43c8dc..15dcc1f 100644
---- a/Makefile.flags
-+++ b/Makefile.flags
-@@ -74,6 +74,12 @@ ARCH_FPIC ?= -fpic
- ARCH_FPIE ?= -fpie
- ARCH_PIE ?= -pie
-+# Usage: $(eval $(call pkg_check_modules,VARIABLE-PREFIX,MODULES))
-+define pkg_check_modules
-+$(1)_CFLAGS := $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags $(2))
-+$(1)_LIBS := $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs $(2))
-+endef
-+
- ifeq ($(CONFIG_BUILD_LIBBUSYBOX),y)
- # on i386: 14% smaller libbusybox.so
- # (code itself is 9% bigger, we save on relocs/PLT/GOT)
-@@ -85,6 +91,7 @@ endif
- ifeq ($(CONFIG_STATIC),y)
- CFLAGS_busybox += -static
-+PKG_CONFIG_FLAGS += --static
- endif
- ifeq ($(CONFIG_PIE),y)
-@@ -127,7 +134,10 @@ LDLIBS += pam pam_misc pthread
- endif
- ifeq ($(CONFIG_SELINUX),y)
--LDLIBS += selinux sepol
-+SELINUX_PC_MODULES = libselinux libsepol
-+$(eval $(call pkg_check_modules,SELINUX,$(SELINUX_PC_MODULES)))
-+CPPFLAGS += $(SELINUX_CFLAGS)
-+LDLIBS += $(if $(SELINUX_LIBS),$(SELINUX_LIBS:-l%=%),$(SELINUX_PC_MODULES:lib%=%))
- endif
- ifeq ($(CONFIG_EFENCE),y)
--- 
-1.7.12
-
diff --git a/package/busybox/busybox-1.20.2/busybox-1.20.2-sys-resource.patch b/package/busybox/busybox-1.20.2/busybox-1.20.2-sys-resource.patch
deleted file mode 100644 (file)
index 7b18500..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-From 5a5dfcad6ba96d12d68bd7b39279215a8fee70d3 Mon Sep 17 00:00:00 2001
-From: Tias Guns <tias@ulyssis.org>
-Date: Sun, 10 Jun 2012 14:19:01 +0200
-Subject: [PATCH] inetd: fix build failure in Android
-
-Signed-off-by: Tias Guns <tias@ulyssis.org>
-Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-(cherry picked from commit 64f763b42a43cbf36e401690ff6767c25575e520)
----
- networking/inetd.c | 1 +
- 1 file changed, 1 insertion(+)
--- 
-1.7.12
-
-From 246ea72843d5b7e9d4cd902dc5e9d71359196303 Mon Sep 17 00:00:00 2001
-From: Mike Frysinger <vapier@gentoo.org>
-Date: Thu, 5 Jul 2012 23:19:09 -0400
-Subject: [PATCH] include sys/resource.h where needed
-
-We use functions from sys/resource.h in misc applets, but don't include
-the header.  This breaks building with newer glibc versions, so add the
-include where needed.
-
-Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-(cherry picked from commit c5fe9f7b723f949457263ef8e22ab807d5b549ce)
----
- loginutils/passwd.c      | 1 +
- miscutils/time.c         | 1 +
- networking/inetd.c       | 1 +
- networking/ntpd.c        | 1 +
- networking/ntpd_simple.c | 1 +
- runit/chpst.c            | 1 +
- shell/shell_common.c     | 1 +
- 7 files changed, 7 insertions(+)
-
-diff --git a/loginutils/passwd.c b/loginutils/passwd.c
-index b83db00..a7006f0 100644
---- a/loginutils/passwd.c
-+++ b/loginutils/passwd.c
-@@ -15,6 +15,7 @@
- #include "libbb.h"
- #include <syslog.h>
-+#include <sys/resource.h> /* setrlimit */
- static void nuke_str(char *str)
- {
-diff --git a/miscutils/time.c b/miscutils/time.c
-index 945f15f..ffed386 100644
---- a/miscutils/time.c
-+++ b/miscutils/time.c
-@@ -16,6 +16,7 @@
- //usage:     "\n      -v      Verbose"
- #include "libbb.h"
-+#include <sys/resource.h> /* getrusage */
- /* Information on the resources used by a child process.  */
- typedef struct {
-diff --git a/networking/inetd.c b/networking/inetd.c
-index 1308d74..00baf69 100644
---- a/networking/inetd.c
-+++ b/networking/inetd.c
-@@ -165,6 +165,8 @@
- //usage:     "\n              (default: 0 - disabled)"
- #include <syslog.h>
-+#include <sys/resource.h> /* setrlimit */
-+#include <sys/socket.h> /* un.h may need this */
- #include <sys/un.h>
- #include "libbb.h"
-diff --git a/networking/ntpd.c b/networking/ntpd.c
-index 603801e..b885215 100644
---- a/networking/ntpd.c
-+++ b/networking/ntpd.c
-@@ -46,6 +46,7 @@
- #include "libbb.h"
- #include <math.h>
- #include <netinet/ip.h> /* For IPTOS_LOWDELAY definition */
-+#include <sys/resource.h> /* setpriority */
- #include <sys/timex.h>
- #ifndef IPTOS_LOWDELAY
- # define IPTOS_LOWDELAY 0x10
-diff --git a/networking/ntpd_simple.c b/networking/ntpd_simple.c
-index 4ad44e4..1b7c66b 100644
---- a/networking/ntpd_simple.c
-+++ b/networking/ntpd_simple.c
-@@ -7,6 +7,7 @@
-  */
- #include "libbb.h"
- #include <netinet/ip.h> /* For IPTOS_LOWDELAY definition */
-+#include <sys/resource.h> /* setpriority */
- #ifndef IPTOS_LOWDELAY
- # define IPTOS_LOWDELAY 0x10
- #endif
-diff --git a/runit/chpst.c b/runit/chpst.c
-index ac296ba..ed72c8b 100644
---- a/runit/chpst.c
-+++ b/runit/chpst.c
-@@ -91,6 +91,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- //usage:     "\n                      a SIGXCPU after N seconds"
- #include "libbb.h"
-+#include <sys/resource.h> /* getrlimit */
- /*
- Five applets here: chpst, envdir, envuidgid, setuidgid, softlimit.
-diff --git a/shell/shell_common.c b/shell/shell_common.c
-index 51c92d6..780e27e 100644
---- a/shell/shell_common.c
-+++ b/shell/shell_common.c
-@@ -18,6 +18,7 @@
-  */
- #include "libbb.h"
- #include "shell_common.h"
-+#include <sys/resource.h> /* getrlimit */
- const char defifsvar[] ALIGN1 = "IFS= \t\n";
--- 
-1.7.12
-
diff --git a/package/busybox/busybox-1.21.0/busybox-1.21.0-mdev.patch b/package/busybox/busybox-1.21.0/busybox-1.21.0-mdev.patch
deleted file mode 100644 (file)
index cb873fa..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
---- busybox-1.21.0/util-linux/mdev.c
-+++ busybox-1.21.0-mdev/util-linux/mdev.c
-@@ -661,6 +661,8 @@ static void make_device(char *device_nam
-                       if (mknod(node_name, rule->mode | type, makedev(major, minor)) && errno != EEXIST)
-                               bb_perror_msg("can't create '%s'", node_name);
-                       if (ENABLE_FEATURE_MDEV_CONF) {
-+                              if (G.verbose)
-+                                      bb_error_msg("chmod: %o chown: %u:%u", rule->mode, rule->ugid.uid, rule->ugid.gid);
-                               chmod(node_name, rule->mode);
-                               chown(node_name, rule->ugid.uid, rule->ugid.gid);
-                       }
-@@ -813,6 +815,7 @@ static void load_firmware(const char *fi
-               full_write(loading_fd, "-1", 2);
-  out:
-+      xchdir("/dev");
-       if (ENABLE_FEATURE_CLEAN_UP) {
-               close(firmware_fd);
-               close(loading_fd);
-@@ -919,11 +922,13 @@ int mdev_main(int argc UNUSED_PARAM, cha
-               }
-               {
--                      int logfd = open("/dev/mdev.log", O_WRONLY | O_APPEND);
-+                      int logfd = open("mdev.log", O_WRONLY | O_APPEND);
-                       if (logfd >= 0) {
-                               xmove_fd(logfd, STDERR_FILENO);
-                               G.verbose = 1;
--                              bb_error_msg("seq: %s action: %s", seq, action);
-+                              if (seq)
-+                                      applet_name = xasprintf("%s[%s]", applet_name, seq);
-+                              bb_error_msg("action: %s", action);
-                       }
-               }
diff --git a/package/busybox/busybox-1.21.0/busybox-1.21.0-platform.patch b/package/busybox/busybox-1.21.0/busybox-1.21.0-platform.patch
deleted file mode 100644 (file)
index 9be6cb8..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
---- busybox-1.21.0/archival/libarchive/decompress_unxz.c
-+++ busybox-1.21.0-platform/archival/libarchive/decompress_unxz.c
-@@ -30,8 +30,8 @@ static uint32_t xz_crc32(const uint8_t *
- /* We use arch-optimized unaligned accessors */
- #define get_unaligned_le32(buf) ({ uint32_t v; move_from_unaligned32(v, buf); SWAP_LE32(v); })
- #define get_unaligned_be32(buf) ({ uint32_t v; move_from_unaligned32(v, buf); SWAP_BE32(v); })
--#define put_unaligned_le32(val, buf) move_to_unaligned16(buf, SWAP_LE32(val))
--#define put_unaligned_be32(val, buf) move_to_unaligned16(buf, SWAP_BE32(val))
-+#define put_unaligned_le32(val, buf) move_to_unaligned32(buf, SWAP_LE32(val))
-+#define put_unaligned_be32(val, buf) move_to_unaligned32(buf, SWAP_BE32(val))
- #include "unxz/xz_dec_bcj.c"
- #include "unxz/xz_dec_lzma2.c"
---- busybox-1.21.0/include/platform.h
-+++ busybox-1.21.0-platform/include/platform.h
-@@ -228,7 +228,7 @@ typedef uint32_t bb__aliased_uint32_t FI
- # define move_from_unaligned32(v, u32p) (memcpy(&(v), (u32p), 4))
- # define move_to_unaligned16(u16p, v) do { \
-       uint16_t __t = (v); \
--      memcpy((u16p), &__t, 4); \
-+      memcpy((u16p), &__t, 2); \
- } while (0)
- # define move_to_unaligned32(u32p, v) do { \
-       uint32_t __t = (v); \
diff --git a/package/busybox/busybox-1.21.0/busybox-1.21.0-xz.patch b/package/busybox/busybox-1.21.0/busybox-1.21.0-xz.patch
deleted file mode 100644 (file)
index 56ba1a2..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
---- busybox-1.21.0/archival/libarchive/decompress_unxz.c
-+++ busybox-1.21.0-xz/archival/libarchive/decompress_unxz.c
-@@ -40,6 +40,7 @@ static uint32_t xz_crc32(const uint8_t *
- IF_DESKTOP(long long) int FAST_FUNC
- unpack_xz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd)
- {
-+      enum xz_ret xz_result;
-       struct xz_buf iobuf;
-       struct xz_dec *state;
-       unsigned char *membuf;
-@@ -63,9 +64,8 @@ unpack_xz_stream(transformer_aux_data_t
-       /* Limit memory usage to about 64 MiB. */
-       state = xz_dec_init(XZ_DYNALLOC, 64*1024*1024);
-+      xz_result = X_OK;
-       while (1) {
--              enum xz_ret r;
--
-               if (iobuf.in_pos == iobuf.in_size) {
-                       int rd = safe_read(src_fd, membuf, BUFSIZ);
-                       if (rd < 0) {
-@@ -73,28 +73,57 @@ unpack_xz_stream(transformer_aux_data_t
-                               total = -1;
-                               break;
-                       }
-+                      if (rd == 0 && xz_result == XZ_STREAM_END)
-+                              break;
-                       iobuf.in_size = rd;
-                       iobuf.in_pos = 0;
-               }
-+              if (xz_result == XZ_STREAM_END) {
-+                      /*
-+                       * Try to start decoding next concatenated stream.
-+                       * Stream padding must always be a multiple of four
-+                       * bytes to preserve four-byte alignment. To keep the
-+                       * code slightly smaller, we aren't as strict here as
-+                       * the .xz spec requires. We just skip all zero-bytes
-+                       * without checking the alignment and thus can accept
-+                       * files that aren't valid, e.g. the XZ utils test
-+                       * files bad-0pad-empty.xz and bad-0catpad-empty.xz.
-+                       */
-+                      do {
-+                              if (membuf[iobuf.in_pos] != 0) {
-+                                      xz_dec_reset(state);
-+                                      goto do_run;
-+                              }
-+                              iobuf.in_pos++;
-+                      } while (iobuf.in_pos < iobuf.in_size);
-+              }
-+ do_run:
- //            bb_error_msg(">in pos:%d size:%d out pos:%d size:%d",
- //                            iobuf.in_pos, iobuf.in_size, iobuf.out_pos, iobuf.out_size);
--              r = xz_dec_run(state, &iobuf);
-+              xz_result = xz_dec_run(state, &iobuf);
- //            bb_error_msg("<in pos:%d size:%d out pos:%d size:%d r:%d",
--//                            iobuf.in_pos, iobuf.in_size, iobuf.out_pos, iobuf.out_size, r);
-+//                            iobuf.in_pos, iobuf.in_size, iobuf.out_pos, iobuf.out_size, xz_result);
-               if (iobuf.out_pos) {
-                       xwrite(dst_fd, iobuf.out, iobuf.out_pos);
-                       IF_DESKTOP(total += iobuf.out_pos;)
-                       iobuf.out_pos = 0;
-               }
--              if (r == XZ_STREAM_END) {
--                      break;
-+              if (xz_result == XZ_STREAM_END) {
-+                      /*
-+                       * Can just "break;" here, if not for concatenated
-+                       * .xz streams.
-+                       * Checking for padding may require buffer
-+                       * replenishment. Can't do it here.
-+                       */
-+                      continue;
-               }
--              if (r != XZ_OK && r != XZ_UNSUPPORTED_CHECK) {
-+              if (xz_result != XZ_OK && xz_result != XZ_UNSUPPORTED_CHECK) {
-                       bb_error_msg("corrupted data");
-                       total = -1;
-                       break;
-               }
-       }
-+
-       xz_dec_end(state);
-       free(membuf);