Linux cpanel.rrshost.in 5.15.0-25-generic #25-Ubuntu SMP Wed Mar 30 15:54:22 UTC 2022 x86_64
Apache
: 109.123.238.221 | : 172.69.59.197
128 Domain
8.2.28
aev999
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
usr /
src /
glibc /
debian /
patches /
arm /
[ HOME SHELL ]
Name
Size
Permission
Action
local-arm-futex.diff
1012
B
-rw-r--r--
local-sigaction.diff
895
B
-rw-r--r--
local-soname-hack.diff
759
B
-rw-r--r--
local-vfp-sysdeps.diff
913
B
-rw-r--r--
unsubmitted-ldconfig-cache-abi...
4.13
KB
-rw-r--r--
unsubmitted-ldso-multilib.diff
491
B
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : unsubmitted-ldconfig-cache-abi.diff
--- a/sysdeps/unix/sysv/linux/arm/readelflib.c +++ b/sysdeps/unix/sysv/linux/arm/readelflib.c @@ -27,6 +27,131 @@ unsigned int *isa_level, char **soname, void *file_contents, size_t file_length); +/* Read an unsigned leb128 value from P, store the value in VAL, return + P incremented past the value. We assume that a word is large enough to + hold any value so encoded; if it is smaller than a pointer on some target, + pointers should not be leb128 encoded on that target. */ +static unsigned char * +read_uleb128 (unsigned char *p, unsigned long *val) +{ + unsigned int shift = 0; + unsigned char byte; + unsigned long result; + + result = 0; + do + { + byte = *p++; + result |= (byte & 0x7f) << shift; + shift += 7; + } + while (byte & 0x80); + + *val = result; + return p; +} + +#define ATTR_TAG_FILE 1 +#define ABI_VFP_args 28 +#define VFP_ARGS_IN_VFP_REGS 1 + +/* Check the ABI in the ARM attributes. Search through the section + headers looking for the ARM attributes section, then check the + VFP_ARGS attribute. */ +static int is_library_hf(const char *file_name, void *file_contents, size_t file_length) +{ + unsigned int i; + Elf32_Ehdr *ehdr = (Elf32_Ehdr *) file_contents; + Elf32_Shdr *shdrs; + + shdrs = file_contents + ehdr->e_shoff; + for (i = 0; i < ehdr->e_shnum; i++) + { + if (SHT_ARM_ATTRIBUTES == shdrs[i].sh_type) + { + /* We've found a likely section. Load the contents and + * check the tags */ + unsigned char *p = (unsigned char *)file_contents + shdrs[i].sh_offset; + unsigned char * end; + + /* Sanity-check the attribute section details. Make sure + * that it's the "aeabi" section, that's all we care + * about. */ + if (*p == 'A') + { + unsigned long len = shdrs[i].sh_size - 1; + unsigned long namelen; + p++; + + while (len > 0) + { + unsigned long section_len = p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24; + if (section_len > len) + section_len = len; + + p += 4; + len -= section_len; + section_len -= 4; + + if (0 != strcmp((char *)p, "aeabi")) + { + p += section_len; + continue; + } + namelen = strlen((char *)p) + 1; + p += namelen; + section_len -= namelen; + + /* We're in a valid section. Walk through this + * section looking for the tag we care about + * (ABI_VFP_args) */ + while (section_len > 0) + { + unsigned long val = 0; + unsigned long tag; + unsigned long size; + + end = p; + tag = (*p++); + + size = p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24; + if (size > section_len) + size = section_len; + p += 4; + + section_len -= size; + end += size; + if (ATTR_TAG_FILE != tag) + { + /* ignore, we don't care */ + p = end; + continue; + } + while (p < end) + { + p = read_uleb128 (p, &tag); + /* Handle the different types of tag. */ + if ( (tag == 4) || (tag == 5) || (tag == 67) ) + { + /* Special cases for string values */ + namelen = strlen((char *)p) + 1; + p += namelen; + } + else + { + p = read_uleb128 (p, &val); + } + if ( (tag == ABI_VFP_args) && (val == VFP_ARGS_IN_VFP_REGS) ) + return 1; + } + } + } + } + } + } + return 0; +} + /* Returns 0 if everything is ok, != 0 in case of error. */ int process_elf_file (const char *file_name, const char *lib, int *flag, @@ -49,6 +174,8 @@ *flag = FLAG_ARM_LIBHF|FLAG_ELF_LIBC6; else if (elf32_header->e_flags & EF_ARM_ABI_FLOAT_SOFT) *flag = FLAG_ARM_LIBSF|FLAG_ELF_LIBC6; + else if (is_library_hf(file_name, file_contents, file_length)) + *flag = FLAG_ARM_LIBHF|FLAG_ELF_LIBC6; else /* We must assume the unmarked objects are compatible with all ABI variants. Such objects may have been
Close