Nothing to see here, move along
at main 124 lines 3.7 kB view raw
1use crate::error::KernelError; 2use crate::syscall; 3 4crate::kernel_test!( 5 fn validate_user_vaddr_rejects_null() { 6 let result = syscall::validate_user_vaddr(0); 7 assert!( 8 result == Err(KernelError::InvalidAddress), 9 "null address should be rejected" 10 ); 11 } 12); 13 14crate::kernel_test!( 15 fn validate_user_vaddr_rejects_kernel_half() { 16 let result = syscall::validate_user_vaddr(0xFFFF_8000_0000_0000); 17 assert!( 18 result == Err(KernelError::InvalidAddress), 19 "kernel-half address should be rejected" 20 ); 21 22 let boundary = syscall::validate_user_vaddr(0x0000_8000_0000_0000); 23 assert!( 24 boundary == Err(KernelError::InvalidAddress), 25 "USER_ADDR_LIMIT boundary should be rejected" 26 ); 27 } 28); 29 30crate::kernel_test!( 31 fn validate_user_vaddr_accepts_valid() { 32 let result = syscall::validate_user_vaddr(0x0000_4000_0000_0000); 33 assert!(result.is_ok(), "valid user address should be accepted"); 34 35 let low = syscall::validate_user_vaddr(0x1000); 36 assert!(low.is_ok(), "MIN_USER_VADDR should be accepted"); 37 } 38); 39 40crate::kernel_test!( 41 fn u8_from_reg_rejects_overflow() { 42 let result = syscall::u8_from_reg(256); 43 assert!( 44 result == Err(KernelError::InvalidParameter), 45 "256 should not fit in u8" 46 ); 47 48 let valid = syscall::u8_from_reg(255); 49 assert!(valid.is_ok(), "255 should fit in u8"); 50 } 51); 52 53crate::kernel_test!( 54 fn user_addr_limit_boundary() { 55 let limit = crate::syscall::USER_ADDR_LIMIT; 56 57 assert!( 58 crate::syscall::validate_user_vaddr(limit).is_err(), 59 "USER_ADDR_LIMIT ({:#x}) itself must be rejected", 60 limit 61 ); 62 63 assert!( 64 crate::syscall::validate_user_vaddr(limit - 1).is_ok(), 65 "USER_ADDR_LIMIT - 1 ({:#x}) must be accepted", 66 limit - 1 67 ); 68 69 assert!( 70 crate::syscall::validate_user_vaddr(0).is_err(), 71 "address 0 must be rejected (null page)" 72 ); 73 74 assert!( 75 crate::syscall::validate_user_vaddr(0x1000).is_ok(), 76 "MIN_USER_VADDR (0x1000) must be accepted" 77 ); 78 } 79); 80 81crate::kernel_test!( 82 fn user_virt_addr_rejects_kernel_address() { 83 assert!( 84 crate::syscall::UserVirtAddr::new(0xFFFF_8000_0000_0000).is_err(), 85 "kernel address should be rejected by UserVirtAddr" 86 ); 87 88 assert!( 89 crate::syscall::UserVirtAddr::new(0).is_err(), 90 "null address should be rejected by UserVirtAddr" 91 ); 92 93 assert!( 94 crate::syscall::UserVirtAddr::new(0x40_0000).is_ok(), 95 "valid user address should pass UserVirtAddr" 96 ); 97 } 98); 99 100crate::kernel_test!( 101 fn user_virt_addr_rejects_just_below_minimum() { 102 let below_min = crate::syscall::MIN_USER_VADDR - 1; 103 assert!( 104 crate::syscall::UserVirtAddr::new(below_min).is_err(), 105 "address {:#x} (MIN_USER_VADDR - 1) must be rejected", 106 below_min 107 ); 108 109 assert!( 110 crate::syscall::UserVirtAddr::new(1).is_err(), 111 "address 0x1 must be rejected (below MIN_USER_VADDR)" 112 ); 113 114 assert!( 115 crate::syscall::UserVirtAddr::new(0xFFF).is_err(), 116 "address 0xFFF must be rejected (last byte of null page)" 117 ); 118 119 assert!( 120 crate::syscall::UserVirtAddr::new(crate::syscall::MIN_USER_VADDR).is_ok(), 121 "MIN_USER_VADDR itself must be accepted" 122 ); 123 } 124);