mirror of
https://github.com/hexagonal-sun/moss-kernel.git
synced 2026-06-11 02:16:01 -04:00
The generic RecursiveWalker computed the coverage region for each
page-table entry as:
VirtMemoryRegion::new(entry_va, table_coverage).intersection(region)
For the last entry at the PML4 level (PML4[511]) in the kernel
high-half, entry_va + table_coverage wraps past usize::MAX, causing an
arithmetic overflow panic inside end_address().
Fix this in walk.rs by computing the intersection bounds with
saturating_add/min/max directly.
Add regression tests for all levels, ensuring last-element walking is
correct.
libkernel
Architecture-independent kernel building blocks for operating systems.
libkernel provides the core abstractions that a kernel needs to manage memory,
processes, filesystems, and synchronisation, agnostic of the an underlying CPU
architecture. It is designed to run in a no_std environment and uses feature
gates to keep the dependency footprint minimal.
Feature gates
| Feature | Enables | Implies |
|---|---|---|
sync |
Synchronisation primitives (spinlock, mutex, rwlock…) | — |
alloc |
Memory allocators (buddy, slab) and collection types | sync |
paging |
Page tables, PTE helpers | alloc |
proc |
Process identity types (UID/GID, capabilities) | — |
fs |
VFS traits, path manipulation, block I/O | proc, sync |
proc_vm |
Process virtual-memory management (mmap, brk, CoW) | paging, fs |
kbuf |
Async-aware circular kernel buffers | sync |
all |
Everything above | all of the above |
Quick start
Add libkernel to your Cargo.toml with only the features you need:
[dependencies]
libkernel = { version = "0.1", features = ["sync", "proc"] }
The CpuOps trait
Most synchronisation and memory primitives are generic over a
CpuOps
implementation. This trait abstracts the handful of arch-specific operations
(core ID, interrupt masking, halt) that the portable code depends on.
License
Licensed under the MIT license. See LICENSE for details.