@@ -225,7 +225,7 @@ where
225
225
let frame = frame_allocator
226
226
. allocate_frame ( )
227
227
. expect ( "frame allocation failed when mapping a kernel stack" ) ;
228
- let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE ;
228
+ let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE | PageTableFlags :: NO_EXECUTE ;
229
229
match unsafe { kernel_page_table. map_to ( page, frame, flags, frame_allocator) } {
230
230
Ok ( tlb) => tlb. flush ( ) ,
231
231
Err ( err) => panic ! ( "failed to map page {:?}: {:?}" , page, err) ,
@@ -278,7 +278,8 @@ where
278
278
PhysFrame :: range_inclusive ( framebuffer_start_frame, framebuffer_end_frame) . enumerate ( )
279
279
{
280
280
let page = start_page + u64:: from_usize ( i) ;
281
- let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE ;
281
+ let flags =
282
+ PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE | PageTableFlags :: NO_EXECUTE ;
282
283
match unsafe { kernel_page_table. map_to ( page, frame, flags, frame_allocator) } {
283
284
Ok ( tlb) => tlb. flush ( ) ,
284
285
Err ( err) => panic ! (
@@ -306,7 +307,7 @@ where
306
307
let ramdisk_page_count = ( system_info. ramdisk_len - 1 ) / Size4KiB :: SIZE ;
307
308
let ramdisk_physical_end_page = ramdisk_physical_start_page + ramdisk_page_count;
308
309
309
- let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE ;
310
+ let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE | PageTableFlags :: NO_EXECUTE ;
310
311
for ( i, frame) in
311
312
PhysFrame :: range_inclusive ( ramdisk_physical_start_page, ramdisk_physical_end_page)
312
313
. enumerate ( )
@@ -339,7 +340,8 @@ where
339
340
340
341
for frame in PhysFrame :: range_inclusive ( start_frame, end_frame) {
341
342
let page = Page :: containing_address ( offset + frame. start_address ( ) . as_u64 ( ) ) ;
342
- let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE ;
343
+ let flags =
344
+ PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE | PageTableFlags :: NO_EXECUTE ;
343
345
match unsafe { kernel_page_table. map_to ( page, frame, flags, frame_allocator) } {
344
346
Ok ( tlb) => tlb. ignore ( ) ,
345
347
Err ( err) => panic ! (
@@ -380,7 +382,7 @@ where
380
382
u16 :: from( index)
381
383
) ;
382
384
}
383
- let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE ;
385
+ let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE | PageTableFlags :: NO_EXECUTE ;
384
386
entry. set_frame ( page_tables. kernel_level_4_frame , flags) ;
385
387
386
388
Some ( index)
@@ -481,7 +483,8 @@ where
481
483
let start_page = Page :: containing_address ( boot_info_addr) ;
482
484
let end_page = Page :: containing_address ( memory_map_regions_end - 1u64 ) ;
483
485
for page in Page :: range_inclusive ( start_page, end_page) {
484
- let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE ;
486
+ let flags =
487
+ PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE | PageTableFlags :: NO_EXECUTE ;
485
488
let frame = frame_allocator
486
489
. allocate_frame ( )
487
490
. expect ( "frame allocation for boot info failed" ) ;
0 commit comments