Commit Graph
16 Commits
Author SHA1 Message Date
TermiNexus 2a54e2bafb 清理了 t.CVoid 2026-09-16 16:07:04 +08:00
TermiNexus 6a54373c26 fix(vkernel): 补 ISR/调度 call 的 rsi/rdi clobber、rep stosb 内存 clobber,修 mm 别名笔误
N8  paging.vp:AllocPage 的 rep stosb 写 4096B 补 CLOBBER_MEMORY,避免优化器
    重排/消除其前后的内存读写
N9  coroutine.vp / sched.vp:_coro_entry/_thread_entry 的 call rax 补
    CLOBBER_RSI/CLOBBER_RDI(RSP 由 sub rsp,8 / add rsp,8 配对抵消,无需声明)
N15 process.vp:mm_mm.malloc/free → mm.malloc/free(该文件只有 import mm.mm as mm)
N16 elf.vp:读 RAX 的 c.Asm 补 CLOBBER_RAX([DIAG] 探针)
N20 elf.vp / idt.vp(12 处):外部 ELF 入口 / ISR handler 的 call 补
    CLOBBER_RSI/CLOBBER_RDI(被调方破坏全部 caller-saved 寄存器)
2026-09-11 17:40:21 +08:00
TermiNexus a518f75b24 chore(vkernel): 重置基线 — 纳入 TPV codegen 修复配合的内核侧调整与既有工作区内容
- devfs.vp: string.split 传 PATH_BUFFER_SIZE(配合 split 新增容量参数)

- fat32_types.vp: lfn_extract 越界钳制(base+i > MAX_LFN 返回 -1)

- sheet.vp: gfx.Renderer 实参修正为 (fb, zb, w, h)(原单参导致 w/h=0 渲染空操作)

- 同批包含 VKernel 其余既有移植改动与 vpsdk/Apps/Libs 工作区内容
2026-09-11 14:27:01 +08:00
TermiNexus cd1cc915c5 修正了build.py,重置基线 2026-09-11 10:34:34 +08:00
TermiNexus 463a20017f fix(kernel): save_pt_range 的 c.Set 改 c.Set(c.Deref(save_count)) 写所指地址而非指针变量 2026-08-30 07:44:40 +08:00
TermiNexus 2a03330a9d fix(kernel): 分裂 2MB 大页使 .rodata 真正只读,加页表与格式串校验诊断并禁用 App 自动启动 2026-08-30 07:27:45 +08:00
TermiNexus b1956ea722 fix(kernel): paging.init 先清 WP 再 MakePTWritable 再置 WP(bootloader 已设 WP=1)
UEFI/bootloader 的 CR0.WP 已是 1(原代码清 WP 正因此),MakePTWritable 在 WP=1 下写只读页表页即 #PF(cr2=0xf8033e0)。改为:清 WP → 放开页表页 → 置 WP=1。
2026-08-29 17:42:34 +08:00
TermiNexus 56e38c43ea fix(kernel): MakePTWritable 移到 WP=0 阶段执行,破除页表页递归只读死锁
在 WP=1 后改页表页自身会写只读页 → #PF(ProtectKernelRO 阶段 cr2=0xf8033e0)。改为 paging.init 里先 MakePTWritable(WP=0 允许写只读页)再置 WP,ProtectKernelRO 只保护 .rodata 内容页。
2026-08-29 17:41:03 +08:00
TermiNexus 4f729b20a3 fix(kernel): _set_page_writable 支持 2MB 大页(PD 条目直接置 W)
pml4 页(0xf801000)若经 2MB 大页映射,原实现遇 PS=1 直接 return 导致页表页仍只读,写 pml4.entries 持续 #PF。大页的 W 位在 PD 条目自身,直接置位即可。
2026-08-29 17:39:25 +08:00
TermiNexus a92073851e fix(kernel): 保护 .rodata 前先放开页表页可写(WP=1 暴露写页表 #PF)
CR0.WP=1 后暴露 bootloader 页表页(0xf8xxxx)只读的隐藏问题:MapPage 写 pml4.entries 触发 #PF(slog.so 映射 0x600000 新建页表项时 cr2=0xf801000 err=0x3)。MakePTWritable 遍历页表层次把 pml4/pdp/pd/pt 页表页自身设可写,.rodata 内容页仍只读保护。
2026-08-29 17:37:29 +08:00
TermiNexus 04ca2d4c5b fix(kernel): .rodata 映射只读 + CR0.WP=1,越界写立即 #PF 暴露写源
此前清 WP + 页表全可写,越界写 .rodata 字符串常量静默破坏(格式串 %lu 变 %lc、路径/符号名损坏连锁 → work=+/eyboard/terminal.elf 加载失败)。ProtectKernelRO 经 c.Asm 引用 __rodata_start/__rodata_end 清 PTE_WRITABLE,配合 CR0.WP 置位,越界写触发 #PF 打印 cr2/rip。
2026-08-29 17:34:41 +08:00
TermiNexus f8ad5b7176 debug(paging): init_pool 打印 pt_pool_raw/pt_pool_start——clone 时 raw=0x0,区分 init 收到 0 还是 init 后被覆盖 2026-08-27 01:19:04 +08:00
TermiNexus a621b0d264 debug(paging,process,fat32): 定位 BSS 全局内存破坏——clone AllocPage 失败打印 pt_pool_raw/pt_pool_used,create_process malloc 返回实际值(mm 成功但调用方收 None),dir_find 失败 dump win 缓冲内容 2026-08-27 01:02:39 +08:00
TermiNexus 8b40203b63 提交新的建议忽略 2026-08-06 18:08:50 +08:00
TermiNexus 20e7289c61 将 .py 和 .pyi 后缀名改为了 .vp 和 .vpi 后缀名 2026-07-30 16:34:26 +08:00
Viper 6813947181 Initial import of ViperOS 2026-07-19 12:38:20 +08:00