Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Jan 2021 15:57:48 GMT
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 613a08cfa2e0 - main - rtld: map without PROT_EXEC for relocation
Message-ID:  <202101051557.105FvmZf064874@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=613a08cfa2e0fb1b99906961c7a676d527e17f05

commit 613a08cfa2e0fb1b99906961c7a676d527e17f05
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2021-01-04 18:55:44 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2021-01-05 15:57:14 +0000

    rtld: map without PROT_EXEC for relocation
    
    This makes text segment relocation work under W^X.
    
    Submitted by:   Greg V <greg@unrelenting.technology> (original version)
    Reviewed by:    kib
    MFC after:      2 weeks
    Differential Revision:  https://reviews.freebsd.org/D27953
---
 libexec/rtld-elf/rtld.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index 27262ab9dbc5..7b8bfba84d7d 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -2982,7 +2982,8 @@ reloc_textrel_prot(Obj_Entry *obj, bool before)
 		base = obj->relocbase + trunc_page(ph->p_vaddr);
 		sz = round_page(ph->p_vaddr + ph->p_filesz) -
 		    trunc_page(ph->p_vaddr);
-		prot = convert_prot(ph->p_flags) | (before ? PROT_WRITE : 0);
+		prot = before ? (PROT_READ | PROT_WRITE) :
+		    convert_prot(ph->p_flags);
 		if (mprotect(base, sz, prot) == -1) {
 			_rtld_error("%s: Cannot write-%sable text segment: %s",
 			    obj->path, before ? "en" : "dis",



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202101051557.105FvmZf064874>