From afeaeeddecaef23171fc4af5962d94192554d5ae Mon Sep 17 00:00:00 2001 From: John Reiser Date: Sun, 23 Oct 2022 10:37:39 -0700 Subject: [PATCH] munmap(, Phdr[C_TEXT=1].p_memsz); // not .p_vaddr modified: stub/src/arm64-linux.elf-fold.S modified: stub/src/powerpc64le-linux.elf-fold.S --- src/stub/src/arm64-linux.elf-fold.S | 6 +++--- src/stub/src/powerpc64le-linux.elf-fold.S | 6 ++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/stub/src/arm64-linux.elf-fold.S b/src/stub/src/arm64-linux.elf-fold.S index 38e6c011..5fcc5d94 100644 --- a/src/stub/src/arm64-linux.elf-fold.S +++ b/src/stub/src/arm64-linux.elf-fold.S @@ -36,6 +36,8 @@ NBPW= 8 sz_Ehdr= 8*NBPW sz_Phdr= 7*NBPW p_vaddr= 4+4+8 + p_filesz= 4+4+8+8+8 + p_memsz= 4+4+8+8+8+8 sz_l_info = 12 sz_p_info = 12 @@ -171,10 +173,8 @@ xPMASK .req x20 mov xfexp,x0 // entry address // Discard pages of compressed input data (includes [ADRC,+LENC) ) - ldr x1,[xelfa,#p_vaddr+sz_Phdr+sz_Ehdr] // Phdr[C_TEXT= 1].p_vaddr - ldr x2,[xelfa,#p_vaddr +sz_Ehdr] // Phdr[C_BASE= 0].p_vaddr + ldr x1,[xelfa,#p_memsz+sz_Phdr+sz_Ehdr] // Phdr[C_TEXT= 1].p_memsz mov x0,xelfa // hi &Elf64_Ehdr - sub x1,x1,x2 call munmap // discard C_TEXT compressed data // Map 1 page of /proc/self/exe so that munmap does not remove all references diff --git a/src/stub/src/powerpc64le-linux.elf-fold.S b/src/stub/src/powerpc64le-linux.elf-fold.S index f9e9f36b..650d1342 100644 --- a/src/stub/src/powerpc64le-linux.elf-fold.S +++ b/src/stub/src/powerpc64le-linux.elf-fold.S @@ -220,12 +220,10 @@ noTOC: #endif //} mr r_exp,a0 // save &entry (.entry when BIG_ENDIAN) -p_vaddr= 4+4+8 +p_memsz= 4+4+ 4*NBPW // Discard pages of compressed data (includes [ADRX,+LENX) ) - ld a1,p_vaddr+szElf64_Phdr+szElf64_Ehdr(r_elfa) // Phdr[C_TEXT= 1].p_vaddr - ld r0,p_vaddr +szElf64_Ehdr(r_elfa) // Phdr[C_BASE= 0].p_vaddr + ld a1,p_memsz+szElf64_Phdr+szElf64_Ehdr(r_elfa) // Phdr[C_TEXT= 1].p_memsz movr a0,r_elfa // hi elfaddr - subf a1,r0,a1 // length call munmap # discard C_TEXT compressed data // first page of /proc/self/exe, to preserve it despite munmap(ADRU, LENU)