initfs: Kernel panic when reading directory entries
Repro:
use std::{fs::File, io::{Read, Seek, SeekFrom}};
fn main() -> std::io::Result<()> {
let mut file = File::open("initfs:")?;
let mut pos1: [u8; 2] = [0, 0];
file.seek(SeekFrom::Start(1))?;
file.read_exact(&mut pos1)?;
println!("{:?}", pos1);
Ok(())
}
Stack trace:
KERNEL PANIC: panicked at 'index out of bounds: the len is 2 but the index is 2', src/scheme/initfs.rs:185:25
TRACE: FFFFFE80002947F0
FFFFFE80002947F0: FFFFFF00000BD167
FFFFFF00000BD010+0157
rust_begin_unwind
FFFFFE80002948F0: FFFFFF0000015C93
FFFFFF0000015C60+0033
core::panicking::panic_fmt
FFFFFE8000294930: FFFFFF0000015C56
FFFFFF0000015BF0+0066
core::panicking::panic_bounds_check
FFFFFE80002949A0: FFFFFF00000C475B
FFFFFF00000C4390+03CB
<kernel::scheme::initfs::InitFsScheme as syscall::scheme::scheme::Scheme>::read
FFFFFE8000294A40: FFFFFF00000C42DF
FFFFFF00000C4050+028F
syscall::scheme::scheme::Scheme::handle
FFFFFE8000294A90: FFFFFF00000BF277
FFFFFF00000BEF00+0377
kernel::syscall::fs::file_op
FFFFFE8000294B50: FFFFFF0000059A31
FFFFFF0000058BA0+0E91
kernel::syscall::syscall
FFFFFE8000294EE0: FFFFFF00000BCFB0
FFFFFF00000BCF40+0070
__inner_syscall_instruction
FFFFFE8000294F50: FFFFFF00000BCEF3
FFFFFF00000BCEB0+0043
kernel::arch::x86_64::interrupt::syscall::syscall_instruction
0000000000411EF0: 7FFFFFFFFFFFFFFF
B8483E8BFB894853: GUARD PAGE
CPU 1, PID ContextId(65)