- Update haproxy download URL and hash - This version introduces backtrace-support via backtrace(), however, it must be disabled because neither MUSL nor UCLIBC support it (build fails because of missing execinfo.h) - Our previous UCLIBC patch is now obsolete and has been removed. We now only disable libcrypt support. - A new patch was backported from the haproxy dev-branch which fixes an IFDEF which should only allow GLIBC to use dladdr1 and make builds fall back to dladdr when using other c-libs. The previous logic was bogus and broke the build on UCLIBC. Signed-off-by: Christian Lachner <gladiac@gmail.com>lilik-openwrt-22.03
@ -1,56 +0,0 @@ | |||
commit c7a203a6c75e4efff5f3d5d675d925f11b47dba1 | |||
Author: Frédéric Lécaille <flecaille@haproxy.com> | |||
Date: Thu Apr 2 14:24:31 2020 +0200 | |||
BUG/MINOR: protocol_buffer: Wrong maximum shifting. | |||
This patch fixes a bad stop condition when decoding a protocol buffer variable integer | |||
whose maximum lenghts are 10, shifting a uint64_t value by more than 63. | |||
Thank you to Ilya for having reported this issue. | |||
Must be backported to 2.1 and 2.0. | |||
(cherry picked from commit 876ed55d9b8d0c298b6cac1003ec365a19bf7aad) | |||
Signed-off-by: Willy Tarreau <w@1wt.eu> | |||
diff --git a/include/proto/protocol_buffers.h b/include/proto/protocol_buffers.h | |||
index 69f0bdf81..0426d83d2 100644 | |||
--- a/include/proto/protocol_buffers.h | |||
+++ b/include/proto/protocol_buffers.h | |||
@@ -158,7 +158,7 @@ protobuf_varint(uint64_t *val, unsigned char *pos, size_t len) | |||
shift += 7; | |||
/* The maximum length in bytes of a 64-bit encoded value is 10. */ | |||
- if (shift > 70) | |||
+ if (shift > 63) | |||
return 0; | |||
} | |||
@@ -194,7 +194,7 @@ protobuf_decode_varint(uint64_t *val, unsigned char **pos, size_t *len) | |||
shift += 7; | |||
/* The maximum length in bytes of a 64-bit encoded value is 10. */ | |||
- if (shift > 70) | |||
+ if (shift > 63) | |||
return 0; | |||
} | |||
@@ -227,7 +227,7 @@ protobuf_skip_varint(unsigned char **pos, size_t *len, size_t vlen) | |||
shift += 7; | |||
/* The maximum length in bytes of a 64-bit encoded value is 10. */ | |||
- if (shift > 70) | |||
+ if (shift > 63) | |||
return 0; | |||
} | |||
@@ -263,7 +263,7 @@ protobuf_varint_getlen(unsigned char *pos, size_t len) | |||
shift += 7; | |||
/* The maximum length in bytes of a 64-bit encoded value is 10. */ | |||
- if (shift > 70) | |||
+ if (shift > 63) | |||
return -1; | |||
} | |||
@ -0,0 +1,23 @@ | |||
commit 62af9c83f9ed2b25e0061798e29e3cccfce5fbdc | |||
Author: Willy Tarreau <w@1wt.eu> | |||
Date: Tue Mar 10 07:51:48 2020 +0100 | |||
BUILD: make dladdr1 depend on glibc version and not __USE_GNU | |||
Technically speaking the call was implemented in glibc 2.3 so we must | |||
rely on this and not on __USE_GNU which is an internal define of glibc | |||
to track use of GNU_SOURCE. | |||
diff --git a/src/standard.c b/src/standard.c | |||
index e0ea8328e..d16eebfea 100644 | |||
--- a/src/standard.c | |||
+++ b/src/standard.c | |||
@@ -4350,7 +4350,7 @@ void debug_hexdump(FILE *out, const char *pfx, const char *buf, | |||
static int dladdr_and_size(const void *addr, Dl_info *dli, size_t *size) | |||
{ | |||
int ret; | |||
-#ifdef __USE_GNU // most detailed one | |||
+#if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) // most detailed one | |||
const ElfW(Sym) *sym; | |||
ret = dladdr1(addr, dli, (void **)&sym, RTLD_DL_SYMENT); |
@ -1,18 +0,0 @@ | |||
--- a/Makefile | |||
+++ b/Makefile | |||
@@ -342,6 +342,15 @@ ifeq ($(TARGET),linux-glibc) | |||
USE_ACCEPT4 USE_LINUX_SPLICE USE_PRCTL USE_THREAD_DUMP USE_GETADDRINFO) | |||
endif | |||
+# For linux >= 2.6.28 and uclibc | |||
+ifeq ($(TARGET),linux-uclibc) | |||
+ set_target_defaults = $(call default_opts, \ | |||
+ USE_POLL USE_TPROXY USE_DL USE_RT USE_NETFILTER \ | |||
+ USE_CPU_AFFINITY USE_THREAD USE_EPOLL USE_FUTEX USE_LINUX_TPROXY \ | |||
+ USE_ACCEPT4 USE_LINUX_SPLICE USE_PRCTL USE_THREAD_DUMP USE_NS USE_TFO \ | |||
+ USE_GETADDRINFO) | |||
+endif | |||
+ | |||
# Solaris 8 and above | |||
ifeq ($(TARGET),solaris) | |||
# We also enable getaddrinfo() which works since solaris 8. |