feat(paging): enabling write protection
Signed-off-by: Julien CLEMENT <julien.clement@epita.fr>
This commit is contained in:
parent
5ff8596233
commit
f844883192
@ -34,6 +34,7 @@ pub fn init<A>(frame_allocator: &mut A, boot_info: &BootInformation)
|
|||||||
vga::change_color(ColorCode::new(Color::LightCyan, Color::Black));
|
vga::change_color(ColorCode::new(Color::LightCyan, Color::Black));
|
||||||
println!("Starting init");
|
println!("Starting init");
|
||||||
enable_nxe_bit();
|
enable_nxe_bit();
|
||||||
|
enable_write_protect_bit();
|
||||||
memory::kernel_remap(frame_allocator, boot_info);
|
memory::kernel_remap(frame_allocator, boot_info);
|
||||||
gdt::init_gdt();
|
gdt::init_gdt();
|
||||||
interrupts::init_idt();
|
interrupts::init_idt();
|
||||||
@ -46,6 +47,14 @@ fn enable_nxe_bit() {
|
|||||||
unsafe { Efer::update(|efer| *efer |= EferFlags::NO_EXECUTE_ENABLE) }
|
unsafe { Efer::update(|efer| *efer |= EferFlags::NO_EXECUTE_ENABLE) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn enable_write_protect_bit() {
|
||||||
|
println!("Enabling write protection bit");
|
||||||
|
use x86_64::registers::control::{Cr0, Cr0Flags};
|
||||||
|
|
||||||
|
unsafe { Cr0::write(Cr0::read() | Cr0Flags::WRITE_PROTECT) };
|
||||||
|
}
|
||||||
|
|
||||||
fn get_frame_allocator(multiboot_info_addr: usize) -> memory::AreaFrameAllocator {
|
fn get_frame_allocator(multiboot_info_addr: usize) -> memory::AreaFrameAllocator {
|
||||||
let boot_info = unsafe { multiboot2::load(multiboot_info_addr) };
|
let boot_info = unsafe { multiboot2::load(multiboot_info_addr) };
|
||||||
let memory_map_tag = boot_info.memory_map_tag().expect("Memory map tag required");
|
let memory_map_tag = boot_info.memory_map_tag().expect("Memory map tag required");
|
||||||
|
@ -47,8 +47,6 @@ pub fn kernel_remap<A>(allocator: &mut A, boot_info: &BootInformation)
|
|||||||
// section is not loaded to memory
|
// section is not loaded to memory
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
println!("mapping section at addr: {:#x}, size: {:#x}",
|
|
||||||
section.addr, section.size);
|
|
||||||
assert!(section.start_address() % PAGE_SIZE == 0,
|
assert!(section.start_address() % PAGE_SIZE == 0,
|
||||||
"sections need to be page aligned");
|
"sections need to be page aligned");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user