RSDP validation and fixing a few clippy lints

This commit is contained in:
Speedy_Lex
2026-04-24 20:04:23 +02:00
parent 51f32e9edb
commit f49c7d991a
6 changed files with 27 additions and 7 deletions
+21 -3
View File
@@ -9,7 +9,7 @@ pub struct Rsdp {
_oemid: [u8; 6], _oemid: [u8; 6],
revision: u8, revision: u8,
rsdt_address: u32, rsdt_address: u32,
_length: u32, length: u32,
xsdt_address: u64, xsdt_address: u64,
_extended_checksum: u8, _extended_checksum: u8,
_reserved: [u8; 3], _reserved: [u8; 3],
@@ -18,8 +18,26 @@ pub struct Rsdp {
impl Rsdp { impl Rsdp {
pub unsafe fn get_rsdp(already_supplied_rsdp: Option<*const u8>) -> Option<Rsdp> { pub unsafe fn get_rsdp(already_supplied_rsdp: Option<*const u8>) -> Option<Rsdp> {
already_supplied_rsdp.map(|rsdp_ptr| { already_supplied_rsdp.map(|rsdp_ptr| {
// TODO: Validate let rsdp = unsafe { *(rsdp_ptr as *const Rsdp) };
unsafe { *(rsdp_ptr as *const Rsdp) }
assert_eq!(rsdp.signature, *b"RSD PTR ", "RSDP signature check failed");
let mut sum: u8 = 0;
for i in 0..20 {
sum = sum.wrapping_add(unsafe { rsdp_ptr.add(i).read() });
}
assert_eq!(sum, 0, "RSDP checksum failed");
if rsdp.revision >= 2 {
let mut sum: u8 = 0;
for i in 0..rsdp.length as usize {
sum = sum.wrapping_add(unsafe { rsdp_ptr.add(i).read() });
}
assert_eq!(sum, 0, "XSDP checksum failed");
}
rsdp
}) })
} }
+1 -1
View File
@@ -513,7 +513,7 @@ fn select_next_context(
if let Some((next_context_guard, addr_space)) = next_context_guard_opt { if let Some((next_context_guard, addr_space)) = next_context_guard_opt {
// We found a new process! // We found a new process!
return Some((next_context_guard, addr_space)); Some((next_context_guard, addr_space))
} else { } else {
if !was_idle && !Arc::ptr_eq(&prev_context_lock, &idle_context) { if !was_idle && !Arc::ptr_eq(&prev_context_lock, &idle_context) {
// We switch into the idle context // We switch into the idle context
+1 -1
View File
@@ -555,7 +555,7 @@ fn init_sections(mut allocator: BumpAllocator<RmmA>) {
assert_ne!( assert_ne!(
memory_map_area.size, 0, memory_map_area.size, 0,
"RMM should enforce areas are not zeroed" "RMM should enforce areas are not of length 0"
); );
// TODO: Should RMM do this? // TODO: Should RMM do this?
+2 -1
View File
@@ -188,6 +188,7 @@ pub unsafe fn nmi_handler(stack: &InterruptStack) {
let mut len = 2; let mut len = 2;
#[expect(clippy::needless_range_loop)]
for i in 2..32 { for i in 2..32 {
if bp < CurrentRmmArch::PHYS_OFFSET if bp < CurrentRmmArch::PHYS_OFFSET
|| bp.saturating_add(16) >= CurrentRmmArch::PHYS_OFFSET + crate::PML4_SIZE || bp.saturating_add(16) >= CurrentRmmArch::PHYS_OFFSET + crate::PML4_SIZE
@@ -303,7 +304,7 @@ pub fn maybe_run_profiling_helper_forever(cpu_id: LogicalCpuId) {
let apic = &mut crate::arch::device::local_apic::the_local_apic(); let apic = &mut crate::arch::device::local_apic::the_local_apic();
apic.set_lvt_timer((0b01 << 17) | 32); apic.set_lvt_timer((0b01 << 17) | 32);
apic.set_div_conf(0b1011); apic.set_div_conf(0b1011);
apic.set_init_count(0xffff_f); apic.set_init_count(0x000f_ffff);
while ACK.load(Ordering::Relaxed) < NUM_ORDINARY_CPUS.load(Ordering::SeqCst) { while ACK.load(Ordering::Relaxed) < NUM_ORDINARY_CPUS.load(Ordering::SeqCst) {
core::hint::spin_loop(); core::hint::spin_loop();
+1
View File
@@ -37,6 +37,7 @@ pub fn debug_notify(token: &mut CleanLockToken) {
pub struct DebugScheme; pub struct DebugScheme;
#[expect(clippy::enum_clike_unportable_variant)]
#[repr(usize)] #[repr(usize)]
enum SpecialFds { enum SpecialFds {
Default = -1isize as usize, Default = -1isize as usize,
+1 -1
View File
@@ -19,7 +19,7 @@ pub fn resource(token: &mut CleanLockToken) -> Result<Vec<u8>> {
let (contexts, mut token) = contexts.token_split(); let (contexts, mut token) = contexts.token_split();
for context_ref in contexts.iter() { for context_ref in contexts.iter() {
let context = context_ref.read(token.token()); let context = context_ref.read(token.token());
let addr_space = context.addr_space().map(|a| a.clone()); let addr_space = context.addr_space().cloned();
let affinity = context.sched_affinity.to_string(); let affinity = context.sched_affinity.to_string();
let cpu_time_s = context.cpu_time / crate::time::NANOS_PER_SEC; let cpu_time_s = context.cpu_time / crate::time::NANOS_PER_SEC;