Nothing to see here, move along
at main 87 lines 2.6 kB view raw
1use crate::syscall::{MIN_USER_VADDR, USER_ADDR_LIMIT}; 2 3crate::kernel_test!( 4 fn elf_segment_in_kernel_space_rejected() { 5 let segments = [lancer_core::elf::LoadSegment { 6 vaddr: 0xFFFF_8000_0000_0000, 7 memsz: 0x1000, 8 filesz: 0x1000, 9 file_offset: 0, 10 writable: false, 11 executable: true, 12 }]; 13 14 let all_user_space = segments.iter().all(|seg| { 15 seg.vaddr >= MIN_USER_VADDR 16 && seg 17 .vaddr 18 .checked_add(seg.memsz) 19 .is_some_and(|end| end <= USER_ADDR_LIMIT) 20 }); 21 22 assert!(!all_user_space, "segment in kernel-half should be rejected"); 23 } 24); 25 26crate::kernel_test!( 27 fn elf_entry_not_in_executable_segment_rejected() { 28 let segments = [lancer_core::elf::LoadSegment { 29 vaddr: 0x40_0000, 30 memsz: 0x1000, 31 filesz: 0x1000, 32 file_offset: 0, 33 writable: true, 34 executable: false, 35 }]; 36 let entry = 0x40_0000; 37 38 let entry_in_executable = segments 39 .iter() 40 .any(|seg| seg.executable && entry >= seg.vaddr && entry < seg.vaddr + seg.memsz); 41 42 assert!( 43 !entry_in_executable, 44 "entry in non-executable segment should be rejected" 45 ); 46 } 47); 48 49crate::kernel_test!( 50 fn elf_overlapping_segments_rejected() { 51 let segments = [ 52 lancer_core::elf::LoadSegment { 53 vaddr: 0x40_0000, 54 memsz: 0x2000, 55 filesz: 0x2000, 56 file_offset: 0, 57 writable: false, 58 executable: true, 59 }, 60 lancer_core::elf::LoadSegment { 61 vaddr: 0x40_1000, 62 memsz: 0x1000, 63 filesz: 0x1000, 64 file_offset: 0x2000, 65 writable: true, 66 executable: false, 67 }, 68 ]; 69 70 let has_overlap = (0..segments.len()).any(|i| { 71 let a = segments[i]; 72 let a_base = a.vaddr & !0xFFF; 73 let a_end = (a.vaddr + a.memsz + 0xFFF) & !0xFFF; 74 ((i + 1)..segments.len()).any(|j| { 75 let b = segments[j]; 76 let b_base = b.vaddr & !0xFFF; 77 let b_end = (b.vaddr + b.memsz + 0xFFF) & !0xFFF; 78 a_base < b_end && b_base < a_end 79 }) 80 }); 81 82 assert!( 83 has_overlap, 84 "overlapping page-level segments should be detected" 85 ); 86 } 87);