@@ -225,7 +225,7 @@ where
225225 let frame = frame_allocator
226226 . allocate_frame ( )
227227 . 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 ;
229229 match unsafe { kernel_page_table. map_to ( page, frame, flags, frame_allocator) } {
230230 Ok ( tlb) => tlb. flush ( ) ,
231231 Err ( err) => panic ! ( "failed to map page {:?}: {:?}" , page, err) ,
@@ -278,7 +278,8 @@ where
278278 PhysFrame :: range_inclusive ( framebuffer_start_frame, framebuffer_end_frame) . enumerate ( )
279279 {
280280 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 ;
282283 match unsafe { kernel_page_table. map_to ( page, frame, flags, frame_allocator) } {
283284 Ok ( tlb) => tlb. flush ( ) ,
284285 Err ( err) => panic ! (
@@ -306,7 +307,7 @@ where
306307 let ramdisk_page_count = ( system_info. ramdisk_len - 1 ) / Size4KiB :: SIZE ;
307308 let ramdisk_physical_end_page = ramdisk_physical_start_page + ramdisk_page_count;
308309
309- let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE ;
310+ let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE | PageTableFlags :: NO_EXECUTE ;
310311 for ( i, frame) in
311312 PhysFrame :: range_inclusive ( ramdisk_physical_start_page, ramdisk_physical_end_page)
312313 . enumerate ( )
@@ -339,7 +340,8 @@ where
339340
340341 for frame in PhysFrame :: range_inclusive ( start_frame, end_frame) {
341342 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 ;
343345 match unsafe { kernel_page_table. map_to ( page, frame, flags, frame_allocator) } {
344346 Ok ( tlb) => tlb. ignore ( ) ,
345347 Err ( err) => panic ! (
@@ -380,7 +382,7 @@ where
380382 u16 :: from( index)
381383 ) ;
382384 }
383- let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE ;
385+ let flags = PageTableFlags :: PRESENT | PageTableFlags :: WRITABLE | PageTableFlags :: NO_EXECUTE ;
384386 entry. set_frame ( page_tables. kernel_level_4_frame , flags) ;
385387
386388 Some ( index)
@@ -481,7 +483,8 @@ where
481483 let start_page = Page :: containing_address ( boot_info_addr) ;
482484 let end_page = Page :: containing_address ( memory_map_regions_end - 1u64 ) ;
483485 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 ;
485488 let frame = frame_allocator
486489 . allocate_frame ( )
487490 . expect ( "frame allocation for boot info failed" ) ;
0 commit comments