Nothing to see here, move along
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);