xous-core/kernel
tunnell 5e42a656cf Check for overflow in IncreaseHeap syscall
`process_inner.mem_heap_size + delta` can wrap on RV32 if a
client requests a `delta` close to `usize::MAX`. A wrapped
value can land below `mem_heap_max` and pass the cap check,
letting the call proceed with a bogus heap size.

Use `checked_add` and return `Error::OutOfMemory` on overflow.

Adds a hosted-mode behavioral test that sends `usize::MAX` as
`delta` and asserts the syscall rejects it. The test doesn't
cleanly distinguish patched from unpatched code on 64-bit hosted
(both paths reject absurd deltas, just at different layers), but
it locks in the expected behavior as regression coverage.

Signed-off-by: tunnell <tunnell@users.noreply.github.com>
Assisted-by: Claude Code (Opus 4.7)
2026-04-20 09:13:47 -05:00
..
bin add the .a artifacts to the tree for the asm.S 2024-01-06 16:41:40 +08:00
src Check for overflow in IncreaseHeap syscall 2026-04-20 09:13:47 -05:00
test add a target for the kernel specifically on the boards 2025-05-06 19:09:37 +08:00
assemble.ps1 kernel: asm: align kernel stack to 16 bytes 2023-12-29 18:15:48 +08:00
assemble.sh kernel: asm: align kernel stack to 16 bytes 2023-12-29 18:15:48 +08:00
build.rs ok, format the kernel now that all in-line assembly has been checked 2024-01-14 19:27:14 +08:00
Cargo.toml bump utralib version for publication 2026-01-29 19:12:00 +08:00
link.x add an "endcap" to the kernel region 2023-01-17 23:07:05 +08:00
README.md adding license info to README 2021-01-25 14:57:39 +01:00

Xous Kernel

This contains the core kernel for Xous. It requires a stage 1 loader in order to start up, as it assumes the system is already running in Supervisor mode.

Building

To build the kernel, you will need a riscv32 target for Rust. Possible targets include riscv32i-unknown-none-elf, riscv32imac-unknown-none-elf, or riscv32imac-unknown-xous-elf.

  1. Decide what target you want. For simple, embedded systems this could be riscv32i-unknown-none-elf, and for more complex systems with compressed instructions you could use riscv32imac-unknown-none-elf.
  2. Get Rust. Go to https://rustup.rs/ and follow its instructions.
  3. Install the proper toolchain: rustup target add ${target_arch}
  4. Build the kernel: cargo build --release --target ${target_arch}

Using

To use the kernel, you must package it up into an arguments binary with xous-tools.

Testing

TBD

Contribution Guidelines

Contributor Covenant

Please see CONTRIBUTING for details on how to make a contribution.

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide its terms.

License

Copyright © 2020

This project is licensed under the Apache License 2.0 LICENSE. For accurate information, please check individual files.