x86_64: pmap: enable kernel-mode write-protection

This commit is contained in:
2026-04-01 18:06:50 +01:00
parent 8b41f5e681
commit 15c2207ab9
3 changed files with 17 additions and 2 deletions
+2 -1
View File
@@ -1,8 +1,8 @@
#ifndef ARCH_PAGING_H_
#define ARCH_PAGING_H_
#include <kernel/types.h>
#include <kernel/compiler.h>
#include <kernel/types.h>
#ifdef __cplusplus
extern "C" {
@@ -55,6 +55,7 @@ enum page_size {
defined in pmap_ctrl.S */
extern int gigabyte_pages(void);
extern int enable_nx(void);
extern int enable_wp(void);
#ifdef __cplusplus
}
+2
View File
@@ -351,6 +351,8 @@ void pmap_bootstrap(void)
can_use_gbpages == 1 ? "en" : "dis");
enable_nx();
printk("pmap: NX protection enabled");
enable_wp();
printk("pmap: kernel-mode write protection enabled");
enum page_size hugepage = PS_2M;
if (can_use_gbpages) {
+13 -1
View File
@@ -24,12 +24,13 @@ gigabyte_pages:
1: mov $0x1, %rax
jmp 3f
2: mov $0x0, %rax
2: mov $0x0, %rax
3: pop %rbx
pop %rbp
ret
.global enable_nx
.type enable_nx, @function
@@ -40,3 +41,14 @@ enable_nx:
wrmsr
ret
.global enable_wp
.type enable_wp, @function
enable_wp:
mov %cr0, %rax
or $0x10000, %rax
mov %rax, %cr0
ret