From f362616fdc6af736c43c77ca07187b4a205f8a0b Mon Sep 17 00:00:00 2001
From: Mark <alnyan@airmail.cc>
Date: Mon, 28 Sep 2020 14:21:55 +0300
Subject: [PATCH] Add user attribute to pages

---
 src/mem.rs | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/mem.rs b/src/mem.rs
index b4c7a0a..aa388c6 100644
--- a/src/mem.rs
+++ b/src/mem.rs
@@ -3,6 +3,7 @@ unsafe fn load_cr3(value: usize) {
 }
 
 const PAGE_HUGE: u64 = 1 << 7;
+const PAGE_USER: u64 = 1 << 2;
 const PAGE_WRITE: u64 = 1 << 1;
 const PAGE_PRESENT: u64 = 1 << 0;
 
@@ -13,18 +14,18 @@ static mut TABLES: [u64; 512 * 6] = [0; 512 * 6];
 unsafe fn setup_tables() {
     for i in 0 .. 512 * 4 {
         // pd[i] = 2MiB block
-        TABLES[i + 512 * 2] = (i << 21) as u64 | PAGE_HUGE | PAGE_WRITE | PAGE_PRESENT;
+        TABLES[i + 512 * 2] = (i << 21) as u64 | PAGE_HUGE | PAGE_WRITE | PAGE_PRESENT | PAGE_USER;
     }
 
     for i in 0 .. 4 {
         // pdpt[i] = pd_i
-        TABLES[512 + i] = (&TABLES[i * 512 + 512 * 2]) as *const _ as u64 | PAGE_WRITE | PAGE_PRESENT;
+        TABLES[512 + i] = (&TABLES[i * 512 + 512 * 2]) as *const _ as u64 | PAGE_WRITE | PAGE_PRESENT | PAGE_USER;
     }
 
     // pml4[0] = PRESENT | pdpt
-    TABLES[0] = (&TABLES[512]) as *const _ as u64 | PAGE_WRITE | PAGE_PRESENT;
+    TABLES[0] = (&TABLES[512]) as *const _ as u64 | PAGE_WRITE | PAGE_PRESENT | PAGE_USER;
     // pml4[510] = PRESENT | pdpt
-    TABLES[510] = (&TABLES[512]) as *const _ as u64 | PAGE_WRITE | PAGE_PRESENT;
+    TABLES[510] = (&TABLES[512]) as *const _ as u64 | PAGE_WRITE | PAGE_PRESENT | PAGE_USER;
 }
 
 pub fn setup_upper() {