Skip to content

Commit dea9b80

Browse files
authored
Merge pull request #362 from YdrMaster/main
fix(kernel-hal): vdso version string 可能超过 64 字节
2 parents ba54f45 + 18c883e commit dea9b80

File tree

3 files changed

+40
-31
lines changed

3 files changed

+40
-31
lines changed

Cargo.lock

+25-25
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

kernel-hal/src/common/vdso.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,10 @@ pub struct Features {
4747
impl VdsoConstants {
4848
/// Set version string.
4949
pub fn set_version_string(&mut self, s: &str) {
50-
let len = s.len().min(64);
50+
let bytes = s.as_bytes();
51+
let len = bytes.len().min(64);
5152
self.version_string_len = len as u64;
52-
self.version_string.0[..len].copy_from_slice(s.as_bytes());
53+
self.version_string.0[..len].copy_from_slice(&bytes[..len]);
5354
}
5455
}
5556

zCore/src/platform/riscv/entry.rs

+12-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use super::{
33
consts::{kernel_mem_info, MAX_HART_NUM, STACK_PAGES_PER_HART},
44
};
55
use core::arch::asm;
6-
use dtb_walker::{Dtb, DtbObj, Property, Str, WalkOperation::*};
6+
use dtb_walker::{Dtb, DtbObj, HeaderError::*, Property, Str, WalkOperation::*};
77
use kernel_hal::KernelConfig;
88

99
/// 内核入口。
@@ -49,15 +49,19 @@ static mut BOOT_PAGE_TABLE: BootPageTable = BootPageTable::ZERO;
4949
extern "C" fn primary_rust_main(hartid: usize, device_tree_paddr: usize) -> ! {
5050
// 清零 bss 段
5151
zero_bss();
52-
let secondary_hart_start = secondary_hart_start as usize;
5352
// 使能启动页表
5453
let sstatus = unsafe {
5554
BOOT_PAGE_TABLE.init();
5655
BOOT_PAGE_TABLE.launch(hartid)
5756
};
5857
// 检查设备树
5958
// 副核启动完成前跳板页一直存在,所以可以使用物理地址直接访问设备树
60-
let dtb = unsafe { Dtb::from_raw_parts_unchecked(device_tree_paddr as _) };
59+
let dtb = unsafe {
60+
Dtb::from_raw_parts_filtered(device_tree_paddr as _, |e| {
61+
matches!(e, Misaligned(4) | LastCompVersion(_))
62+
})
63+
}
64+
.unwrap();
6165
let mem_info = kernel_mem_info();
6266
// 打印启动信息
6367
println!(
@@ -74,7 +78,11 @@ device tree: {device_tree_paddr:016x}..{:016x}
7478
device_tree_paddr + dtb.total_size(),
7579
);
7680
// 启动副核
77-
boot_secondary_harts(hartid, dtb, secondary_hart_start);
81+
boot_secondary_harts(
82+
hartid,
83+
dtb,
84+
secondary_hart_start as usize - mem_info.offset(),
85+
);
7886
// 转交控制权
7987
crate::primary_main(KernelConfig {
8088
phys_to_virt_offset: mem_info.offset(),

0 commit comments

Comments
 (0)