Skip to content

Commit 3e49682

Browse files
committed
Make the kernel respect the write protection bits by default
1 parent 119beee commit 3e49682

File tree

2 files changed

+7
-11
lines changed

2 files changed

+7
-11
lines changed

src/bin/bios.rs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,6 @@ fn bootloader_main(
133133
page_tables,
134134
system_info,
135135
);
136-
137-
/*
138-
// Make sure that the kernel respects the write-protection bits, even when in ring 0.
139-
enable_write_protect_bit();
140-
141-
*/
142136
}
143137

144138
fn init_logger(framebuffer_start: PhysAddr, framebuffer_size: usize) -> FrameBufferInfo {
@@ -197,11 +191,6 @@ fn create_page_tables(
197191
}
198192
}
199193

200-
fn enable_write_protect_bit() {
201-
use x86_64::registers::control::{Cr0, Cr0Flags};
202-
unsafe { Cr0::update(|cr0| *cr0 |= Cr0Flags::WRITE_PROTECT) };
203-
}
204-
205194
fn detect_rsdp() -> Option<PhysAddr> {
206195
use core::ptr::NonNull;
207196
use rsdp::{

src/binary/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ where
9797

9898
// Enable support for the no-execute bit in page tables.
9999
enable_nxe_bit();
100+
// Make the kernel respect the write-protection bits even when in ring 0 by default
101+
enable_write_protect_bit();
100102

101103
let (entry_point, mut used_entries) =
102104
load_kernel::load_kernel(kernel_bytes, kernel_page_table, frame_allocator)
@@ -412,3 +414,8 @@ fn enable_nxe_bit() {
412414
use x86_64::registers::control::{Efer, EferFlags};
413415
unsafe { Efer::update(|efer| *efer |= EferFlags::NO_EXECUTE_ENABLE) }
414416
}
417+
418+
fn enable_write_protect_bit() {
419+
use x86_64::registers::control::{Cr0, Cr0Flags};
420+
unsafe { Cr0::update(|cr0| *cr0 |= Cr0Flags::WRITE_PROTECT) };
421+
}

0 commit comments

Comments
 (0)