From 5ccd2414afb511d1c4c48429d1a2758d5f6886ea Mon Sep 17 00:00:00 2001 From: Anhad Singh Date: Sat, 3 Jan 2026 22:37:36 +1100 Subject: [PATCH] fix(context/memory): incorrect `remaining_src_span` The `AddrSpaceWrapper::r#move` is used by `mremap` to move, expand or shrink existing mappings. `src_span.count`: Size of old region in pages `new_page_count`: Size of new region in pages Fixes the following panic when running `cargo`: ``` KERNEL PANIC: panicked at src/context/memory.rs:1969:9: assertion failed: self.info.can_extract(false) FP ffff80000cbbf2c0: PC ffffffff8004ced5 FFFFFFFF8004CD50+0185 kernel::panic::panic_handler_inner FP ffff80000cbbf3a0: PC ffffffff8004ac99 FP ffff80000cbbf3b0: PC ffffffff800a34df FP ffff80000cbbf3e0: PC ffffffff800a34b4 FP ffff80000cbbf430: PC ffffffff8001c029 FFFFFFFF8001BF10+0119 kernel::context::memory::Grant::extract FP ffff80000cbbf4a0: PC ffffffff800181ac FFFFFFFF80016D30+147C kernel::context::memory::AddrSpaceWrapper::move FP ffff80000cbbfd30: PC ffffffff80037c08 FFFFFFFF80035660+25A8 kernel::syscall::syscall FP ffff80000cbbfe90: PC ffffffff8008efbf FFFFFFFF8008EF10+00AF __inner_syscall_instruction FP ffff80000cbbff50: PC ffffffff80085d33 FFFFFFFF80085CF0+0043 kernel::arch::x86_64::interrupt::syscall::syscall_instruction 0000000000004455: GUARD PAGE CPU #2, CID 0xffffff7f80133690 NAME: /scheme/initfs/bin/redoxfs, DEBUG ID: 43 SYSCALL: mremap(0x2177F000, 0x8000, 0x0, 0xC7000, 0x60000) HALT ``` ``` mremap_flags = MremapFlags( 0x0, ) prot_flags = MapFlags( PROT_WRITE | PROT_READ, ) ``` Signed-off-by: Anhad Singh --- src/context/memory.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/context/memory.rs b/src/context/memory.rs index ecc8ec5f5e..f8ff1bfeea 100644 --- a/src/context/memory.rs +++ b/src/context/memory.rs @@ -405,7 +405,8 @@ impl AddrSpaceWrapper { )?); } - let mut remaining_src_span = PageSpan::new(src_span.base, new_page_count); + let mut remaining_src_span = + PageSpan::new(src_span.base, cmp::min(src_span.count, new_page_count)); let to_remap = src_grants .conflicts(remaining_src_span)