⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.184
Server IP:
65.21.180.239
Server:
Linux gowhm.eplangoweb.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Server Software:
Apache
PHP Version:
8.0.30
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
proc
/
self
/
root
/
usr
/
src
/
glibc
/
debian
/
patches
/
any
/
View File Name :
local-ldso-disable-hwcap.diff
# DP: Allow hwcap's to be disabled with the existence of a file. This # DP: makes it easier to do upgrades with optimized (hwcap) library # DP: packages. # DP: Author: Rewritten by Daniel Jacobowitz <dan@debian.org> # DP: Upstream status: Debian-Specific # DP: Status Details: This isn't going to be acceptable upstream, we # DP: only need it because we support in-place upgrades. # DP: Date: 2003-10-28, (Updated 2005-01-02 gotom, 2007-05-20 aurel32) --- elf/dl-cache.c | 8 ++++++++ elf/dl-hwcaps.c | 26 +++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) --- a/elf/dl-hwcaps.c +++ b/elf/dl-hwcaps.c @@ -22,6 +22,9 @@ #include <libintl.h> #include <unistd.h> #include <ldsodefs.h> +#include <fcntl.h> +#include <sysdep.h> +#include <not-errno.h> #include <dl-procinfo.h> #include <dl-hwcaps.h> @@ -43,6 +46,7 @@ size_t cnt = platform != NULL; size_t n, m; size_t total; + struct r_strlenpair *temp; struct r_strlenpair *result; struct r_strlenpair *rp; char *cp; @@ -124,8 +128,24 @@ /* For TLS enabled builds always add 'tls'. */ ++cnt; +#ifdef NEED_LD_SO_NOHWCAP + if (__access_noerrno ("/etc/ld.so.nohwcap", F_OK) == 0) + { + /* If hwcap is disabled, we only have the base directory to search. */ + result = (struct r_strlenpair *) malloc (sizeof (*result)); + if (result == NULL) + goto no_memory; + + result[0].str = (char *) result; /* Does not really matter. */ + result[0].len = 0; + + *sz = 1; + return result; + } +#endif + /* Create temporary data structure to generate result table. */ - struct r_strlenpair temp[cnt]; + temp = (struct r_strlenpair *) alloca (cnt * sizeof (*temp)); m = 0; #ifdef NEED_DL_SYSINFO_DSO if (dsocaps != NULL) @@ -210,8 +230,13 @@ *sz = 1 << cnt; result = (struct r_strlenpair *) malloc (*sz * sizeof (*result) + total); if (result == NULL) - _dl_signal_error (ENOMEM, NULL, NULL, - N_("cannot create capability list")); + { +#ifdef NEED_LD_SO_NOHWCAP + no_memory: +#endif + _dl_signal_error (ENOMEM, NULL, NULL, + N_("cannot create capability list")); + } if (cnt == 1) { --- a/elf/dl-cache.c +++ b/elf/dl-cache.c @@ -25,6 +25,9 @@ #include <stdint.h> #include <_itoa.h> #include <dl-hwcaps.h> +#include <fcntl.h> +#include <sysdep.h> +#include <not-errno.h> #ifndef _DL_PLATFORMS_COUNT # define _DL_PLATFORMS_COUNT 0 @@ -246,6 +249,7 @@ if (cache_new != (void *) -1) { uint64_t platform; + int disable_hwcap = 0; /* This is where the strings start. */ cache_data = (const char *) cache_new; @@ -259,6 +263,11 @@ uint64_t hwcap_mask = GET_HWCAP_MASK(); +#ifdef NEED_LD_SO_NOHWCAP + if (__access_noerrno ("/etc/ld.so.nohwcap", F_OK) == 0) + disable_hwcap = 1; +#endif + #define _DL_HWCAP_TLS_MASK (1LL << 63) uint64_t hwcap_exclude = ~((GLRO(dl_hwcap) & hwcap_mask) | _DL_HWCAP_PLATFORM | _DL_HWCAP_TLS_MASK); @@ -269,6 +278,8 @@ continue; \ if (GLRO(dl_osversion) && lib->osversion > GLRO(dl_osversion)) \ continue; \ + if (disable_hwcap && lib->hwcap != 0) \ + continue; \ if (_DL_PLATFORMS_COUNT \ && (lib->hwcap & _DL_HWCAP_PLATFORM) != 0 \ && (lib->hwcap & _DL_HWCAP_PLATFORM) != platform) \ --- a/sysdeps/alpha/ldsodefs.h +++ b/sysdeps/alpha/ldsodefs.h @@ -37,6 +37,8 @@ struct La_alpha_retval; struct La_alpha_retval *, \ const char *); +#define NEED_LD_SO_NOHWCAP + #include_next <ldsodefs.h> #endif --- a/sysdeps/i386/ldsodefs.h +++ b/sysdeps/i386/ldsodefs.h @@ -0,0 +1,7 @@ +#ifndef __LDSODEFS_H + +#define NEED_LD_SO_NOHWCAP + +#include_next <ldsodefs.h> + +#endif