From e28982b5e440ba3feef834c5b0a575faa74b1e30 Mon Sep 17 00:00:00 2001 From: Maxython Date: Sun, 17 Dec 2023 16:52:26 +0300 Subject: [PATCH] gpkg/glibc: ldd fix for x86_64 and improvement mprotect.c --- gpkg/glibc/build.sh | 3 ++- gpkg/glibc/dl-load.c.patch | 13 +++++++++++++ gpkg/glibc/mprotect.c | 5 +++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 gpkg/glibc/dl-load.c.patch diff --git a/gpkg/glibc/build.sh b/gpkg/glibc/build.sh index 114bc457f..1fe942ab0 100644 --- a/gpkg/glibc/build.sh +++ b/gpkg/glibc/build.sh @@ -3,7 +3,7 @@ TERMUX_PKG_DESCRIPTION="GNU C Library" TERMUX_PKG_LICENSE="GPL-3.0, LGPL-3.0" TERMUX_PKG_MAINTAINER="@termux-pacman" TERMUX_PKG_VERSION=2.38 -TERMUX_PKG_REVISION=10 +TERMUX_PKG_REVISION=11 TERMUX_PKG_SRCURL=https://ftp.gnu.org/gnu/libc/glibc-$TERMUX_PKG_VERSION.tar.xz TERMUX_PKG_SHA256=fb82998998b2b29965467bc1b69d152e9c307d2cf301c9eafb4555b770ef3fd2 TERMUX_PKG_DEPENDS="linux-api-headers-glibc" @@ -21,6 +21,7 @@ termux_step_pre_configure() { done rm ${TERMUX_PKG_SRCDIR}/sysdeps/unix/sysv/linux/*/clone3.S + rm ${TERMUX_PKG_SRCDIR}/sysdeps/unix/sysv/linux/x86_64/configure* for i in android_passwd_group.h android_passwd_group.c android_system_user_ids.h; do cp ${TERMUX_PKG_BUILDER_DIR}/${i} ${TERMUX_PKG_SRCDIR}/nss/ diff --git a/gpkg/glibc/dl-load.c.patch b/gpkg/glibc/dl-load.c.patch new file mode 100644 index 000000000..d3631b5b3 --- /dev/null +++ b/gpkg/glibc/dl-load.c.patch @@ -0,0 +1,13 @@ +--- glibc-2.38/elf/dl-load.c 2023-07-31 20:54:16.000000000 +0300 ++++ glibc-2.38/elf/dl-load.c.patch 2023-12-18 12:30:57.453838644 +0300 +@@ -90,9 +90,7 @@ + + + int __stack_prot attribute_hidden attribute_relro +-#if _STACK_GROWS_DOWN && defined PROT_GROWSDOWN +- = PROT_GROWSDOWN; +-#elif _STACK_GROWS_UP && defined PROT_GROWSUP ++#if _STACK_GROWS_UP && defined PROT_GROWSUP + = PROT_GROWSUP; + #else + = 0; diff --git a/gpkg/glibc/mprotect.c b/gpkg/glibc/mprotect.c index a17b6aebb..d9000d779 100644 --- a/gpkg/glibc/mprotect.c +++ b/gpkg/glibc/mprotect.c @@ -88,6 +88,9 @@ int __mprotect(void *addr, size_t len, int prot) { if (res == -1 && errno == EACCES && prot & PROT_EXEC && __is_mmaped(addr) == 1) { size_t saddr = strlen(addr)+1; void *caddr; + //int mmap_flags = MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED; + //if (prot & PROT_GROWSDOWN) + // mmap_flags |= MAP_GROWSDOWN; if (saddr > 1) { caddr = malloc(saddr); memcpy(caddr, addr, saddr); @@ -97,6 +100,8 @@ int __mprotect(void *addr, size_t len, int prot) { memcpy(addr, caddr, saddr); free(caddr); } + //if (prot & PROT_GROWSDOWN) + // prot &= ~PROT_GROWSDOWN; return INLINE_SYSCALL_CALL(mprotect, addr, len, prot); } #endif