Page MenuHomeFreeBSD

D39451.diff
No OneTemporary

D39451.diff

diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c
--- a/sys/arm64/arm64/pmap.c
+++ b/sys/arm64/arm64/pmap.c
@@ -3968,6 +3968,10 @@
mask |= ATTR_S1_XN;
nbits |= ATTR_S1_XN;
}
+ if ((flags & PMAP_ENTER_BTI) != 0) {
+ mask |= ATTR_S1_GP;
+ nbits |= ATTR_S1_GP;
+ }
if (mask == 0)
return;
@@ -4369,6 +4373,8 @@
if ((flags & PMAP_ENTER_WIRED) != 0)
new_l3 |= ATTR_SW_WIRED;
+ if ((flags & PMAP_ENTER_BTI) != 0)
+ new_l3 |= ATTR_S1_GP;
if (pmap->pm_stage == PM_STAGE1) {
if (!ADDR_IS_KERNEL(va))
new_l3 |= ATTR_S1_AP(ATTR_S1_AP_USER) | ATTR_S1_PXN;
@@ -4687,6 +4693,8 @@
if ((prot & VM_PROT_EXECUTE) == 0 ||
m->md.pv_memattr == VM_MEMATTR_DEVICE)
new_l2 |= ATTR_S1_XN;
+ if ((flags & PMAP_ENTER_BTI) != 0)
+ new_l2 |= ATTR_S1_GP;
if (!ADDR_IS_KERNEL(va))
new_l2 |= ATTR_S1_AP(ATTR_S1_AP_USER) | ATTR_S1_PXN;
else
@@ -5025,6 +5033,8 @@
if ((prot & VM_PROT_EXECUTE) == 0 ||
m->md.pv_memattr == VM_MEMATTR_DEVICE)
l3_val |= ATTR_S1_XN;
+ if ((flags & PMAP_ENTER_BTI) != 0)
+ l3_val |= ATTR_S1_GP;
if (!ADDR_IS_KERNEL(va))
l3_val |= ATTR_S1_AP(ATTR_S1_AP_USER) | ATTR_S1_PXN;
else
diff --git a/sys/arm64/include/pte.h b/sys/arm64/include/pte.h
--- a/sys/arm64/include/pte.h
+++ b/sys/arm64/include/pte.h
@@ -70,6 +70,7 @@
#define ATTR_CONTIGUOUS (1UL << 52)
#define ATTR_DBM (1UL << 51)
+#define ATTR_S1_GP (1UL << 50)
#define ATTR_S1_nG (1 << 11)
#define ATTR_AF (1 << 10)
#define ATTR_SH(x) ((x) << 8)
diff --git a/sys/vm/pmap.h b/sys/vm/pmap.h
--- a/sys/vm/pmap.h
+++ b/sys/vm/pmap.h
@@ -107,6 +107,7 @@
#define PMAP_ENTER_NOSLEEP 0x00000100
#define PMAP_ENTER_WIRED 0x00000200
#define PMAP_ENTER_LARGEPAGE 0x00000400
+#define PMAP_ENTER_BTI 0x00800000
#define PMAP_ENTER_RESERVED 0xFF000000
/*

File Metadata

Mime Type
text/plain
Expires
Sun, Aug 2, 9:56 PM (17 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35840248
Default Alt Text
D39451.diff (1 KB)

Event Timeline