diff options
author | Timo Teräs <timo.teras@iki.fi> | 2016-01-08 09:18:11 +0200 |
---|---|---|
committer | Timo Teräs <timo.teras@iki.fi> | 2016-01-08 09:21:58 +0200 |
commit | 8a4ccf53a605414546a73d39dda24fe95c1bc1b2 (patch) | |
tree | 9dfd741e819a102716237fab07aa65b07a6ce4ba /main/musl | |
parent | 7d84a0410e406fd7edd9f82c0c83a39ad222201e (diff) | |
download | aports-8a4ccf53a605414546a73d39dda24fe95c1bc1b2.tar.bz2 aports-8a4ccf53a605414546a73d39dda24fe95c1bc1b2.tar.xz |
main/musl: cherry-pick upstream fixes and improvements
fixes #4621
Diffstat (limited to 'main/musl')
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 |