John Reiser
bbb886ae4d
gcc 14.2.1-3 lax on signed-vs-unsigned compare
...
modified: p_lx_elf.cpp
2025-07-25 07:14:33 -07:00
John Reiser
b52d3e0772
Detect DT_HASH chain out-of-bounds
...
https://issues.oss-fuzz.com/u/1/issues/430110068
modified: p_lx_elf.cpp
2025-07-24 11:09:58 -07:00
John Reiser
b728b0e021
buildLinuxLoader needs more space
...
for shlib + lzma + Android
https://github.com/upx/upx/issues/913
modified: p_lx_elf.cpp
2025-05-07 13:52:58 -07:00
John Reiser
a1ef410509
ELF DT_DYNSYM: fix checking of symbol table
...
Particularly JNI_OnLoad
https://github.com/upx/upx/issues/914
modified: p_lx_elf.cpp
2025-05-07 17:02:56 -07:00
John Reiser
a25c20ee0b
M_LZMA with hi parameter bytes confused --ultra-brute
...
https://github.com/upx/upx/issues/900
modified: packhead.cpp
modified: p_lx_elf.cpp
2025-03-20 09:48:00 -07:00
John Reiser
ff75a462a4
Fighting over .e_shentsize
...
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
2025-03-18 13:48:19 -07:00
John Reiser
e0b6ff1924
More checking in unpack()
...
https://github.com/upx/upx/issues/898
modified: p_lx_elf.cpp
2025-03-18 08:40:08 -07:00
John Reiser
dbde75028c
Avoid corrupted P_hdr
...
https://issues.oss-fuzz.com/u/1/issues/398127991
modified: p_lx_elf.cpp
2025-03-02 11:12:08 -08:00
John Reiser
64891286ba
Unpack: better checking of bounds for DT_HASH
...
https://issues.oss-fuzz.com/u/1/issues/398075916
modified: p_lx_elf.cpp
2025-02-22 07:55:14 -08:00
John Reiser
e52a3ceb48
Unpack: Entire ElfXX_Ehdr must be present in de-compressed Ehdr+Phdrs
...
https://issues.oss-fuzz.com/u/1/issues/397728078
(previous commit: https://issues.oss-fuzz.com/u/1/issues/397500915 )
modified: p_lx_elf.cpp
2025-02-22 07:55:14 -08:00
John Reiser
8cce9cf641
Detect bad b_info.method
...
https://issues.oss-fuzz.com/u/1/issues?q=upx
modified: p_lx_elf.cpp
modified: p_unix.cpp
modified: packhead.cpp
modified: packhead.h
2025-02-22 07:55:14 -08:00
John Reiser
83e5f74b3d
Compiler different type checking
...
modified: p_lx_elf.cpp
2025-02-17 09:39:55 -08:00
John Reiser
3d402134f5
Better checking of DT_GNU_HASH during de-compression
...
https://issues.oss-fuzz.com/u/1/issues/396167884
modified: p_lx_elf.cpp
2025-02-17 09:14:19 -08:00
John Reiser
b8b64a3e0f
Fuzz nuisance: wild p_info for de-compression
...
https://issues.oss-fuzz.com/u/1/issues/383200048
modified: p_lx_elf.cpp
2025-02-17 08:26:17 -08:00
John Reiser
78f4959521
Fix de-compression of ELF shared libraries
...
Reset ph.method on each b_info.b_method.
Use file_image[] as ReadOnly, subsuming fi->seek()+read().
Use lowmem[0, +xct_off) for changing values.
Work on un_DT_INIT().
https://github.com/upx/upx/issues/882
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: p_unix.cpp
2025-02-15 19:35:21 -08:00
John Reiser
eff1ef2d70
Fix amd64 shared libraries
...
Inspired by https://github.com/upx/upx/issues/880
(https://github.com/microsoft/mimalloc.git on Linux)
but still need test case.
modified: p_lx_elf.cpp
modified: stub/amd64-linux.elf-so_entry.h
modified: stub/src/amd64-linux.elf-so_entry.S
2025-02-13 17:22:37 -08:00
John Reiser
782b07c752
PPC64 check ehdri.e_ident[EI_DATA], not elfout
...
modified: p_lx_elf.cpp
2025-02-12 08:56:18 -08:00
John Reiser
8c9e04daaf
Propagate .e_ident[EI_ABIVERSION]
...
Linux on bare metal (and explicit qemu) seems not to care,
but qemu-user-binfmt gives ENOEXEC (Exec format error)
https://github.com/upx/upx/issues/876
2025-02-07 19:24:46 -08:00
John Reiser
bddc05e787
Fix elf_lookup() defenses against fuzzed DT_HASH
...
modified: p_lx_elf.cpp
2025-02-01 13:22:26 -08:00
John Reiser
7b06ba0b78
Detect empty DT_STRTAB
...
https://github.com/upx/upx/issues/872
fuzzing from leon.weiss AT @ruhr-uni-bochum.de
modified: p_lx_elf.cpp
2025-01-31 11:32:48 -08:00
John Reiser
344b73dab0
invert_pt_dynamic defends against missing DT_STRTAB or DT_STRSIZ
...
https://github.com/upx/upx/issues/872
fuzzing from leon.weiss AT @ruhr-uni-bochum.de
modified: p_lx_elf.cpp
2025-01-30 11:42:09 -08:00
John Reiser
0870514194
elf_lookup must defend against bad chain in hash table
...
https://github.com/upx/upx/issues/871
fuzzing from leon.weiss AT @ruhr-uni-bochum.de
2025-01-30 10:56:45 -08:00
Markus F.X.J. Oberhumer
3fd68d3ec6
CI updates
2025-01-27 18:11:44 +01:00
Markus F.X.J. Oberhumer
996ca8d17d
all: welcome 2025
2025-01-17 21:18:55 +01:00
John Reiser
e3e5d8a3a5
Try again for Android Elfxx_Shdr
...
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: p_unix.cpp
2024-12-23 11:20:26 -08:00
John Reiser
7d907d9d65
is_asl handles per-file opt->o_unix.android_shlib
...
Also slide_sh_offset() handles so_slide.
TODO: if asl_delta, then relocate sh_offset that is above xct_off.
PT_DYNAMIC.p_offset and {.dynamic}.sh_offset must match; etc.
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: p_unix.cpp
2024-12-17 17:17:24 -08:00
John Reiser
330ac2443c
help_umf.S for MIPS and PPC
...
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/src/mips.r3000-linux.elf-help_umf.S
modified: stub/src/mipsel.r3000-linux.elf-entry.S
modified: stub/src/mipsel.r3000-linux.elf-help_umf.S
new file: stub/src/powerpc-linux.elf-help_umf.S
2024-12-05 11:06:09 -08:00
John Reiser
982e732b74
Allow re-ordering of functions in upxfd_android.c and upxfd_linux.c
...
Compiler has a mind of its own.
modified: p_lx_elf.cpp
modified: stub/Makefile
new file: stub/src/amd64-linux.elf-help_umf.S
modified: stub/src/arm.v4a-expand.S
new file: stub/src/arm.v4a-linux.elf-help_umf.S
modified: stub/src/arm.v4a-linux.elf-so_entry.S
modified: stub/src/arm.v4a-linux.elf-so_fold.S
new file: stub/src/arm.v5a-linux.elf-help_umf.S
new file: stub/src/arm64-linux.elf-help_umf.S
modified: stub/src/arm64-linux.elf-so_entry.S
new file: stub/src/armeb.v4a-linux.elf-help_umf.S
new file: stub/src/i386-linux.elf-help_umf.S
modified: stub/src/i386-linux.elf-so_main.c
new file: stub/src/mips.r3000-linux.elf-help_umf.S
new file: stub/src/mipsel.r3000-linux.elf-help_umf.S
modified: stub/src/upxfd_android.c
2024-12-04 17:00:37 -08:00
John Reiser
37dff58289
powerpc-linux.elf-entry.S does not need UMF_LINUX
...
... because it calls memfd_create directly, not via upx_mmap_and_fd.
Perhaps MIPS, foo?
modified: p_lx_elf.cpp
2024-12-03 11:50:21 -08:00
John Reiser
68b31d31c3
msync() and UMF_LINUX fiddling
...
modified: p_lx_elf.cpp
modified: stub/src/amd64-linux.elf-entry.S
modified: stub/src/amd64-linux.elf-so_fold.S
modified: stub/src/arm.v4a-linux.elf-entry.S
modified: stub/src/arm.v4a-linux.elf-entry.lds
modified: stub/src/arm.v4a-linux.elf-fold.S
modified: stub/src/arm.v4a-linux.elf-so_entry.S
modified: stub/src/arm64-linux.elf-so_fold.S
modified: stub/src/mips.r3000-linux.elf-entry.lds
modified: stub/src/mipsel.r3000-linux.elf-entry.S
modified: stub/src/mipsel.r3000-linux.elf-entry.lds
modified: stub/src/mipsel.r3000-linux.elf-fold.S
modified: stub/src/upxfd_linux.c
2024-12-03 10:36:14 -08:00
John Reiser
d04209d30f
Unify 32-bit and 64-bit ::buildLinuxLoader
...
modified: p_lx_elf.cpp
2024-11-28 19:09:46 -08:00
John Reiser
8782778eb3
stub *-linux.elf-entry.S often must define label upx_mmap_and_fd
...
modified: p_lx_elf.cpp
modified: stub/src/arm.v4a-linux.elf-entry.S
modified: stub/src/arm.v4a-linux.elf-so_entry.S
modified: stub/src/i386-linux.elf-entry.S
2024-11-26 19:43:14 -08:00
John Reiser
c8515ae862
Unify PackLinuxElf64::pack2_shlib* with 32-bit
...
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2024-11-26 16:44:35 -08:00
John Reiser
76b0b4ce9c
Fix mips stub for ELF2 main program
...
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/src/mips.r3000-expand.S
modified: stub/src/upxfd_linux.c
2024-11-20 15:02:32 -08:00
John Reiser
83166e21a5
PackLinuxElf64::unpack forgot some get_te*
...
Also use is_LOAD where ever possible.
modified: p_lx_elf.cpp
modified: ../NEWS
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2024-11-20 07:46:24 -08:00
John Reiser
b4ea89f9d6
check-whitespace, clang-format
...
modified: p_elf_enum.h
modified: p_lx_elf.cpp
modified: stub/src/i386-linux.elf-so_entry.S
2024-11-19 09:13:44 -08:00
John Reiser
7ef018fed0
Option --android-oid for Android < 10
...
modified: main.cpp
modified: options.h
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: p_unix.h
2024-11-18 16:06:45 -08:00
John Reiser
886e325cbf
EXP_TAIL goes after de-compressors, and before UMF_LINUX
...
modified: p_lx_elf.cpp
modified: stub/src/i386-expand.S
2024-11-14 19:22:28 -08:00
John Reiser
a9dc43f7fb
PackLinuxElf32::generateElfHdr, PackLinuxElf64::buildLinuxLoader
...
modified: p_elf_enum.h
modified: p_lx_elf.cpp
2024-10-26 10:53:28 -07:00
John Reiser
0cc0e51d5d
PackLinuxElf64::canPack_Shdr
...
modified: p_lx_elf.cpp
modified: p_lx_elf.h
2024-10-26 10:02:14 -07:00
John Reiser
3403b87cb7
More Control Flow Integrity (Intel)
...
More ENDBRxx for CALL *%RDX for 'getbit'.
amd64: LEA xxx(%rip),%reg and STRCON section,
instead of CALL; .asciz "..."; POP %reg
(Not for PE due to WINDOWS_BACK binary compatibility.)
i386 string constants still use call-.asciz-pop because no (%rip)
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/src/amd64-linux.elf-entry.S
modified: stub/src/amd64-linux.elf-main2.c
modified: stub/src/amd64-linux.elf-so_entry.S
modified: stub/src/amd64-linux.shlib-init.S
modified: stub/src/amd64-win64.pe.S
modified: stub/src/i386-linux.elf-entry.S
modified: stub/src/i386-linux.elf-so_entry.S
modified: stub/src/upxfd_android.c
plus generated *.h *.map *.dump
2024-09-20 14:48:30 -07:00
John Reiser
d55fdf2205
ZIG_DIST_VERSION of 2024-09-17
...
also https://github.com/upx/upx/issues/847
modified: ../.github/workflows/ci.yml
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/src/amd64-linux.elf-entry.S
modified: stub/src/amd64-linux.elf-main2.c
modified: stub/src/i386-darwin.macho-entry.S
plus generated *.h *.map *.dump
2024-09-17 01:55:08 -07:00
John Reiser
7cb3f40dab
WIP: variable page size for xfind_pages(); debug arm32 Android shlib
...
modified: p_lx_elf.cpp
modified: stub/src/amd64-linux.elf-entry.S
modified: stub/src/amd64-linux.elf-fold.S
modified: stub/src/amd64-linux.elf-main2.c
modified: stub/src/arm.v4a-linux.elf-so_entry.S
modified: stub/src/i386-linux.elf-main2.c
plus generated *.h *.dump *.map
2024-08-29 16:55:18 -07:00
John Reiser
65c362efce
MSVC lacks stpcpy()
...
modified: p_lx_elf.cpp
2024-08-26 18:59:55 -07:00
John Reiser
8065eebca3
--android-shlib for arm32 and i386
...
... including work-around if no memfd_create() on early Android 32-bit
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_elf_enum.h
modified: p_lx_elf.cpp
modified: stub/src/arm.v4a-linux.elf-so_entry.S
modified: stub/src/arm.v4a-linux.elf-so_fold.S
modified: stub/src/i386-linux.elf-so_main.c
modified: stub/src/upxfd_android.c
plus generated *.h *.dump *.map
2024-08-25 15:16:29 -07:00
John Reiser
94eebc3ee5
ELF2: arm32 shared libraries; runs on Android 14 under TermUX
...
NYI: complex DT_INIT (R_RELR, etc.)
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: stub/src/arm.v4a-expand.S
modified: stub/src/arm.v4a-linux.elf-entry.S
modified: stub/src/arm.v4a-linux.elf-so_entry.S
modified: stub/src/arm.v4a-linux.elf-so_fold.S
modified: stub/src/i386-linux.elf-main2.c
modified: stub/src/i386-linux.elf-so_main.c
modified: stub/src/upxfd_android.c
plus generated *.h *.map *.dump
2024-08-25 15:16:29 -07:00
John Reiser
bff5049a98
developer documentation
...
modified: p_lx_elf.cpp
2024-08-25 15:16:29 -07:00
John Reiser
3d58035b41
i386 stub filters 0x49 and 0x46 really are different (but similar!)
...
modified: filter/filter_impl.cpp
modified: p_lx_elf.cpp
modified: stub/src/arch/i386/bxx.S
2024-08-25 15:16:29 -07:00
John Reiser
ea2a190bd1
ELF2 main programs pass src/testsuite and upx-testsuite-v2
...
Decompressing lzma required many adjustments.
Backwards compatibility probably is broken for
stub/amd64-win64.pe.h
stub/arm64-win64.pe.h
Also: shared libraries need memfd_create.
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/scripts/xstrip.py
modified: stub/src/amd64-expand.S
modified: stub/src/arch/amd64/lzma_d.S
modified: stub/src/arch/arm/v4a/lzma_d.S
modified: stub/src/arch/arm/v4t/macros.S
modified: stub/src/arch/arm64/v8/lzma_d.S
modified: stub/src/arch/powerpc/32/lzma_d.S
modified: stub/src/arch/powerpc/64le/lzma_d-common.S
modified: stub/src/arm.v4a-expand.S
modified: stub/src/arm.v4t-linux.shlib-init.S
modified: stub/src/arm64-expand.S
modified: stub/src/i386-expand.S
modified: stub/src/mips.r3000-expand.S
modified: stub/src/powerpc-expand.S
modified: stub/src/powerpc-linux.elf-entry.S
modified: stub/src/powerpc-linux.elf-fold.S
modified: stub/src/powerpc64-expand.S
modified: stub/src/powerpc64-linux.elf-entry.S
modified: stub/src/powerpc64-linux.elf-fold.S
plus generated *.h *.map *.dump
2024-08-25 15:16:29 -07:00
John Reiser
cc87a2c867
ELF2 for mips 32-bit main programs
...
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: stub/src/include/linux.h
modified: p_lx_elf.cpp
modified: stub/Makefile
modified: stub/src/arch/mips/r3000/lzma_d.S
modified: stub/src/arch/mips/r3000/macros.ash
modified: stub/src/arm.v4a-linux.elf-fold.S
modified: stub/src/arm.v4a-linux.elf-main2.c
modified: stub/src/arm.v4a-linux.elf-so_fold.lds
modified: stub/src/arm.v5a-linux.elf-so_fold.lds
modified: stub/src/arm64-linux.elf-so_fold.lds
modified: stub/src/i386-expand.S
modified: stub/src/i386-linux.elf-entry.lds
modified: stub/src/i386-linux.elf-main2.c
modified: stub/src/i386-linux.elf-so_fold.lds
new file: stub/src/mips.r3000-expand.S
new file: stub/src/mips.r3000-linux.elf-entry.lds
modified: stub/src/mips.r3000-linux.elf-fold.S
modified: stub/src/mips.r3000-linux.elf-fold.lds
new file: stub/src/mips.r3000-linux.elf-main2.c
new file: stub/src/mipsel.r3000-expand.S
modified: stub/src/mipsel.r3000-linux.elf-entry.S
new file: stub/src/mipsel.r3000-linux.elf-entry.lds
modified: stub/src/mipsel.r3000-linux.elf-fold.S
modified: stub/src/mipsel.r3000-linux.elf-fold.lds
new file: stub/src/mipsel.r3000-linux.elf-main2.c
modified: stub/src/mipsel.r3000-linux.shlib-init.S
modified: stub/src/powerpc-linux.elf-fold.lds
modified: stub/src/upxfd_android.c
plus generated *.h *.map *.dump
2024-08-25 15:16:29 -07:00