public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
* [glibc] aarch64: Respect p_flags when protecting code with PROT_BTI
@ 2020-07-24  7:53 Szabolcs Nagy
  0 siblings, 0 replies; only message in thread
From: Szabolcs Nagy @ 2020-07-24  7:53 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=7ebd114211dcd290efd54e610bbde0765bd7764c

commit 7ebd114211dcd290efd54e610bbde0765bd7764c
Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date:   Mon Jul 13 11:28:18 2020 +0100

    aarch64: Respect p_flags when protecting code with PROT_BTI
    
    Use PROT_READ and PROT_WRITE according to the load segment p_flags
    when adding PROT_BTI.
    
    This is before processing relocations which may drop PROT_BTI in
    case of textrels.  Executable stacks are not protected via PROT_BTI
    either.  PROT_BTI is hardening in case memory corruption happened,
    it's value is reduced if there is writable and executable memory
    available so missing it on such memory is fine, but we should
    respect the p_flags and should not drop PROT_WRITE.

Diff:
---
 sysdeps/aarch64/dl-bti.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/sysdeps/aarch64/dl-bti.c b/sysdeps/aarch64/dl-bti.c
index 965ddcc732..196e462520 100644
--- a/sysdeps/aarch64/dl-bti.c
+++ b/sysdeps/aarch64/dl-bti.c
@@ -24,13 +24,20 @@ static int
 enable_bti (struct link_map *map, const char *program)
 {
   const ElfW(Phdr) *phdr;
-  unsigned prot = PROT_READ | PROT_EXEC | PROT_BTI;
+  unsigned prot;
 
   for (phdr = map->l_phdr; phdr < &map->l_phdr[map->l_phnum]; ++phdr)
     if (phdr->p_type == PT_LOAD && (phdr->p_flags & PF_X))
       {
 	void *start = (void *) (phdr->p_vaddr + map->l_addr);
 	size_t len = phdr->p_memsz;
+
+	prot = PROT_EXEC | PROT_BTI;
+	if (phdr->p_flags & PF_R)
+	  prot |= PROT_READ;
+	if (phdr->p_flags & PF_W)
+	  prot |= PROT_WRITE;
+
 	if (__mprotect (start, len, prot) < 0)
 	  {
 	    if (program)


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-07-24  7:53 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-24  7:53 [glibc] aarch64: Respect p_flags when protecting code with PROT_BTI Szabolcs Nagy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).