Author: andrew
Date: Wed Aug 15 13:19:15 2018
New Revision: 337842
URL: https://svnweb.freebsd.org/changeset/base/337842

Log:
  Set the Execute Never flags in EFI device memory as required by the ARMv8
  spec.
  
  Sponsored by: DARPA, AFRL

Modified:
  head/sys/arm64/arm64/efirt_machdep.c

Modified: head/sys/arm64/arm64/efirt_machdep.c
==============================================================================
--- head/sys/arm64/arm64/efirt_machdep.c        Wed Aug 15 13:13:19 2018        
(r337841)
+++ head/sys/arm64/arm64/efirt_machdep.c        Wed Aug 15 13:19:15 2018        
(r337842)
@@ -162,7 +162,7 @@ bool
 efi_create_1t1_map(struct efi_md *map, int ndesc, int descsz)
 {
        struct efi_md *p;
-       pt_entry_t *l3;
+       pt_entry_t *l3, l3_attr;
        vm_offset_t va;
        uint64_t idx;
        int i, mode;
@@ -218,12 +218,17 @@ efi_create_1t1_map(struct efi_md *map, int ndesc, int 
                }
 
                printf("MAP %lx mode %x pages %lu\n", p->md_phys, mode, 
p->md_pages);
+
+               l3_attr = ATTR_DEFAULT | ATTR_IDX(mode) | ATTR_AP(ATTR_AP_RW) |
+                   L3_PAGE;
+               if (mode == VM_MEMATTR_DEVICE)
+                       l3_attr |= ATTR_UXN | ATTR_PXN;
+
                VM_OBJECT_WLOCK(obj_1t1_pt);
                for (va = p->md_phys, idx = 0; idx < p->md_pages; idx++,
                    va += PAGE_SIZE) {
                        l3 = efi_1t1_l3(va);
-                       *l3 = va | ATTR_DEFAULT | ATTR_IDX(mode) |
-                           ATTR_AP(ATTR_AP_RW) | L3_PAGE;
+                       *l3 = va | l3_attr;
                }
                VM_OBJECT_WUNLOCK(obj_1t1_pt);
        }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to