aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2016-01-08 09:18:11 +0200
committerTimo Teräs <timo.teras@iki.fi>2016-01-08 09:21:58 +0200
commit8a4ccf53a605414546a73d39dda24fe95c1bc1b2 (patch)
tree9dfd741e819a102716237fab07aa65b07a6ce4ba /main
parent7d84a0410e406fd7edd9f82c0c83a39ad222201e (diff)
downloadaports-8a4ccf53a605414546a73d39dda24fe95c1bc1b2.tar.bz2
aports-8a4ccf53a605414546a73d39dda24fe95c1bc1b2.tar.xz
main/musl: cherry-pick upstream fixes and improvements
fixes #4621
Diffstat (limited to 'main')
-rw-r--r--main/musl/0001-fix-single-byte-overflow-of-malloc-d-buffer-in-getde.patch (renamed from main/musl/fix-single-byte-overflow.patch)4
-rw-r--r--main/musl/0002-safely-handle-failure-to-open-hosts-services-resolv..patch119
-rw-r--r--main/musl/0003-getnameinfo-make-size-check-not-fail-for-bigger-size.patch45
-rw-r--r--main/musl/0004-properly-access-mcontext_t-program-counter-in-cancel.patch165
-rw-r--r--main/musl/0005-use-explicit-__cp_cancel-label-in-cancellable-syscal.patch220
-rw-r--r--main/musl/0006-prevent-allocs-than-PTRDIFF_MAX-via-mremap.patch39
-rw-r--r--main/musl/0007-fix-mremap-memory-synchronization-and-use-of-variadi.patch61
-rw-r--r--main/musl/0008-have-configure-check-add-ffunction-sections-and-fdat.patch50
-rw-r--r--main/musl/0009-have-configure-check-add-linker-options-to-reduce-si.patch33
-rw-r--r--main/musl/0010-have-configure-check-add-gc-sections-linker-option.patch32
-rw-r--r--main/musl/0011-work-around-toolchains-with-broken-visibility-in-lib.patch29
-rw-r--r--main/musl/0012-fix-return-value-of-nl_langinfo-for-invalid-item-arg.patch46
-rw-r--r--main/musl/0013-math-explicitly-promote-expressions-to-excess-precis.patch84
-rw-r--r--main/musl/0014-ldso-fix-the-dtv-update-logic-in-__tls_get_new.patch34
-rw-r--r--main/musl/0015-properly-handle-point-to-point-interfaces-in-getifad.patch59
-rw-r--r--main/musl/0016-fix-tdelete-to-properly-balance-the-tree.patch53
-rw-r--r--main/musl/0017-fix-tsearch-to-avoid-crash-on-oom.patch28
-rw-r--r--main/musl/0018-tsearch-code-cleanup.patch90
-rw-r--r--main/musl/0019-fix-tsearch-tfind-tdelete-to-handle-null-pointer-inp.patch45
-rw-r--r--main/musl/0020-fix-crash-when-signal-number-0-is-passed-to-sigactio.patch39
-rw-r--r--main/musl/0021-avoid-updating-caller-s-size-when-getdelim-fails-to-.patch46
-rw-r--r--main/musl/0022-fix-overly-pessimistic-realloc-strategy-in-getdelim.patch46
-rw-r--r--main/musl/0023-add-missing-protocols-to-protoent-lookup-functions.patch54
-rw-r--r--main/musl/APKBUILD98
24 files changed, 1512 insertions, 7 deletions
diff --git a/main/musl/fix-single-byte-overflow.patch b/main/musl/0001-fix-single-byte-overflow-of-malloc-d-buffer-in-getde.patch
index ffc5b3551c..4d950ab3dd 100644
--- a/main/musl/fix-single-byte-overflow.patch
+++ b/main/musl/0001-fix-single-byte-overflow-of-malloc-d-buffer-in-getde.patch
@@ -1,7 +1,7 @@
From b114190b29417fff6f701eea3a3b3b6030338280 Mon Sep 17 00:00:00 2001
From: Rich Felker <dalias@aerifal.cx>
Date: Sat, 24 Oct 2015 22:42:10 -0400
-Subject: fix single-byte overflow of malloc'd buffer in getdelim
+Subject: [PATCH] fix single-byte overflow of malloc'd buffer in getdelim
the buffer enlargement logic here accounted for the terminating null
byte, but not for the possibility of hitting the delimiter in the
@@ -28,5 +28,5 @@ index a88c393..3077490 100644
*n = i+k+2;
if (*n < SIZE_MAX/4) *n *= 2;
--
-cgit v0.11.2
+2.7.0
diff --git a/main/musl/0002-safely-handle-failure-to-open-hosts-services-resolv..patch b/main/musl/0002-safely-handle-failure-to-open-hosts-services-resolv..patch
new file mode 100644
index 0000000000..14dc3ada98
--- /dev/null
+++ b/main/musl/0002-safely-handle-failure-to-open-hosts-services-resolv..patch
@@ -0,0 +1,119 @@
+From 2683e267fa6c20d2e7a498a85f79a1dfc4301f23 Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Mon, 26 Oct 2015 18:42:22 -0400
+Subject: [PATCH] safely handle failure to open hosts, services, resolv.conf
+ files
+
+previously, transient failures like fd exhaustion or other
+resource-related errors were treated the same as non-existence of
+these files, leading to fallbacks or false-negative results. in
+particular:
+
+- failure to open hosts resulted in fallback to dns, possibly yielding
+ EAI_NONAME for a hostname that should be defined locally, or an
+ unwanted result from dns that the hosts file was intended to
+ replace.
+
+- failure to open services resulted in EAI_SERVICE.
+
+- failure to open resolv.conf resulted in querying localhost rather
+ than the configured nameservers.
+
+now, only permanent errors trigger the fallback behaviors above; all
+other errors are reportable to the caller as EAI_SYSTEM.
+---
+ src/network/lookup_name.c | 10 +++++++++-
+ src/network/lookup_serv.c | 10 +++++++++-
+ src/network/res_msend.c | 13 +++++++++++--
+ 3 files changed, 29 insertions(+), 4 deletions(-)
+
+diff --git a/src/network/lookup_name.c b/src/network/lookup_name.c
+index 0225a93..df9e623 100644
+--- a/src/network/lookup_name.c
++++ b/src/network/lookup_name.c
+@@ -9,6 +9,7 @@
+ #include <fcntl.h>
+ #include <unistd.h>
+ #include <pthread.h>
++#include <errno.h>
+ #include "lookup.h"
+ #include "stdio_impl.h"
+ #include "syscall.h"
+@@ -51,7 +52,14 @@ static int name_from_hosts(struct address buf[static MAXADDRS], char canon[stati
+ int cnt = 0;
+ unsigned char _buf[1032];
+ FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf);
+- if (!f) return 0;
++ if (!f) switch (errno) {
++ case ENOENT:
++ case ENOTDIR:
++ case EACCES:
++ return 0;
++ default:
++ return EAI_SYSTEM;
++ }
+ while (fgets(line, sizeof line, f) && cnt < MAXADDRS) {
+ char *p, *z;
+
+diff --git a/src/network/lookup_serv.c b/src/network/lookup_serv.c
+index 4faa5bc..66ebaea 100644
+--- a/src/network/lookup_serv.c
++++ b/src/network/lookup_serv.c
+@@ -4,6 +4,7 @@
+ #include <ctype.h>
+ #include <string.h>
+ #include <fcntl.h>
++#include <errno.h>
+ #include "lookup.h"
+ #include "stdio_impl.h"
+
+@@ -69,7 +70,14 @@ int __lookup_serv(struct service buf[static MAXSERVS], const char *name, int pro
+
+ unsigned char _buf[1032];
+ FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf);
+- if (!f) return EAI_SERVICE;
++ if (!f) switch (errno) {
++ case ENOENT:
++ case ENOTDIR:
++ case EACCES:
++ return EAI_SERVICE;
++ default:
++ return EAI_SYSTEM;
++ }
+
+ while (fgets(line, sizeof line, f) && cnt < MAXSERVS) {
+ if ((p=strchr(line, '#'))) *p++='\n', *p=0;
+diff --git a/src/network/res_msend.c b/src/network/res_msend.c
+index 35f106d..d0e8e48 100644
+--- a/src/network/res_msend.c
++++ b/src/network/res_msend.c
+@@ -54,7 +54,15 @@ int __res_msend(int nqueries, const unsigned char *const *queries,
+
+ /* Get nameservers from resolv.conf, fallback to localhost */
+ f = __fopen_rb_ca("/etc/resolv.conf", &_f, _buf, sizeof _buf);
+- if (f) for (nns=0; nns<3 && fgets(line, sizeof line, f); ) {
++ if (!f) switch (errno) {
++ case ENOENT:
++ case ENOTDIR:
++ case EACCES:
++ goto no_resolv_conf;
++ default:
++ return -1;
++ }
++ for (nns=0; nns<3 && fgets(line, sizeof line, f); ) {
+ if (!strncmp(line, "options", 7) && isspace(line[7])) {
+ unsigned long x;
+ char *p, *z;
+@@ -92,7 +100,8 @@ int __res_msend(int nqueries, const unsigned char *const *queries,
+ }
+ }
+ }
+- if (f) __fclose_ca(f);
++ __fclose_ca(f);
++no_resolv_conf:
+ if (!nns) {
+ ns[0].sin.sin_family = AF_INET;
+ ns[0].sin.sin_port = htons(53);
+--
+2.7.0
+
diff --git a/main/musl/0003-getnameinfo-make-size-check-not-fail-for-bigger-size.patch b/main/musl/0003-getnameinfo-make-size-check-not-fail-for-bigger-size.patch
new file mode 100644
index 0000000000..1b4192a740
--- /dev/null
+++ b/main/musl/0003-getnameinfo-make-size-check-not-fail-for-bigger-size.patch
@@ -0,0 +1,45 @@
+From 6eada2edb302ff061be8546b23c9cb836621d122 Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Mon, 26 Oct 2015 23:03:55 +0100
+Subject: [PATCH] getnameinfo: make size check not fail for bigger sizes
+
+getnameinfo() compares the size of the given struct sockaddr with
+sizeof(struct sockaddr_in) and sizeof(struct sockaddr_in6) depending on
+the net family. When you add a sockaddr of size sizeof(struct
+sockaddr_storage) this function will fail because the size of the
+sockaddr is too big. Change the check that it only fails if the size is
+too small, but make it work when it is too big for example when someone
+calls this function with a struct sockaddr_storage and its size.
+This fixes a problem with IoTivity 1.0.0 and musl.
+
+glibc and bionic are only failing if it is smaller, net/freebsd
+implemented the != check.
+
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ src/network/getnameinfo.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/network/getnameinfo.c b/src/network/getnameinfo.c
+index 3484fc6..5e6fae3 100644
+--- a/src/network/getnameinfo.c
++++ b/src/network/getnameinfo.c
+@@ -135,13 +135,13 @@ int getnameinfo(const struct sockaddr *restrict sa, socklen_t sl,
+ switch (af) {
+ case AF_INET:
+ a = (void *)&((struct sockaddr_in *)sa)->sin_addr;
+- if (sl != sizeof(struct sockaddr_in)) return EAI_FAMILY;
++ if (sl < sizeof(struct sockaddr_in)) return EAI_FAMILY;
+ mkptr4(ptr, a);
+ scopeid = 0;
+ break;
+ case AF_INET6:
+ a = (void *)&((struct sockaddr_in6 *)sa)->sin6_addr;
+- if (sl != sizeof(struct sockaddr_in6)) return EAI_FAMILY;
++ if (sl < sizeof(struct sockaddr_in6)) return EAI_FAMILY;
+ if (memcmp(a, "\0\0\0\0\0\0\0\0\0\0\xff\xff", 12))
+ mkptr6(ptr, a);
+ else
+--
+2.7.0
+
diff --git a/main/musl/0004-properly-access-mcontext_t-program-counter-in-cancel.patch b/main/musl/0004-properly-access-mcontext_t-program-counter-in-cancel.patch
new file mode 100644
index 0000000000..d699892c08
--- /dev/null
+++ b/main/musl/0004-properly-access-mcontext_t-program-counter-in-cancel.patch
@@ -0,0 +1,165 @@
+From cb1bf2f321b45a06447133b3db00621b7300c456 Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Mon, 2 Nov 2015 12:39:28 -0500
+Subject: [PATCH] properly access mcontext_t program counter in cancellation
+ handler
+
+using the actual mcontext_t definition rather than an overlaid pointer
+array both improves correctness/readability and eliminates some ugly
+hacks for archs with 64-bit registers bit 32-bit program counter.
+
+also fix UB due to comparison of pointers not in a common array
+object.
+---
+ arch/aarch64/pthread_arch.h | 2 +-
+ arch/arm/pthread_arch.h | 2 +-
+ arch/i386/pthread_arch.h | 2 +-
+ arch/microblaze/pthread_arch.h | 2 +-
+ arch/mips/pthread_arch.h | 2 +-
+ arch/or1k/pthread_arch.h | 3 +--
+ arch/powerpc/pthread_arch.h | 3 +--
+ arch/sh/pthread_arch.h | 2 +-
+ arch/x32/pthread_arch.h | 2 +-
+ arch/x86_64/pthread_arch.h | 2 +-
+ src/thread/pthread_cancel.c | 7 ++++---
+ 11 files changed, 14 insertions(+), 15 deletions(-)
+
+diff --git a/arch/aarch64/pthread_arch.h b/arch/aarch64/pthread_arch.h
+index 74276f4..b2e2d8f 100644
+--- a/arch/aarch64/pthread_arch.h
++++ b/arch/aarch64/pthread_arch.h
+@@ -8,4 +8,4 @@ static inline struct pthread *__pthread_self()
+ #define TLS_ABOVE_TP
+ #define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) - 16)
+
+-#define CANCEL_REG_IP 33
++#define MC_PC pc
+diff --git a/arch/arm/pthread_arch.h b/arch/arm/pthread_arch.h
+index 4a4dd09..8b8a7fb 100644
+--- a/arch/arm/pthread_arch.h
++++ b/arch/arm/pthread_arch.h
+@@ -27,4 +27,4 @@ static inline pthread_t __pthread_self()
+ #define TLS_ABOVE_TP
+ #define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) - 8)
+
+-#define CANCEL_REG_IP 18
++#define MC_PC arm_pc
+diff --git a/arch/i386/pthread_arch.h b/arch/i386/pthread_arch.h
+index 1c06c76..7f38a56 100644
+--- a/arch/i386/pthread_arch.h
++++ b/arch/i386/pthread_arch.h
+@@ -7,4 +7,4 @@ static inline struct pthread *__pthread_self()
+
+ #define TP_ADJ(p) (p)
+
+-#define CANCEL_REG_IP 14
++#define MC_PC gregs[REG_EIP]
+diff --git a/arch/microblaze/pthread_arch.h b/arch/microblaze/pthread_arch.h
+index 259d3d6..08d1ba7 100644
+--- a/arch/microblaze/pthread_arch.h
++++ b/arch/microblaze/pthread_arch.h
+@@ -7,4 +7,4 @@ static inline struct pthread *__pthread_self()
+
+ #define TP_ADJ(p) (p)
+
+-#define CANCEL_REG_IP 32
++#define MC_PC regs.pc
+diff --git a/arch/mips/pthread_arch.h b/arch/mips/pthread_arch.h
+index 93edbd4..8a49965 100644
+--- a/arch/mips/pthread_arch.h
++++ b/arch/mips/pthread_arch.h
+@@ -16,4 +16,4 @@ static inline struct pthread *__pthread_self()
+
+ #define DTP_OFFSET 0x8000
+
+-#define CANCEL_REG_IP (3-(union {int __i; char __b;}){1}.__b)
++#define MC_PC pc
+diff --git a/arch/or1k/pthread_arch.h b/arch/or1k/pthread_arch.h
+index ad63169..7decd76 100644
+--- a/arch/or1k/pthread_arch.h
++++ b/arch/or1k/pthread_arch.h
+@@ -14,5 +14,4 @@ static inline struct pthread *__pthread_self()
+ #define TLS_ABOVE_TP
+ #define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
+
+-/* word-offset to 'pc' in mcontext_t */
+-#define CANCEL_REG_IP 32
++#define MC_PC regs.pc
+diff --git a/arch/powerpc/pthread_arch.h b/arch/powerpc/pthread_arch.h
+index bb7405d..7c5c4fa 100644
+--- a/arch/powerpc/pthread_arch.h
++++ b/arch/powerpc/pthread_arch.h
+@@ -15,9 +15,8 @@ static inline struct pthread *__pthread_self()
+
+ #define DTP_OFFSET 0x8000
+
+-// offset of the PC register in mcontext_t, divided by the system wordsize
+ // the kernel calls the ip "nip", it's the first saved value after the 32
+ // GPRs.
+-#define CANCEL_REG_IP 32
++#define MC_PC gregs[32]
+
+ #define CANARY canary_at_end
+diff --git a/arch/sh/pthread_arch.h b/arch/sh/pthread_arch.h
+index 65c389f..2756e7e 100644
+--- a/arch/sh/pthread_arch.h
++++ b/arch/sh/pthread_arch.h
+@@ -8,4 +8,4 @@ static inline struct pthread *__pthread_self()
+ #define TLS_ABOVE_TP
+ #define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) - 8)
+
+-#define CANCEL_REG_IP 17
++#define MC_PC sc_pc
+diff --git a/arch/x32/pthread_arch.h b/arch/x32/pthread_arch.h
+index 033bfd6..ecb0bbf 100644
+--- a/arch/x32/pthread_arch.h
++++ b/arch/x32/pthread_arch.h
+@@ -7,6 +7,6 @@ static inline struct pthread *__pthread_self()
+
+ #define TP_ADJ(p) (p)
+
+-#define CANCEL_REG_IP 32
++#define MC_PC gregs[REG_RIP]
+
+ #define CANARY canary2
+diff --git a/arch/x86_64/pthread_arch.h b/arch/x86_64/pthread_arch.h
+index 29e4590..c61509c 100644
+--- a/arch/x86_64/pthread_arch.h
++++ b/arch/x86_64/pthread_arch.h
+@@ -7,4 +7,4 @@ static inline struct pthread *__pthread_self()
+
+ #define TP_ADJ(p) (p)
+
+-#define CANCEL_REG_IP 16
++#define MC_PC gregs[REG_RIP]
+diff --git a/src/thread/pthread_cancel.c b/src/thread/pthread_cancel.c
+index 0151a1a..6eaf72c 100644
+--- a/src/thread/pthread_cancel.c
++++ b/src/thread/pthread_cancel.c
+@@ -1,3 +1,4 @@
++#define _GNU_SOURCE
+ #include <string.h>
+ #include "pthread_impl.h"
+ #include "syscall.h"
+@@ -61,15 +62,15 @@ static void cancel_handler(int sig, siginfo_t *si, void *ctx)
+ {
+ pthread_t self = __pthread_self();
+ ucontext_t *uc = ctx;
+- const char *ip = ((char **)&uc->uc_mcontext)[CANCEL_REG_IP];
++ uintptr_t pc = uc->uc_mcontext.MC_PC;
+
+ a_barrier();
+ if (!self->cancel || self->canceldisable == PTHREAD_CANCEL_DISABLE) return;
+
+ _sigaddset(&uc->uc_sigmask, SIGCANCEL);
+
+- if (self->cancelasync || ip >= __cp_begin && ip < __cp_end) {
+- ((char **)&uc->uc_mcontext)[CANCEL_REG_IP] = (char *)__cp_cancel;
++ if (self->cancelasync || pc >= (uintptr_t)__cp_begin && pc < (uintptr_t)__cp_end) {
++ uc->uc_mcontext.MC_PC = (uintptr_t)__cp_cancel;
+ return;
+ }
+
+--
+2.7.0
+
diff --git a/main/musl/0005-use-explicit-__cp_cancel-label-in-cancellable-syscal.patch b/main/musl/0005-use-explicit-__cp_cancel-label-in-cancellable-syscal.patch
new file mode 100644
index 0000000000..f4d7637d00
--- /dev/null
+++ b/main/musl/0005-use-explicit-__cp_cancel-label-in-cancellable-syscal.patch
@@ -0,0 +1,220 @@
+From 36e8b6a28be5d4ffad966386b1e1c0d0dc6ca11a Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Mon, 2 Nov 2015 16:16:00 -0500
+Subject: [PATCH] use explicit __cp_cancel label in cancellable syscall asm for
+ all archs
+
+previously, only archs that needed to do stack cleanup defined a
+__cp_cancel label for acting on cancellation in their syscall asm, and
+a default definition was provided by a weak alias to __cancel, the C
+function. this resulted in wrong codegen for arm on gcc versions
+affected by pr 68178 and possibly similar issues (like pr 66609) on
+other archs, and also created an inconsistency where the __cp_begin
+and __cp_end labels were treated as const data but __cp_cancel was
+treated as a function. this in turn caused incorrect code generation
+on archs where function pointers point to function descriptors rather
+than code (for now, only sh/fdpic).
+---
+ src/thread/aarch64/syscall_cp.s | 7 +++----
+ src/thread/microblaze/syscall_cp.s | 4 +++-
+ src/thread/or1k/syscall_cp.s | 5 ++++-
+ src/thread/powerpc/syscall_cp.s | 4 +++-
+ src/thread/pthread_cancel.c | 10 ++--------
+ src/thread/sh/syscall_cp.s | 22 +++++++++++-----------
+ src/thread/x32/syscall_cp.s | 4 +++-
+ src/thread/x86_64/syscall_cp.s | 4 +++-
+ 8 files changed, 32 insertions(+), 28 deletions(-)
+
+diff --git a/src/thread/aarch64/syscall_cp.s b/src/thread/aarch64/syscall_cp.s
+index 30e677c..41db68a 100644
+--- a/src/thread/aarch64/syscall_cp.s
++++ b/src/thread/aarch64/syscall_cp.s
+@@ -17,7 +17,7 @@
+ __syscall_cp_asm:
+ __cp_begin:
+ ldr w0,[x0]
+- cbnz w0,1f
++ cbnz w0,__cp_cancel
+ mov x8,x1
+ mov x0,x2
+ mov x1,x3
+@@ -28,6 +28,5 @@ __cp_begin:
+ svc 0
+ __cp_end:
+ ret
+-
+- // cbnz might not be able to jump far enough
+-1: b __cancel
++__cp_cancel:
++ b __cancel
+diff --git a/src/thread/microblaze/syscall_cp.s b/src/thread/microblaze/syscall_cp.s
+index 51599c9..b0df61c 100644
+--- a/src/thread/microblaze/syscall_cp.s
++++ b/src/thread/microblaze/syscall_cp.s
+@@ -11,7 +11,7 @@
+ __syscall_cp_asm:
+ __cp_begin:
+ lwi r5, r5, 0
+- bnei r5, __cancel
++ bnei r5, __cp_cancel
+ addi r12, r6, 0
+ add r5, r7, r0
+ add r6, r8, r0
+@@ -23,3 +23,5 @@ __cp_begin:
+ __cp_end:
+ rtsd r15, 8
+ nop
++__cp_cancel:
++ bri __cancel
+diff --git a/src/thread/or1k/syscall_cp.s b/src/thread/or1k/syscall_cp.s
+index 2c0bf0e..7951166 100644
+--- a/src/thread/or1k/syscall_cp.s
++++ b/src/thread/or1k/syscall_cp.s
+@@ -12,7 +12,7 @@ __syscall_cp_asm:
+ __cp_begin:
+ l.lwz r3, 0(r3)
+ l.sfeqi r3, 0
+- l.bnf __cancel
++ l.bnf __cp_cancel
+ l.ori r11, r4, 0
+ l.ori r3, r5, 0
+ l.ori r4, r6, 0
+@@ -24,3 +24,6 @@ __cp_begin:
+ __cp_end:
+ l.jr r9
+ l.nop
++__cp_cancel:
++ l.j __cancel
++ l.nop
+diff --git a/src/thread/powerpc/syscall_cp.s b/src/thread/powerpc/syscall_cp.s
+index 20b5e0a..77f8938 100644
+--- a/src/thread/powerpc/syscall_cp.s
++++ b/src/thread/powerpc/syscall_cp.s
+@@ -38,7 +38,7 @@ __cp_begin:
+ cmpwi cr7, 0, 0 #compare r0 with 0, store result in cr7.
+ beq+ cr7, 1f #jump to label 1 if r0 was 0
+
+- b __cancel #else call cancel
++ b __cp_cancel #else call cancel
+ 1:
+ #ok, the cancel flag was not set
+ # syscall: number goes to r0, the rest 3-8
+@@ -55,3 +55,5 @@ __cp_end:
+ #else negate result.
+ neg 3, 3
+ blr
++__cp_cancel:
++ b __cancel
+diff --git a/src/thread/pthread_cancel.c b/src/thread/pthread_cancel.c
+index 6eaf72c..c4631f0 100644
+--- a/src/thread/pthread_cancel.c
++++ b/src/thread/pthread_cancel.c
+@@ -7,7 +7,7 @@
+ #ifdef SHARED
+ __attribute__((__visibility__("hidden")))
+ #endif
+-long __cancel(), __cp_cancel(), __syscall_cp_asm(), __syscall_cp_c();
++long __cancel(), __syscall_cp_asm(), __syscall_cp_c();
+
+ long __cancel()
+ {
+@@ -18,12 +18,6 @@ long __cancel()
+ return -ECANCELED;
+ }
+
+-/* If __syscall_cp_asm has adjusted the stack pointer, it must provide a
+- * definition of __cp_cancel to undo those adjustments and call __cancel.
+- * Otherwise, __cancel provides a definition for __cp_cancel. */
+-
+-weak_alias(__cancel, __cp_cancel);
+-
+ long __syscall_cp_asm(volatile void *, syscall_arg_t,
+ syscall_arg_t, syscall_arg_t, syscall_arg_t,
+ syscall_arg_t, syscall_arg_t, syscall_arg_t);
+@@ -56,7 +50,7 @@ static void _sigaddset(sigset_t *set, int sig)
+ #ifdef SHARED
+ __attribute__((__visibility__("hidden")))
+ #endif
+-extern const char __cp_begin[1], __cp_end[1];
++extern const char __cp_begin[1], __cp_end[1], __cp_cancel[1];
+
+ static void cancel_handler(int sig, siginfo_t *si, void *ctx)
+ {
+diff --git a/src/thread/sh/syscall_cp.s b/src/thread/sh/syscall_cp.s
+index c3cafac..bb848ef 100644
+--- a/src/thread/sh/syscall_cp.s
++++ b/src/thread/sh/syscall_cp.s
+@@ -14,17 +14,8 @@ __syscall_cp_asm:
+ __cp_begin:
+ mov.l @r4, r4
+ tst r4, r4
+- bt 2f
+-
+- mov.l L1, r0
+- braf r0
+- nop
+-1:
+-
+-.align 2
+-L1: .long __cancel@PLT-(1b-.)
+-
+-2: mov r5, r3
++ bf __cp_cancel
++ mov r5, r3
+ mov r6, r4
+ mov r7, r5
+ mov.l @r15, r6
+@@ -43,3 +34,12 @@ __cp_end:
+
+ rts
+ nop
++
++__cp_cancel:
++ mov.l 2f, r0
++ braf r0
++ nop
++1:
++
++.align 2
++2: .long __cancel@PCREL-(1b-.)
+diff --git a/src/thread/x32/syscall_cp.s b/src/thread/x32/syscall_cp.s
+index 79709a5..9805af0 100644
+--- a/src/thread/x32/syscall_cp.s
++++ b/src/thread/x32/syscall_cp.s
+@@ -14,7 +14,7 @@ __syscall_cp_internal:
+ __cp_begin:
+ mov (%rdi),%eax
+ test %eax,%eax
+- jnz __cancel
++ jnz __cp_cancel
+ mov %rdi,%r11
+ mov %rsi,%rax
+ mov %rdx,%rdi
+@@ -27,3 +27,5 @@ __cp_begin:
+ syscall
+ __cp_end:
+ ret
++__cp_cancel:
++ jmp __cancel
+diff --git a/src/thread/x86_64/syscall_cp.s b/src/thread/x86_64/syscall_cp.s
+index 1a0fd5d..4f10171 100644
+--- a/src/thread/x86_64/syscall_cp.s
++++ b/src/thread/x86_64/syscall_cp.s
+@@ -14,7 +14,7 @@ __syscall_cp_asm:
+ __cp_begin:
+ mov (%rdi),%eax
+ test %eax,%eax
+- jnz __cancel
++ jnz __cp_cancel
+ mov %rdi,%r11
+ mov %rsi,%rax
+ mov %rdx,%rdi
+@@ -27,3 +27,5 @@ __cp_begin:
+ syscall
+ __cp_end:
+ ret
++__cp_cancel:
++ jmp __cancel
+--
+2.7.0
+
diff --git a/main/musl/0006-prevent-allocs-than-PTRDIFF_MAX-via-mremap.patch b/main/musl/0006-prevent-allocs-than-PTRDIFF_MAX-via-mremap.patch
new file mode 100644
index 0000000000..d373ac9114
--- /dev/null
+++ b/main/musl/0006-prevent-allocs-than-PTRDIFF_MAX-via-mremap.patch
@@ -0,0 +1,39 @@
+From f9ecb6bfa1dc9f93a10dad97a158e6b8334c586c Mon Sep 17 00:00:00 2001
+From: Daniel Micay <danielmicay@gmail.com>
+Date: Sat, 31 Oct 2015 05:14:45 -0400
+Subject: [PATCH] prevent allocs than PTRDIFF_MAX via mremap
+
+It's quite feasible for this to happen via MREMAP_MAYMOVE.
+---
+ src/mman/mremap.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/src/mman/mremap.c b/src/mman/mremap.c
+index 596c45f..1096ace 100644
+--- a/src/mman/mremap.c
++++ b/src/mman/mremap.c
+@@ -1,5 +1,7 @@
+ #include <unistd.h>
+ #include <sys/mman.h>
++#include <errno.h>
++#include <stdint.h>
+ #include <stdarg.h>
+ #include "syscall.h"
+ #include "libc.h"
+@@ -8,7 +10,12 @@ void *__mremap(void *old_addr, size_t old_len, size_t new_len, int flags, ...)
+ {
+ va_list ap;
+ void *new_addr;
+-
++
++ if (new_len >= PTRDIFF_MAX) {
++ errno = ENOMEM;
++ return MAP_FAILED;
++ }
++
+ va_start(ap, flags);
+ new_addr = va_arg(ap, void *);
+ va_end(ap);
+--
+2.7.0
+
diff --git a/main/musl/0007-fix-mremap-memory-synchronization-and-use-of-variadi.patch b/main/musl/0007-fix-mremap-memory-synchronization-and-use-of-variadi.patch
new file mode 100644
index 0000000000..f88888f10d
--- /dev/null
+++ b/main/musl/0007-fix-mremap-memory-synchronization-and-use-of-variadi.patch
@@ -0,0 +1,61 @@
+From fda365a53074f97f3213caefe70ea13297acecb2 Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Mon, 2 Nov 2015 16:37:51 -0500
+Subject: [PATCH] fix mremap memory synchronization and use of variadic
+ argument
+
+since mremap with the MREMAP_FIXED flag is an operation that unmaps
+existing mappings, it needs to use the vm lock mechanism to ensure
+that any in-progress synchronization operations using vm identities
+from before the call have finished.
+
+also, the variadic argument was erroneously being read even if the
+MREMAP_FIXED flag was not passed. in practice this didn't break
+anything, but it's UB and in theory LTO could turn it into a hard
+error.
+---
+ src/mman/mremap.c | 15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+diff --git a/src/mman/mremap.c b/src/mman/mremap.c
+index 1096ace..ce4e8ea 100644
+--- a/src/mman/mremap.c
++++ b/src/mman/mremap.c
+@@ -1,3 +1,4 @@
++#define _GNU_SOURCE
+ #include <unistd.h>
+ #include <sys/mman.h>
+ #include <errno.h>
+@@ -6,19 +7,25 @@
+ #include "syscall.h"
+ #include "libc.h"
+
++static void dummy(void) { }
++weak_alias(dummy, __vm_wait);
++
+ void *__mremap(void *old_addr, size_t old_len, size_t new_len, int flags, ...)
+ {
+ va_list ap;
+- void *new_addr;
++ void *new_addr = 0;
+
+ if (new_len >= PTRDIFF_MAX) {
+ errno = ENOMEM;
+ return MAP_FAILED;
+ }
+
+- va_start(ap, flags);
+- new_addr = va_arg(ap, void *);
+- va_end(ap);
++ if (flags & MREMAP_FIXED) {
++ __vm_wait();
++ va_start(ap, flags);
++ new_addr = va_arg(ap, void *);
++ va_end(ap);
++ }
+
+ return (void *)syscall(SYS_mremap, old_addr, old_len, new_len, flags, new_addr);
+ }
+--
+2.7.0
+
diff --git a/main/musl/0008-have-configure-check-add-ffunction-sections-and-fdat.patch b/main/musl/0008-have-configure-check-add-ffunction-sections-and-fdat.patch
new file mode 100644
index 0000000000..d74f5bd10f
--- /dev/null
+++ b/main/musl/0008-have-configure-check-add-ffunction-sections-and-fdat.patch
@@ -0,0 +1,50 @@
+From 27c1eccf33ce5cb7508ef5e541daa9b6441b4a51 Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Wed, 4 Nov 2015 13:24:11 -0500
+Subject: [PATCH] have configure check/add -ffunction-sections and
+ -fdata-sections
+
+based on patch by Denys Vlasenko. the original intent for using these
+options was to enable linking optimizations. these are immediately
+available for static linking applications to libc.a, and will also be
+used for linking libc.so in a subsequent commit.
+
+in addition to the original motives, this change works around a whole
+class of toolchain bugs where the compiler generates relative address
+expressions using a weak symbol and the assembler "optimizes out" the
+relocation which should result by using the weak definition. (see gas
+pr 18561 and gcc pr 66609, 68178, etc. for examples.) by having
+different functions and data objects in their own sections, all
+relative address expressions are cross-section and thus cannot be
+resolved to constants until link time. this allows us to retain
+support for affected compiler/assembler versions without invasive
+and fragile source-level workarounds.
+---
+ configure | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/configure b/configure
+index 3e536f5..1e5c4b3 100755
+--- a/configure
++++ b/configure
+@@ -437,6 +437,17 @@ tryflag CFLAGS_AUTO -fno-unwind-tables
+ tryflag CFLAGS_AUTO -fno-asynchronous-unwind-tables
+
+ #
++# Attempt to put each function and each data object in its own
++# section. This both allows additional size optimizations at link
++# time and works around a dangerous class of compiler/assembler bugs
++# whereby relative address expressions are constant-folded by the
++# assembler even when one or more of the symbols involved is
++# replaceable. See gas pr 18561 and gcc pr 66609, 68178, etc.
++#
++tryflag CFLAGS_AUTO -ffunction-sections
++tryflag CFLAGS_AUTO -fdata-sections
++
++#
+ # On x86, make sure we don't have incompatible instruction set
+ # extensions enabled by default. This is bad for making static binaries.
+ # We cheat and use i486 rather than i386 because i386 really does not
+--
+2.7.0
+
diff --git a/main/musl/0009-have-configure-check-add-linker-options-to-reduce-si.patch b/main/musl/0009-have-configure-check-add-linker-options-to-reduce-si.patch
new file mode 100644
index 0000000000..a9307e62d9
--- /dev/null
+++ b/main/musl/0009-have-configure-check-add-linker-options-to-reduce-si.patch
@@ -0,0 +1,33 @@
+From 2efd38e8c70f00ca6bbc1eb5199aa507d45436cf Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Wed, 4 Nov 2015 21:39:13 -0500
+Subject: [PATCH] have configure check/add linker options to reduce size lost
+ to padding
+
+based on patch by Denys Vlasenko. sorting sections and common data
+symbols by alignment acts as an approximation for optimal packing,
+which the linker does not actually support.
+---
+ configure | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/configure b/configure
+index 1e5c4b3..d04c860 100755
+--- a/configure
++++ b/configure
+@@ -515,6 +515,12 @@ CFLAGS_AUTO="$CFLAGS_AUTO -include vis.h"
+ CFLAGS_AUTO="${CFLAGS_AUTO# }"
+ fi
+
++# Reduce space lost to padding for alignment purposes by sorting data
++# objects according to their alignment reqirements. This approximates
++# optimal packing.
++tryldflag LDFLAGS_AUTO -Wl,--sort-section,alignment
++tryldflag LDFLAGS_AUTO -Wl,--sort-common
++
+ # Some patched GCC builds have these defaults messed up...
+ tryldflag LDFLAGS_AUTO -Wl,--hash-style=both
+
+--
+2.7.0
+
diff --git a/main/musl/0010-have-configure-check-add-gc-sections-linker-option.patch b/main/musl/0010-have-configure-check-add-gc-sections-linker-option.patch
new file mode 100644
index 0000000000..a9549a2a61
--- /dev/null
+++ b/main/musl/0010-have-configure-check-add-gc-sections-linker-option.patch
@@ -0,0 +1,32 @@
+From 6a851e3ab8a1ae524b2aa6218615ec1c86528e9c Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Wed, 4 Nov 2015 21:40:36 -0500
+Subject: [PATCH] have configure check/add --gc-sections linker option
+
+this allowing the linker to drop certain weak definitions that are
+only used as dummies for static linking. they could be eliminated for
+shared library builds using the preprocessor instead, but we are
+trying to transition to using the same object files for shared and
+static libc, so a link-time solution is preferable.
+---
+ configure | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/configure b/configure
+index d04c860..dece1d0 100755
+--- a/configure
++++ b/configure
+@@ -521,6 +521,10 @@ fi
+ tryldflag LDFLAGS_AUTO -Wl,--sort-section,alignment
+ tryldflag LDFLAGS_AUTO -Wl,--sort-common
+
++# When linking shared library, drop dummy weak definitions that were
++# replaced by strong definitions from other translation units.
++tryldflag LDFLAGS_AUTO -Wl,--gc-sections
++
+ # Some patched GCC builds have these defaults messed up...
+ tryldflag LDFLAGS_AUTO -Wl,--hash-style=both
+
+--
+2.7.0
+
diff --git a/main/musl/0011-work-around-toolchains-with-broken-visibility-in-lib.patch b/main/musl/0011-work-around-toolchains-with-broken-visibility-in-lib.patch
new file mode 100644
index 0000000000..d871e8b991
--- /dev/null
+++ b/main/musl/0011-work-around-toolchains-with-broken-visibility-in-lib.patch
@@ -0,0 +1,29 @@
+From ea1e2c5e18dd0790fb9b2af2bd947f4981736dc2 Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Sat, 7 Nov 2015 20:23:49 -0500
+Subject: [PATCH] work around toolchains with broken visibility in
+ libgcc/libpcc
+
+---
+ configure | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/configure b/configure
+index dece1d0..ee21771 100755
+--- a/configure
++++ b/configure
+@@ -534,6 +534,11 @@ tryldflag LDFLAGS_AUTO -Wl,--hash-style=both
+ # runtime library; implementation error is also a possibility.
+ tryldflag LDFLAGS_AUTO -Wl,--no-undefined
+
++# Avoid exporting symbols from compiler runtime libraries. They
++# should be hidden anyway, but some toolchains including old gcc
++# versions built without shared library support and pcc are broken.
++tryldflag LDFLAGS_AUTO -Wl,--exclude-libs=ALL
++
+ test "$shared" = "no" || {
+ # Disable dynamic linking if ld is broken and can't do -Bsymbolic-functions
+ LDFLAGS_DUMMY=
+--
+2.7.0
+
diff --git a/main/musl/0012-fix-return-value-of-nl_langinfo-for-invalid-item-arg.patch b/main/musl/0012-fix-return-value-of-nl_langinfo-for-invalid-item-arg.patch
new file mode 100644
index 0000000000..69a17689de
--- /dev/null
+++ b/main/musl/0012-fix-return-value-of-nl_langinfo-for-invalid-item-arg.patch
@@ -0,0 +1,46 @@
+From a946e8117ed51dd771bd8cac3575fc28a0399a32 Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Tue, 10 Nov 2015 23:07:17 -0500
+Subject: [PATCH] fix return value of nl_langinfo for invalid item arguments
+
+it was wrongly returning a null pointer instead of an empty string.
+---
+ src/locale/langinfo.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/locale/langinfo.c b/src/locale/langinfo.c
+index d3c90d9..b2c8569 100644
+--- a/src/locale/langinfo.c
++++ b/src/locale/langinfo.c
+@@ -37,23 +37,23 @@ char *__nl_langinfo_l(nl_item item, locale_t loc)
+
+ switch (cat) {
+ case LC_NUMERIC:
+- if (idx > 1) return NULL;
++ if (idx > 1) return "";
+ str = c_numeric;
+ break;
+ case LC_TIME:
+- if (idx > 0x31) return NULL;
++ if (idx > 0x31) return "";
+ str = c_time;
+ break;
+ case LC_MONETARY:
+- if (idx > 0) return NULL;
++ if (idx > 0) return "";
+ str = "";
+ break;
+ case LC_MESSAGES:
+- if (idx > 3) return NULL;
++ if (idx > 3) return "";
+ str = c_messages;
+ break;
+ default:
+- return NULL;
++ return "";
+ }
+
+ for (; idx; idx--, str++) for (; *str; str++);
+--
+2.7.0
+
diff --git a/main/musl/0013-math-explicitly-promote-expressions-to-excess-precis.patch b/main/musl/0013-math-explicitly-promote-expressions-to-excess-precis.patch
new file mode 100644
index 0000000000..c98d9b52b7
--- /dev/null
+++ b/main/musl/0013-math-explicitly-promote-expressions-to-excess-precis.patch
@@ -0,0 +1,84 @@
+From 8eead3ef18ea71a64ef3cbff8c09bac3b82f1242 Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Sat, 21 Nov 2015 21:23:30 +0000
+Subject: [PATCH] math: explicitly promote expressions to excess-precision
+ types
+
+a conforming compiler for an arch with excess precision floating point
+(FLT_EVAL_METHOD!=0; presently i386 is the only such arch supported)
+computes all intermediate results in the types float_t and double_t
+rather than the nominal type of the expression. some incorrect
+compilers, however, only keep excess precision in registers, and
+convert down to the nominal type when spilling intermediate results to
+memory, yielding unpredictable results that depend on the compiler's
+choices of what/when to spill. in particular, this happens on old gcc
+versions with -ffloat-store, which we need in order to work around
+bugs where the compiler wrongly keeps explicitly-dropped excess
+precision.
+
+by explicitly converting to double_t where expressions are expected be
+be evaluated in double_t precision, we can avoid depending on the
+compiler to get types correct when spilling; the nominal and
+intermediate precision now match. this commit should not change the
+code generated by correct compilers, or by old ones on non-i386 archs
+where double_t is defined as double.
+
+this fixes a serious bug in argument reduction observed on i386 with
+gcc 4.2: for values of x outside the unit circle, sin(x) was producing
+results outside the interval [-1,1]. changes made in commit
+0ce946cf808274c2d6e5419b139e130c8ad4bd30 were likely responsible for
+breaking compatibility with this and other old gcc versions.
+
+patch by Szabolcs Nagy.
+---
+ src/math/__rem_pio2.c | 2 +-
+ src/math/__rem_pio2f.c | 2 +-
+ src/math/hypot.c | 4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/math/__rem_pio2.c b/src/math/__rem_pio2.c
+index a40db9f..d403f81 100644
+--- a/src/math/__rem_pio2.c
++++ b/src/math/__rem_pio2.c
+@@ -118,7 +118,7 @@ int __rem_pio2(double x, double *y)
+ if (ix < 0x413921fb) { /* |x| ~< 2^20*(pi/2), medium size */
+ medium:
+ /* rint(x/(pi/2)), Assume round-to-nearest. */
+- fn = x*invpio2 + toint - toint;
++ fn = (double_t)x*invpio2 + toint - toint;
+ n = (int32_t)fn;
+ r = x - fn*pio2_1;
+ w = fn*pio2_1t; /* 1st round, good to 85 bits */
+diff --git a/src/math/__rem_pio2f.c b/src/math/__rem_pio2f.c
+index f516385..4473c1c 100644
+--- a/src/math/__rem_pio2f.c
++++ b/src/math/__rem_pio2f.c
+@@ -51,7 +51,7 @@ int __rem_pio2f(float x, double *y)
+ /* 25+53 bit pi is good enough for medium size */
+ if (ix < 0x4dc90fdb) { /* |x| ~< 2^28*(pi/2), medium size */
+ /* Use a specialized rint() to get fn. Assume round-to-nearest. */
+- fn = x*invpio2 + toint - toint;
++ fn = (double_t)x*invpio2 + toint - toint;
+ n = (int32_t)fn;
+ *y = x - fn*pio2_1 - fn*pio2_1t;
+ return n;
+diff --git a/src/math/hypot.c b/src/math/hypot.c
+index 29ec6a4..6071bf1 100644
+--- a/src/math/hypot.c
++++ b/src/math/hypot.c
+@@ -12,10 +12,10 @@ static void sq(double_t *hi, double_t *lo, double x)
+ {
+ double_t xh, xl, xc;
+
+- xc = x*SPLIT;
++ xc = (double_t)x*SPLIT;
+ xh = x - xc + xc;
+ xl = x - xh;
+- *hi = x*x;
++ *hi = (double_t)x*x;
+ *lo = xh*xh - *hi + 2*xh*xl + xl*xl;
+ }
+
+--
+2.7.0
+
diff --git a/main/musl/0014-ldso-fix-the-dtv-update-logic-in-__tls_get_new.patch b/main/musl/0014-ldso-fix-the-dtv-update-logic-in-__tls_get_new.patch
new file mode 100644
index 0000000000..852cc46732
--- /dev/null
+++ b/main/musl/0014-ldso-fix-the-dtv-update-logic-in-__tls_get_new.patch
@@ -0,0 +1,34 @@
+From 12978acb3066db738c8c15121e81adbb63739876 Mon Sep 17 00:00:00 2001
+From: Szabolcs Nagy <nsz@port70.net>
+Date: Thu, 26 Nov 2015 19:59:46 +0100
+Subject: [PATCH] ldso: fix the dtv update logic in __tls_get_new
+
+if two or more threads accessed tls in a dso that was loaded after
+the threads were created, then __tls_get_new could do out-of-bound
+memory access (leading to segfault).
+
+accidentally byte count was used instead of element count when
+the new dtv pointer was computed. (dso->new_dtv is (void**).)
+
+it is rare that the same dso provides dtv for several threads,
+the crash was not observed in practice, but possible to trigger.
+---
+ src/ldso/dynlink.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c
+index 4648e9a..93e7d67 100644
+--- a/src/ldso/dynlink.c
++++ b/src/ldso/dynlink.c
+@@ -1280,7 +1280,7 @@ void *__tls_get_new(size_t *v)
+ /* Get new DTV space from new DSO if needed */
+ if (v[0] > (size_t)self->dtv[0]) {
+ void **newdtv = p->new_dtv +
+- (v[0]+1)*sizeof(void *)*a_fetch_add(&p->new_dtv_idx,1);
++ (v[0]+1)*a_fetch_add(&p->new_dtv_idx,1);
+ memcpy(newdtv, self->dtv,
+ ((size_t)self->dtv[0]+1) * sizeof(void *));
+ newdtv[0] = (void *)v[0];
+--
+2.7.0
+
diff --git a/main/musl/0015-properly-handle-point-to-point-interfaces-in-getifad.patch b/main/musl/0015-properly-handle-point-to-point-interfaces-in-getifad.patch
new file mode 100644
index 0000000000..88279d07f9
--- /dev/null
+++ b/main/musl/0015-properly-handle-point-to-point-interfaces-in-getifad.patch
@@ -0,0 +1,59 @@
+From 7b712844e38bdfc1ef728e257fb8616c16ec4cc8 Mon Sep 17 00:00:00 2001
+From: Jo-Philipp Wich <jow@openwrt.org>
+Date: Thu, 19 Nov 2015 21:43:10 +0100
+Subject: [PATCH] properly handle point-to-point interfaces in getifaddrs()
+
+With point-to-point interfaces, the IFA_ADDRESS netlink attribute
+contains the peer address while an extra attribute IFA_LOCAL carries
+the actual local interface address.
+
+Both the glibc and uclibc implementations of getifaddrs() handle this
+case by moving the ifa_addr contents to the broadcast/remote address
+union and overwriting ifa_addr upon receipt of an IFA_LOCAL attribute.
+
+This patch adds the same special treatment logic of IFA_LOCAL to
+musl's implementation of getifaddrs() in order to align its behaviour
+with that of uclibc and glibc.
+
+Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
+---
+ src/network/getifaddrs.c | 19 ++++++++++++++++---
+ 1 file changed, 16 insertions(+), 3 deletions(-)
+
+diff --git a/src/network/getifaddrs.c b/src/network/getifaddrs.c
+index 89a8f72..fed75bd 100644
+--- a/src/network/getifaddrs.c
++++ b/src/network/getifaddrs.c
+@@ -162,13 +162,26 @@ static int netlink_msg_to_ifaddr(void *pctx, struct nlmsghdr *h)
+ for (rta = NLMSG_RTA(h, sizeof(*ifa)); NLMSG_RTAOK(rta, h); rta = RTA_NEXT(rta)) {
+ switch (rta->rta_type) {
+ case IFA_ADDRESS:
+- copy_addr(&ifs->ifa.ifa_addr, ifa->ifa_family, &ifs->addr, RTA_DATA(rta), RTA_DATALEN(rta), ifa->ifa_index);
++ /* If ifa_addr is already set we, received an IFA_LOCAL before
++ * so treat this as destination address */
++ if (ifs->ifa.ifa_addr)
++ copy_addr(&ifs->ifa.ifa_dstaddr, ifa->ifa_family, &ifs->ifu, RTA_DATA(rta), RTA_DATALEN(rta), ifa->ifa_index);
++ else
++ copy_addr(&ifs->ifa.ifa_addr, ifa->ifa_family, &ifs->addr, RTA_DATA(rta), RTA_DATALEN(rta), ifa->ifa_index);
+ break;
+ case IFA_BROADCAST:
+- /* For point-to-point links this is peer, but ifa_broadaddr
+- * and ifa_dstaddr are union, so this works for both. */
+ copy_addr(&ifs->ifa.ifa_broadaddr, ifa->ifa_family, &ifs->ifu, RTA_DATA(rta), RTA_DATALEN(rta), ifa->ifa_index);
+ break;
++ case IFA_LOCAL:
++ /* If ifa_addr is set and we get IFA_LOCAL, assume we have
++ * a point-to-point network. Move address to correct field. */
++ if (ifs->ifa.ifa_addr) {
++ ifs->ifu = ifs->addr;
++ ifs->ifa.ifa_dstaddr = &ifs->ifu.sa;
++ memset(&ifs->addr, 0, sizeof(ifs->addr));
++ }
++ copy_addr(&ifs->ifa.ifa_addr, ifa->ifa_family, &ifs->addr, RTA_DATA(rta), RTA_DATALEN(rta), ifa->ifa_index);
++ break;
+ case IFA_LABEL:
+ if (RTA_DATALEN(rta) < sizeof(ifs->name)) {
+ memcpy(ifs->name, RTA_DATA(rta), RTA_DATALEN(rta));
+--
+2.7.0
+
diff --git a/main/musl/0016-fix-tdelete-to-properly-balance-the-tree.patch b/main/musl/0016-fix-tdelete-to-properly-balance-the-tree.patch
new file mode 100644
index 0000000000..bb3c79cfbf
--- /dev/null
+++ b/main/musl/0016-fix-tdelete-to-properly-balance-the-tree.patch
@@ -0,0 +1,53 @@
+From e4f9d811684011d8a67e363827de39d5f2d3ae5a Mon Sep 17 00:00:00 2001
+From: Szabolcs Nagy <nsz@port70.net>
+Date: Sat, 5 Dec 2015 21:02:34 +0100
+Subject: [PATCH] fix tdelete to properly balance the tree
+
+the tsearch data structure is an avl tree, but it did not implement
+the deletion operation correctly so the tree could become unbalanced.
+
+reported by Ed Schouten.
+---
+ src/search/tsearch_avl.c | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
+
+diff --git a/src/search/tsearch_avl.c b/src/search/tsearch_avl.c
+index 8620092..0864460 100644
+--- a/src/search/tsearch_avl.c
++++ b/src/search/tsearch_avl.c
+@@ -105,10 +105,13 @@ static struct node *insert(struct node **n, const void *k,
+ return r;
+ }
+
+-static struct node *movr(struct node *n, struct node *r) {
+- if (!n)
+- return r;
+- n->right = movr(n->right, r);
++static struct node *remove_rightmost(struct node *n, struct node **rightmost)
++{
++ if (!n->right) {
++ *rightmost = n;
++ return n->left;
++ }
++ n->right = remove_rightmost(n->right, rightmost);
+ return balance(n);
+ }
+
+@@ -122,7 +125,13 @@ static struct node *remove(struct node **n, const void *k,
+ c = cmp(k, (*n)->key);
+ if (c == 0) {
+ struct node *r = *n;
+- *n = movr(r->left, r->right);
++ if (r->left) {
++ r->left = remove_rightmost(r->left, n);
++ (*n)->left = r->left;
++ (*n)->right = r->right;
++ *n = balance(*n);
++ } else
++ *n = r->right;
+ free(r);
+ return parent;
+ }
+--
+2.7.0
+
diff --git a/main/musl/0017-fix-tsearch-to-avoid-crash-on-oom.patch b/main/musl/0017-fix-tsearch-to-avoid-crash-on-oom.patch
new file mode 100644
index 0000000000..135d365ad9
--- /dev/null
+++ b/main/musl/0017-fix-tsearch-to-avoid-crash-on-oom.patch
@@ -0,0 +1,28 @@
+From bc9744763afe72d626e7b9f461001d425582fe9c Mon Sep 17 00:00:00 2001
+From: Szabolcs Nagy <nsz@port70.net>
+Date: Sat, 5 Dec 2015 21:04:18 +0100
+Subject: [PATCH] fix tsearch to avoid crash on oom
+
+malloc failure was not properly propagated in the insertion method
+which led to null pointer dereference.
+---
+ src/search/tsearch_avl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/search/tsearch_avl.c b/src/search/tsearch_avl.c
+index 0864460..8c2f347 100644
+--- a/src/search/tsearch_avl.c
++++ b/src/search/tsearch_avl.c
+@@ -89,8 +89,8 @@ static struct node *insert(struct node **n, const void *k,
+ r->key = k;
+ r->left = r->right = 0;
+ r->height = 1;
++ *new = 1;
+ }
+- *new = 1;
+ return r;
+ }
+ c = cmp(k, r->key);
+--
+2.7.0
+
diff --git a/main/musl/0018-tsearch-code-cleanup.patch b/main/musl/0018-tsearch-code-cleanup.patch
new file mode 100644
index 0000000000..261b32553b
--- /dev/null
+++ b/main/musl/0018-tsearch-code-cleanup.patch
@@ -0,0 +1,90 @@
+From 8994908b199a57097f420707b1fca75fc30236fa Mon Sep 17 00:00:00 2001
+From: Szabolcs Nagy <nsz@port70.net>
+Date: Sat, 5 Dec 2015 21:06:02 +0100
+Subject: [PATCH] tsearch code cleanup
+
+changed the insertion method to simplify the recursion logic and
+reduce code size a bit.
+---
+ src/search/tsearch_avl.c | 52 ++++++++++++++++++++++++++----------------------
+ 1 file changed, 28 insertions(+), 24 deletions(-)
+
+diff --git a/src/search/tsearch_avl.c b/src/search/tsearch_avl.c
+index 8c2f347..e4fb131 100644
+--- a/src/search/tsearch_avl.c
++++ b/src/search/tsearch_avl.c
+@@ -77,31 +77,35 @@ static struct node *find(struct node *n, const void *k,
+ return find(n->right, k, cmp);
+ }
+
+-static struct node *insert(struct node **n, const void *k,
+- int (*cmp)(const void *, const void *), int *new)
++static struct node *insert(struct node *n, const void *k,
++ int (*cmp)(const void *, const void *), struct node **found)
+ {
+- struct node *r = *n;
++ struct node *r;
+ int c;
+
+- if (!r) {
+- *n = r = malloc(sizeof **n);
+- if (r) {
+- r->key = k;
+- r->left = r->right = 0;
+- r->height = 1;
+- *new = 1;
++ if (!n) {
++ n = malloc(sizeof *n);
++ if (n) {
++ n->key = k;
++ n->left = n->right = 0;
++ n->height = 1;
+ }
+- return r;
++ *found = n;
++ return n;
++ }
++ c = cmp(k, n->key);
++ if (c == 0) {
++ *found = n;
++ return 0;
++ }
++ r = insert(c < 0 ? n->left : n->right, k, cmp, found);
++ if (r) {
++ if (c < 0)
++ n->left = r;
++ else
++ n->right = r;
++ r = balance(n);
+ }
+- c = cmp(k, r->key);
+- if (c == 0)
+- return r;
+- if (c < 0)
+- r = insert(&r->left, k, cmp, new);
+- else
+- r = insert(&r->right, k, cmp, new);
+- if (*new)
+- *n = balance(*n);
+ return r;
+ }
+
+@@ -165,11 +169,11 @@ void *tfind(const void *key, void *const *rootp,
+ void *tsearch(const void *key, void **rootp,
+ int (*compar)(const void *, const void *))
+ {
+- int new = 0;
+- struct node *n = *rootp;
++ struct node *update;
+ struct node *ret;
+- ret = insert(&n, key, compar, &new);
+- *rootp = n;
++ update = insert(*rootp, key, compar, &ret);
++ if (update)
++ *rootp = update;
+ return ret;
+ }
+
+--
+2.7.0
+
diff --git a/main/musl/0019-fix-tsearch-tfind-tdelete-to-handle-null-pointer-inp.patch b/main/musl/0019-fix-tsearch-tfind-tdelete-to-handle-null-pointer-inp.patch
new file mode 100644
index 0000000000..a6ea0ad753
--- /dev/null
+++ b/main/musl/0019-fix-tsearch-tfind-tdelete-to-handle-null-pointer-inp.patch
@@ -0,0 +1,45 @@
+From 3abb094d19ca4c7c4adcf373d971fb5aa05c5252 Mon Sep 17 00:00:00 2001
+From: Szabolcs Nagy <nsz@port70.net>
+Date: Sat, 5 Dec 2015 21:53:59 +0100
+Subject: [PATCH] fix tsearch, tfind, tdelete to handle null pointer input
+
+POSIX specifies the behaviour for null rootp input, but it
+was not implemented correctly.
+---
+ src/search/tsearch_avl.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/search/tsearch_avl.c b/src/search/tsearch_avl.c
+index e4fb131..57194c8 100644
+--- a/src/search/tsearch_avl.c
++++ b/src/search/tsearch_avl.c
+@@ -151,6 +151,8 @@ static struct node *remove(struct node **n, const void *k,
+ void *tdelete(const void *restrict key, void **restrict rootp,
+ int(*compar)(const void *, const void *))
+ {
++ if (!rootp)
++ return 0;
+ struct node *n = *rootp;
+ struct node *ret;
+ /* last argument is arbitrary non-null pointer
+@@ -163,6 +165,8 @@ void *tdelete(const void *restrict key, void **restrict rootp,
+ void *tfind(const void *key, void *const *rootp,
+ int(*compar)(const void *, const void *))
+ {
++ if (!rootp)
++ return 0;
+ return find(*rootp, key, compar);
+ }
+
+@@ -171,6 +175,8 @@ void *tsearch(const void *key, void **rootp,
+ {
+ struct node *update;
+ struct node *ret;
++ if (!rootp)
++ return 0;
+ update = insert(*rootp, key, compar, &ret);
+ if (update)
+ *rootp = update;
+--
+2.7.0
+
diff --git a/main/musl/0020-fix-crash-when-signal-number-0-is-passed-to-sigactio.patch b/main/musl/0020-fix-crash-when-signal-number-0-is-passed-to-sigactio.patch
new file mode 100644
index 0000000000..89c9c40394
--- /dev/null
+++ b/main/musl/0020-fix-crash-when-signal-number-0-is-passed-to-sigactio.patch
@@ -0,0 +1,39 @@
+From 42216742cd69e52e70aeb1d14498a8145872de52 Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Tue, 15 Dec 2015 23:20:36 -0500
+Subject: [PATCH] fix crash when signal number 0 is passed to sigaction
+
+this error case was overlooked in the old range checking logic. new
+check is moved out of __libc_sigaction to the public wrapper in order
+to unify the error path and reduce code size.
+---
+ src/signal/sigaction.c | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/src/signal/sigaction.c b/src/signal/sigaction.c
+index ab23a6f..6eca06f 100644
+--- a/src/signal/sigaction.c
++++ b/src/signal/sigaction.c
+@@ -17,10 +17,6 @@ void __get_handler_set(sigset_t *set)
+ int __libc_sigaction(int sig, const struct sigaction *restrict sa, struct sigaction *restrict old)
+ {
+ struct k_sigaction ksa, ksa_old;
+- if (sig >= (unsigned)_NSIG) {
+- errno = EINVAL;
+- return -1;
+- }
+ if (sa) {
+ if ((uintptr_t)sa->sa_handler > 1UL) {
+ a_or_l(handler_set+(sig-1)/(8*sizeof(long)),
+@@ -57,7 +53,7 @@ int __libc_sigaction(int sig, const struct sigaction *restrict sa, struct sigact
+
+ int __sigaction(int sig, const struct sigaction *restrict sa, struct sigaction *restrict old)
+ {
+- if (sig-32U < 3) {
++ if (sig-32U < 3 || sig-1U >= _NSIG-1) {
+ errno = EINVAL;
+ return -1;
+ }
+--
+2.7.0
+
diff --git a/main/musl/0021-avoid-updating-caller-s-size-when-getdelim-fails-to-.patch b/main/musl/0021-avoid-updating-caller-s-size-when-getdelim-fails-to-.patch
new file mode 100644
index 0000000000..ea1d50aeca
--- /dev/null
+++ b/main/musl/0021-avoid-updating-caller-s-size-when-getdelim-fails-to-.patch
@@ -0,0 +1,46 @@
+From d87f0a9a95f0a1228ee5579e5822a8c93bc96823 Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Sat, 19 Dec 2015 23:43:31 -0500
+Subject: [PATCH] avoid updating caller's size when getdelim fails to realloc
+
+getdelim was updating *n, the caller's stored buffer size, before
+calling realloc. if getdelim then failed due to realloc failure, the
+caller would see in *n a value larger than the actual size of the
+allocated block, and use of that value is unsafe. in particular,
+passing it again to getdelim is unsafe.
+
+now, temporary storage is used for the desired new size, and *n is not
+written until realloc succeeds.
+---
+ src/stdio/getdelim.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/src/stdio/getdelim.c b/src/stdio/getdelim.c
+index 3077490..813b09f 100644
+--- a/src/stdio/getdelim.c
++++ b/src/stdio/getdelim.c
+@@ -29,15 +29,16 @@ ssize_t getdelim(char **restrict s, size_t *restrict n, int delim, FILE *restric
+ k = z ? z - f->rpos + 1 : f->rend - f->rpos;
+ if (i+k+1 >= *n) {
+ if (k >= SIZE_MAX/2-i) goto oom;
+- *n = i+k+2;
+- if (*n < SIZE_MAX/4) *n *= 2;
+- tmp = realloc(*s, *n);
++ size_t m = i+k+2;
++ if (m < SIZE_MAX/4) m *= 2;
++ tmp = realloc(*s, m);
+ if (!tmp) {
+- *n = i+k+2;
+- tmp = realloc(*s, *n);
++ m = i+k+2;
++ tmp = realloc(*s, m);
+ if (!tmp) goto oom;
+ }
+ *s = tmp;
++ *n = m;
+ }
+ memcpy(*s+i, f->rpos, k);
+ f->rpos += k;
+--
+2.7.0
+
diff --git a/main/musl/0022-fix-overly-pessimistic-realloc-strategy-in-getdelim.patch b/main/musl/0022-fix-overly-pessimistic-realloc-strategy-in-getdelim.patch
new file mode 100644
index 0000000000..c5aec3cc54
--- /dev/null
+++ b/main/musl/0022-fix-overly-pessimistic-realloc-strategy-in-getdelim.patch
@@ -0,0 +1,46 @@
+From c673158d91ad995ed59dd910777cd6464f61fe8e Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Sun, 20 Dec 2015 00:32:46 -0500
+Subject: [PATCH] fix overly pessimistic realloc strategy in getdelim
+
+previously, getdelim was allocating twice the space needed every time
+it expanded its buffer to implement exponential buffer growth (in
+order to avoid quadratic run time). however, this doubling was
+performed even when the final buffer length needed was already known,
+which is the common case that occurs whenever the delimiter is in the
+FILE's buffer.
+
+this patch makes two changes to remedy the situation:
+
+1. over-allocation is no longer performed if the delimiter has already
+been found when realloc is needed.
+
+2. growth factor is reduced from 2x to 1.5x to reduce the relative
+excess allocation in cases where the delimiter is not initially in the
+buffer, including unbuffered streams.
+
+in theory these changes could lead to quadratic time if the same
+buffer is reused to process a sequence of lines successively
+increasing in length, but once this length exceeds the stdio buffer
+size, the delimiter will not be found in the buffer right away and
+exponential growth will still kick in.
+---
+ src/stdio/getdelim.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/stdio/getdelim.c b/src/stdio/getdelim.c
+index 813b09f..1ccd802 100644
+--- a/src/stdio/getdelim.c
++++ b/src/stdio/getdelim.c
+@@ -30,7 +30,7 @@ ssize_t getdelim(char **restrict s, size_t *restrict n, int delim, FILE *restric
+ if (i+k+1 >= *n) {
+ if (k >= SIZE_MAX/2-i) goto oom;
+ size_t m = i+k+2;
+- if (m < SIZE_MAX/4) m *= 2;
++ if (!z && m < SIZE_MAX/4) m += m/2;
+ tmp = realloc(*s, m);
+ if (!tmp) {
+ m = i+k+2;
+--
+2.7.0
+
diff --git a/main/musl/0023-add-missing-protocols-to-protoent-lookup-functions.patch b/main/musl/0023-add-missing-protocols-to-protoent-lookup-functions.patch
new file mode 100644
index 0000000000..4b22402d82
--- /dev/null
+++ b/main/musl/0023-add-missing-protocols-to-protoent-lookup-functions.patch
@@ -0,0 +1,54 @@
+From d5f8394f6ea9549607567bd92de12a2446c15614 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
+Date: Tue, 5 Jan 2016 16:58:40 +0200
+Subject: [PATCH] add missing protocols to protoent lookup functions
+
+---
+ src/network/proto.c | 17 ++++++++++++++++-
+ 1 file changed, 16 insertions(+), 1 deletion(-)
+
+diff --git a/src/network/proto.c b/src/network/proto.c
+index 43aa17a..a42d145 100644
+--- a/src/network/proto.c
++++ b/src/network/proto.c
+@@ -9,21 +9,36 @@ static const unsigned char protos[] = {
+ "\001icmp\0"
+ "\002igmp\0"
+ "\003ggp\0"
++ "\004ipencap\0"
++ "\005st\0"
+ "\006tcp\0"
++ "\008egp\0"
+ "\014pup\0"
+ "\021udp\0"
+- "\026idp\0"
++ "\024hmp\0"
++ "\026xns-idp\0"
++ "\033rdp\0"
++ "\035iso-tp4\0"
++ "\044xtp\0"
++ "\045ddp\0"
++ "\046idpr-cmtp\0"
+ "\051ipv6\0"
+ "\053ipv6-route\0"
+ "\054ipv6-frag\0"
++ "\055idrp\0"
++ "\056rsvp\0"
+ "\057gre\0"
+ "\062esp\0"
+ "\063ah\0"
++ "\071skip\0"
+ "\072ipv6-icmp\0"
+ "\073ipv6-nonxt\0"
+ "\074ipv6-opts\0"
++ "\111rspf\0"
++ "\121vmtp\0"
+ "\131ospf\0"
+ "\136ipip\0"
++ "\142encap\0"
+ "\147pim\0"
+ "\377raw"
+ };
+--
+2.7.0
+
diff --git a/main/musl/APKBUILD b/main/musl/APKBUILD
index f0691874aa..bb51443abe 100644
--- a/main/musl/APKBUILD
+++ b/main/musl/APKBUILD
@@ -2,7 +2,7 @@
# Maintainer: Timo Teräs <timo.teras@iki.fi>
pkgname=musl
pkgver=1.1.12
-pkgrel=1
+pkgrel=2
pkgdesc="the musl c library (libc) implementation"
url="http://www.musl-libc.org/"
arch="all"
@@ -12,7 +12,29 @@ depends_dev="!uclibc-dev"
makedepends="$depends_dev"
subpackages="$pkgname-dev $pkgname-utils $pkgname-dbg libc6-compat:compat"
source="http://www.musl-libc.org/releases/musl-$pkgver.tar.gz
- fix-single-byte-overflow.patch
+ 0001-fix-single-byte-overflow-of-malloc-d-buffer-in-getde.patch
+ 0002-safely-handle-failure-to-open-hosts-services-resolv..patch
+ 0003-getnameinfo-make-size-check-not-fail-for-bigger-size.patch
+ 0004-properly-access-mcontext_t-program-counter-in-cancel.patch
+ 0005-use-explicit-__cp_cancel-label-in-cancellable-syscal.patch
+ 0006-prevent-allocs-than-PTRDIFF_MAX-via-mremap.patch
+ 0007-fix-mremap-memory-synchronization-and-use-of-variadi.patch
+ 0008-have-configure-check-add-ffunction-sections-and-fdat.patch
+ 0009-have-configure-check-add-linker-options-to-reduce-si.patch
+ 0010-have-configure-check-add-gc-sections-linker-option.patch
+ 0011-work-around-toolchains-with-broken-visibility-in-lib.patch
+ 0012-fix-return-value-of-nl_langinfo-for-invalid-item-arg.patch
+ 0013-math-explicitly-promote-expressions-to-excess-precis.patch
+ 0014-ldso-fix-the-dtv-update-logic-in-__tls_get_new.patch
+ 0015-properly-handle-point-to-point-interfaces-in-getifad.patch
+ 0016-fix-tdelete-to-properly-balance-the-tree.patch
+ 0017-fix-tsearch-to-avoid-crash-on-oom.patch
+ 0018-tsearch-code-cleanup.patch
+ 0019-fix-tsearch-tfind-tdelete-to-handle-null-pointer-inp.patch
+ 0020-fix-crash-when-signal-number-0-is-passed-to-sigactio.patch
+ 0021-avoid-updating-caller-s-size-when-getdelim-fails-to-.patch
+ 0022-fix-overly-pessimistic-realloc-strategy-in-getdelim.patch
+ 0023-add-missing-protocols-to-protoent-lookup-functions.patch
ldconfig
__stack_chk_fail_local.c
@@ -129,21 +151,87 @@ compat() {
}
md5sums="42875e0c111aa1cb9d08663f8d42c799 musl-1.1.12.tar.gz
-9aeeaaa70c75608e0b3ed6b6de5b3a37 fix-single-byte-overflow.patch
+02d3339c59ed2996aec7909d3c45c655 0001-fix-single-byte-overflow-of-malloc-d-buffer-in-getde.patch
+0893b094870823046db1b19786ddae22 0002-safely-handle-failure-to-open-hosts-services-resolv..patch
+a340ce73f0e77440c546163cfe4e0e87 0003-getnameinfo-make-size-check-not-fail-for-bigger-size.patch
+3fb065e44e1fcaef160f897a8b4650c1 0004-properly-access-mcontext_t-program-counter-in-cancel.patch
+79a29b7dad83283adca8e68dfd3bc59f 0005-use-explicit-__cp_cancel-label-in-cancellable-syscal.patch
+e13993cb4786fd692e33e1406ad2b216 0006-prevent-allocs-than-PTRDIFF_MAX-via-mremap.patch
+c693ab04bb7ff779f5e94ecf94cdc7d6 0007-fix-mremap-memory-synchronization-and-use-of-variadi.patch
+fc6a1e682050520e1ae3f45b3d922a1e 0008-have-configure-check-add-ffunction-sections-and-fdat.patch
+76c29ad893c80191cee395493430f385 0009-have-configure-check-add-linker-options-to-reduce-si.patch
+ce46e304c8e54ee44473b94643a7fcde 0010-have-configure-check-add-gc-sections-linker-option.patch
+5f051185cb80074708c9d9d4ed09b999 0011-work-around-toolchains-with-broken-visibility-in-lib.patch
+b231d5033566c5d4afc936fe52f5e2d4 0012-fix-return-value-of-nl_langinfo-for-invalid-item-arg.patch
+a636889b40dd3d4d48687aba2d07d8eb 0013-math-explicitly-promote-expressions-to-excess-precis.patch
+469bcc5b68f39112748e59af8c6e9dd4 0014-ldso-fix-the-dtv-update-logic-in-__tls_get_new.patch
+ecb2784515da574cb829713f6d05221f 0015-properly-handle-point-to-point-interfaces-in-getifad.patch
+5c60f8931354e219e73a6f068786821a 0016-fix-tdelete-to-properly-balance-the-tree.patch
+9f34e1c6d510e3c461dc83ab28a52ef5 0017-fix-tsearch-to-avoid-crash-on-oom.patch
+197ecc83ff71f081e41e3dca8d7e9c6c 0018-tsearch-code-cleanup.patch
+ca459c4237bdafb9d0047cc104bf1376 0019-fix-tsearch-tfind-tdelete-to-handle-null-pointer-inp.patch
+cc6a97327c6d16da0b8416f61266ef83 0020-fix-crash-when-signal-number-0-is-passed-to-sigactio.patch
+a9bd9d9659a359d5bd330aa42fc62d5e 0021-avoid-updating-caller-s-size-when-getdelim-fails-to-.patch
+99f93be1cc75bc35ce51d6b221b9c7c1 0022-fix-overly-pessimistic-realloc-strategy-in-getdelim.patch
+cde5cb6872b78efd8748e379b0865861 0023-add-missing-protocols-to-protoent-lookup-functions.patch
830d01f7821b978df770b06db3790921 ldconfig
0df687757221bbb0fc1aa67f1bd646f9 __stack_chk_fail_local.c
57ef2c63b9ec6a2041694ace97d4ffa2 getconf.c
2b941c4251cac44988a4abfc50e21267 getent.c
45f92f8d59cf84d765de698a9578dbf4 iconv.c"
sha256sums="720b83c7e276b4b679c0bffe9509340d5f81fd601508e607e708177df0d31c0e musl-1.1.12.tar.gz
-370daa951d0547dc77d699945e5f49eb941516ead5aee51c5e9ca30061c7c5f8 fix-single-byte-overflow.patch
+ee51a2ae17e123e5363cd8c09c121263d1b4e0c2484515ae0d9b2c666e3863e6 0001-fix-single-byte-overflow-of-malloc-d-buffer-in-getde.patch
+2ee9a4d8085e1a35aff8874d3dc021c3a0ffd2842b6835383aa8d8a24ec558ed 0002-safely-handle-failure-to-open-hosts-services-resolv..patch
+c165876c6a744768f842e0a4c66a3817f3a50464ad1549f62214819149e70019 0003-getnameinfo-make-size-check-not-fail-for-bigger-size.patch
+5be81238a8995ea02a9251b2ec514ab6fbb293abd093f542dde6c110b9ad8a74 0004-properly-access-mcontext_t-program-counter-in-cancel.patch
+765b7d653680793bf607a14965444af42a2b75b89401b0265996cdce58873859 0005-use-explicit-__cp_cancel-label-in-cancellable-syscal.patch
+2ea9de6eebc02ddc6ef36083467e8b38700e94acff03dc954f4f7fd8b996eb90 0006-prevent-allocs-than-PTRDIFF_MAX-via-mremap.patch
+9f464642f19298a13bc0b8d1964489275fa1526bd12212322d0d021beb1960a8 0007-fix-mremap-memory-synchronization-and-use-of-variadi.patch
+b49213cabb1323f75891c6cedb0388ef8a36527326b263863f09f9a6e041c9b3 0008-have-configure-check-add-ffunction-sections-and-fdat.patch
+8f66ec53c0bcc2eaf48d8893df537b9b3b800c2b5b11a8ac4426517b17e7e561 0009-have-configure-check-add-linker-options-to-reduce-si.patch
+47ae56a03d509dca5767de38dad77ffbd28f820e7b6c5ebb6a62ef58443fc74d 0010-have-configure-check-add-gc-sections-linker-option.patch
+1f545670eb4c3d8dc95930cfa2e0bd2b5fdb7a0dd7fc7cbf53423566cb1a2642 0011-work-around-toolchains-with-broken-visibility-in-lib.patch
+970a22adfc08d8f2685fdf5b47f1b52bce97a12094f048ca50e42ca70187cbbe 0012-fix-return-value-of-nl_langinfo-for-invalid-item-arg.patch
+d5b15f2dd9305e16f562c5daae3d08e1aa17b16954c76efa62922e5fb30a1061 0013-math-explicitly-promote-expressions-to-excess-precis.patch
+09d6a5518d7c2185117b7240222efbd58f8e02600c00960f4dcf08841b49313a 0014-ldso-fix-the-dtv-update-logic-in-__tls_get_new.patch
+adbd062b398a4effcbaf9c451ed48faab152b1a9cffcc7cc36c749e91ba66f72 0015-properly-handle-point-to-point-interfaces-in-getifad.patch
+3924429c0475bd14e7109539281b5011f6f3dd27257bbce3fd6e1232d6b12c61 0016-fix-tdelete-to-properly-balance-the-tree.patch
+c26d7070c5cff59ae8383d74d6b7919e26876b448b8be9df44b92ae983a4d1c6 0017-fix-tsearch-to-avoid-crash-on-oom.patch
+6913e0d2d7a04ae813847125e2dda1399502c76b679c4caf25510a43d7b1642e 0018-tsearch-code-cleanup.patch
+f8b10603a9e6ab53c7a6a90ac79eceee67aef2a3a2467a9c05b3eb6a0c661f7a 0019-fix-tsearch-tfind-tdelete-to-handle-null-pointer-inp.patch
+11e27faaf0f795ce89e772746d0575f5ff506a4c82e2595b68238c3d44153a61 0020-fix-crash-when-signal-number-0-is-passed-to-sigactio.patch
+abbc746c46c96478c9ccc7ac3e61142e5dde63a00d80787d24e79802a4cd32b6 0021-avoid-updating-caller-s-size-when-getdelim-fails-to-.patch
+3469865c391422dc56806c32b5ba373f2f0e67476235a69c172c8d9f866125cd 0022-fix-overly-pessimistic-realloc-strategy-in-getdelim.patch
+b9c4ca23898d8f57c7ad26bd8214df2294b2ef06bf7a517dad3750ddd0581f75 0023-add-missing-protocols-to-protoent-lookup-functions.patch
b4a2c06db38742e8c42c3c9838b285a7d8cdac6c091ff3df5ff9a15f1e41b9c7 ldconfig
299a7d75a09de3e2e11e7fb4acc3182e4a14e868093d2f30938fce9bfcff13da __stack_chk_fail_local.c
d87d0cbb3690ae2c5d8cc218349fd8278b93855dd625deaf7ae50e320aad247c getconf.c
68373a55e89ce85c562d941ccf588337d6cc6c9c17689d695f65cd7607134bbe getent.c
f79a2930a2e5bb0624321589edf8b889d1e9b603e01e6b7ae214616605b3fdd7 iconv.c"
sha512sums="7cabbe2665e32bd3408c8865f89f474106e982b4e5de81d0cdeea19e19e20b4d2496faf1adc6b2811d996f30f39258184ba347e8eb5f3811eab89179e8f52d70 musl-1.1.12.tar.gz
-75e5c98a27924ed6a2ce5113f56ecff2774506a82c2ad65c815998083ef812d9a36e61e270a40b29b436ca91cf28563a7138f6eb5f206bbd1422eeae0346012c fix-single-byte-overflow.patch
+ec23ce27f1c2b4c8dae4c76b38da2795d46df55dce6a159e98b2755c0a6d391749626e65862b46d36d8473edc71ad01f2bf3521e41666895f705c7dad27a12bc 0001-fix-single-byte-overflow-of-malloc-d-buffer-in-getde.patch
+36bc9d2a236a9cc8e0e4de87c47abb887891b29c9f67b5e708c25373f9c060080f8bde95d1dac313e02de5a76fd4b22ad2f34eb5cb5506d9e44386d6473f7cdb 0002-safely-handle-failure-to-open-hosts-services-resolv..patch
+9d651de100a68c87bdb427e034717c6f885d395d63a5337f185da0a7ff10502dbee9234dc952e014f1362d78fd44752ac10eef78a9d3a81e33f2e2374132693e 0003-getnameinfo-make-size-check-not-fail-for-bigger-size.patch
+f1e627690aaf494052b573c16d17901edbefe99a2ff216b68b1261024c28e5c049de35bdddf018e826e8971fe34e328bd6507a6f8d3810d4179f2662cc7794fc 0004-properly-access-mcontext_t-program-counter-in-cancel.patch
+19fafc5a62150a9500e8495b7ebb71b680e8c827002e863f641ff5631812fe242981b452932c2759c6cf0150151393d1ed1a213a7ce8dd7e6de3e2ffd6c9f280 0005-use-explicit-__cp_cancel-label-in-cancellable-syscal.patch
+2c73458719e68fea6684905c4b2632e67d83674da7e92d37794939d277efc7469471aae4b7ade395214e4a7061f1027b87e3cdf664085bc473089d72f38d8baf 0006-prevent-allocs-than-PTRDIFF_MAX-via-mremap.patch
+d17d9deedbed9a2fa7d7988a2b13f9c3273faf19543a8b184c2f0b4e1740403199bc8884399abe15ce65143a9277b53c77231f176808b7f15ee9f0c479b8c93d 0007-fix-mremap-memory-synchronization-and-use-of-variadi.patch
+21eb9d66f93276bf46fb2dead1b9bf73d5703ceae3dff6e8bb9e9d273e39515623cde71a4728b7c6557fe39a7fd1229b92fe41af13b7df6a05f781c4cca2ac14 0008-have-configure-check-add-ffunction-sections-and-fdat.patch
+abdeece8b2a64d45607ee513949e8a788e7f54a4f3e2111926a354e5b5af2c932ef0b5cc1d1ad8db48d168cee34e21b918ef01e1a9f3efadc5b6ef2c4c22c508 0009-have-configure-check-add-linker-options-to-reduce-si.patch
+c49071c8014a5a8407c6df006a8874481a97f03f95a14420f66457e20446085e173ec12a2f161fd9bc3d85a2b1f40972092d89d339498fb7890e0512cb13d0ca 0010-have-configure-check-add-gc-sections-linker-option.patch
+1ef9e77b9f17e9cd1dd77487005ff08b9fda357380d70dedb9752bfdf071cc077a8b93eae84f08ce27af7f0e4f8cb7f2b09d17d2e953a6429e20959decce517a 0011-work-around-toolchains-with-broken-visibility-in-lib.patch
+636cc187f96916aef02e1bab8ceafb0ce02a087f8358b36e8ded0a5db431bb5d26c90234e21e85742e2dad90fa8315c80ac818c26777cbd1f55d8b6d1d7a5eeb 0012-fix-return-value-of-nl_langinfo-for-invalid-item-arg.patch
+49a0a51f652e818769380eeccaab1e58e58afecfe99277a157391c8038cbc101eaefc11f1440461834e2f428c02ead740b89afeaece7966efbb9a2f053fd4d29 0013-math-explicitly-promote-expressions-to-excess-precis.patch
+270e40a25012d2ccd9d5ec53eba7089b920aa68de0e75baf69cb658bfe42837f0546bf5323fa7bf248c0bbe5e76e8d4df789da3cda89f29dab75346e9ed63723 0014-ldso-fix-the-dtv-update-logic-in-__tls_get_new.patch
+15f5061ccb11413c98e8cbf9b39533496a2326e69256234902f0e954350247ff4fdcc1acec482ceb5d96a835bb3bf62e79d14cfffc8c7b4806abf19250afe688 0015-properly-handle-point-to-point-interfaces-in-getifad.patch
+cd3178963bb0ea3c4bc670ab75fad15d85cf157cbf22f6b24a16d31f6c78b57aac58af4756a0e2ecddff38e383552134cc666e14955e0dedfdd0f2853afe7e0a 0016-fix-tdelete-to-properly-balance-the-tree.patch
+dd14c638499a9364c64371f45183bc01b078594291da8b11a4a8bedf58cdb853502b8e871f52aae7bbcd71e930c6abda7aa6ea280d5ea226091a5256836f7ef1 0017-fix-tsearch-to-avoid-crash-on-oom.patch
+12c9ad56768cd97768f7be51784b7df3ef9041ad568252d9e5f6ba725836d9aa8bdc2a53d17b4161395e5e10ad08acc03237bb0d48eafe93eb46f5967bc4f2ab 0018-tsearch-code-cleanup.patch
+6136a11408ccd58427507841773fb73e3755f073ae22cfb1b41ff6228f6b9b9719e7313b24c5198a32f7d6aa0601f2792aa4ccd558aaf2a6311ac896c89b7c1c 0019-fix-tsearch-tfind-tdelete-to-handle-null-pointer-inp.patch
+5a754335dfa9b8856aa04876c4dc8c98a27630c670242b77f3fdcf1dd1133edb1661c124c60a594ee1c1fbf9401d481a6be186a00b53120ba83644a835799e2c 0020-fix-crash-when-signal-number-0-is-passed-to-sigactio.patch
+7b9618242ae75767a5eb7dc3ea83e2fb44ab073c1062cb1f7c3b2168f7185f442ff1438755e3e8bab8eee9406d08ba4bed0a39ec9c4b8fb7ff523424a020c920 0021-avoid-updating-caller-s-size-when-getdelim-fails-to-.patch
+d166fabf4178c4f74113182a9294e1b864c78be1123bf0c5a59ec627017440369cabc31fe69c570df672a9eccfe891bddf5306fb9d638b0b69e5a2416af015ee 0022-fix-overly-pessimistic-realloc-strategy-in-getdelim.patch
+feda1aa70f6bf70d00da1d633ad9b5a539abaa3638707a4c9ff624d2492086af381963c3ec021fc67c67c314967c66148fd6a8852ec1538936170f40c6f81525 0023-add-missing-protocols-to-protoent-lookup-functions.patch
8d3a2d5315fc56fee7da9abb8b89bb38c6046c33d154c10d168fb35bfde6b0cf9f13042a3bceee34daf091bc409d699223735dcf19f382eeee1f6be34154f26f ldconfig
062bb49fa54839010acd4af113e20f7263dde1c8a2ca359b5fb2661ef9ed9d84a0f7c3bc10c25dcfa10bb3c5a4874588dff636ac43d5dbb3d748d75400756d0b __stack_chk_fail_local.c
0d80f37b34a35e3d14b012257c50862dfeb9d2c81139ea2dfa101d981d093b009b9fa450ba27a708ac59377a48626971dfc58e20a3799084a65777a0c32cbc7d getconf.c