From 246d12b5b49c045b6c74ea18ebb53778692a7e3f Mon Sep 17 00:00:00 2001 From: Gustavo Zacarias Date: Mon, 22 Apr 2013 11:47:46 -0300 Subject: busybox: move patches to new model On commit 5538e4766201aa0c1c23721cfc99cbbde595964b the versioned package patches changed the directory structure but the packages weren't fixed. Signed-off-by: Gustavo Zacarias Signed-off-by: Peter Korsgaard --- package/busybox/1.19.4/busybox-1.19.4-udhcp.patch | 164 +++++++++++++++++++++ .../busybox/1.20.2/busybox-1.20.2-kernel_ver.patch | 25 ++++ package/busybox/1.20.2/busybox-1.20.2-ntpd.patch | 11 ++ .../1.20.2/busybox-1.20.2-pkg-config-selinux.patch | 67 +++++++++ .../1.20.2/busybox-1.20.2-sys-resource.patch | 123 ++++++++++++++++ package/busybox/1.21.0/busybox-1.21.0-mdev.patch | 35 +++++ .../busybox/1.21.0/busybox-1.21.0-platform.patch | 24 +++ package/busybox/1.21.0/busybox-1.21.0-xz.patch | 84 +++++++++++ .../busybox-1.19.4/busybox-1.19.4-udhcp.patch | 164 --------------------- .../busybox-1.20.2/busybox-1.20.2-kernel_ver.patch | 25 ---- .../busybox-1.20.2/busybox-1.20.2-ntpd.patch | 11 -- .../busybox-1.20.2-pkg-config-selinux.patch | 67 --------- .../busybox-1.20.2-sys-resource.patch | 123 ---------------- .../busybox-1.21.0/busybox-1.21.0-mdev.patch | 35 ----- .../busybox-1.21.0/busybox-1.21.0-platform.patch | 24 --- .../busybox/busybox-1.21.0/busybox-1.21.0-xz.patch | 84 ----------- 16 files changed, 533 insertions(+), 533 deletions(-) create mode 100644 package/busybox/1.19.4/busybox-1.19.4-udhcp.patch create mode 100644 package/busybox/1.20.2/busybox-1.20.2-kernel_ver.patch create mode 100644 package/busybox/1.20.2/busybox-1.20.2-ntpd.patch create mode 100644 package/busybox/1.20.2/busybox-1.20.2-pkg-config-selinux.patch create mode 100644 package/busybox/1.20.2/busybox-1.20.2-sys-resource.patch create mode 100644 package/busybox/1.21.0/busybox-1.21.0-mdev.patch create mode 100644 package/busybox/1.21.0/busybox-1.21.0-platform.patch create mode 100644 package/busybox/1.21.0/busybox-1.21.0-xz.patch delete mode 100644 package/busybox/busybox-1.19.4/busybox-1.19.4-udhcp.patch delete mode 100644 package/busybox/busybox-1.20.2/busybox-1.20.2-kernel_ver.patch delete mode 100644 package/busybox/busybox-1.20.2/busybox-1.20.2-ntpd.patch delete mode 100644 package/busybox/busybox-1.20.2/busybox-1.20.2-pkg-config-selinux.patch delete mode 100644 package/busybox/busybox-1.20.2/busybox-1.20.2-sys-resource.patch delete mode 100644 package/busybox/busybox-1.21.0/busybox-1.21.0-mdev.patch delete mode 100644 package/busybox/busybox-1.21.0/busybox-1.21.0-platform.patch delete mode 100644 package/busybox/busybox-1.21.0/busybox-1.21.0-xz.patch (limited to 'package/busybox') 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 index 000000000..94d5f34a1 --- /dev/null +++ b/package/busybox/1.19.4/busybox-1.19.4-udhcp.patch @@ -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 index 000000000..456fb08e1 --- /dev/null +++ b/package/busybox/1.20.2/busybox-1.20.2-kernel_ver.patch @@ -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 index 000000000..17fc0b1c4 --- /dev/null +++ b/package/busybox/1.20.2/busybox-1.20.2-ntpd.patch @@ -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 index 000000000..f39250c85 --- /dev/null +++ b/package/busybox/1.20.2/busybox-1.20.2-pkg-config-selinux.patch @@ -0,0 +1,67 @@ +From b1cec5003b73080a8aa7ea277621bf1c71c3e8d6 Mon Sep 17 00:00:00 2001 +From: Mike Frysinger +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 +--- + 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 index 000000000..7b1850084 --- /dev/null +++ b/package/busybox/1.20.2/busybox-1.20.2-sys-resource.patch @@ -0,0 +1,123 @@ +From 5a5dfcad6ba96d12d68bd7b39279215a8fee70d3 Mon Sep 17 00:00:00 2001 +From: Tias Guns +Date: Sun, 10 Jun 2012 14:19:01 +0200 +Subject: [PATCH] inetd: fix build failure in Android + +Signed-off-by: Tias Guns +Signed-off-by: Denys Vlasenko +(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 +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 +(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 ++#include /* 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 /* 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 ++#include /* setrlimit */ ++#include /* un.h may need this */ + #include + + #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 + #include /* For IPTOS_LOWDELAY definition */ ++#include /* setpriority */ + #include + #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 /* For IPTOS_LOWDELAY definition */ ++#include /* 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 /* 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 /* 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 index 000000000..cb873fafc --- /dev/null +++ b/package/busybox/1.21.0/busybox-1.21.0-mdev.patch @@ -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 index 000000000..9be6cb8f2 --- /dev/null +++ b/package/busybox/1.21.0/busybox-1.21.0-platform.patch @@ -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 index 000000000..56ba1a273 --- /dev/null +++ b/package/busybox/1.21.0/busybox-1.21.0-xz.patch @@ -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("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 index 456fb08e1..000000000 --- a/package/busybox/busybox-1.20.2/busybox-1.20.2-kernel_ver.patch +++ /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 index 17fc0b1c4..000000000 --- a/package/busybox/busybox-1.20.2/busybox-1.20.2-ntpd.patch +++ /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 index f39250c85..000000000 --- a/package/busybox/busybox-1.20.2/busybox-1.20.2-pkg-config-selinux.patch +++ /dev/null @@ -1,67 +0,0 @@ -From b1cec5003b73080a8aa7ea277621bf1c71c3e8d6 Mon Sep 17 00:00:00 2001 -From: Mike Frysinger -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 ---- - 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 index 7b1850084..000000000 --- a/package/busybox/busybox-1.20.2/busybox-1.20.2-sys-resource.patch +++ /dev/null @@ -1,123 +0,0 @@ -From 5a5dfcad6ba96d12d68bd7b39279215a8fee70d3 Mon Sep 17 00:00:00 2001 -From: Tias Guns -Date: Sun, 10 Jun 2012 14:19:01 +0200 -Subject: [PATCH] inetd: fix build failure in Android - -Signed-off-by: Tias Guns -Signed-off-by: Denys Vlasenko -(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 -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 -(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 -+#include /* 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 /* 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 -+#include /* setrlimit */ -+#include /* un.h may need this */ - #include - - #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 - #include /* For IPTOS_LOWDELAY definition */ -+#include /* setpriority */ - #include - #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 /* For IPTOS_LOWDELAY definition */ -+#include /* 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 /* 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 /* 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 index cb873fafc..000000000 --- a/package/busybox/busybox-1.21.0/busybox-1.21.0-mdev.patch +++ /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 index 9be6cb8f2..000000000 --- a/package/busybox/busybox-1.21.0/busybox-1.21.0-platform.patch +++ /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 index 56ba1a273..000000000 --- a/package/busybox/busybox-1.21.0/busybox-1.21.0-xz.patch +++ /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("