TermiNexus
9119c74232
fix(vkernel/paging): 补 1GB 大页(PTE_PS)判据,消除偶发 #GP(0) 与任意内存写坏
- 现场:rip=0x11a93e 在 _set_page_writable 的 testb $1,(%rax,%rcx,8);rax 由 PDPTE & ~0xFFF 得到。固件 identity 映射的 1GB 大页条目会置 NX(bit63),& ~0xFFF 把它一起带出 → 派生“PD 基址”非规范 → 读表项即 #GP(0)(偶发取决于该 VA 是否落进 1GB 大页)
- _set_page_writable:PDP 层补 PTE_PS 分支(1GB 大页无下层 PD,W 位在条目自身),与既有 2MB 分支同口径
- MakePTWritable / MakeRangeRO:PDP 层遇 PTE_PS 跳过 —— 把 1GB 大页当 PD 解引用会把大页内存内容当表项(约一半 qword bit0=1),据此递归/写页表 → 任意内存被改(偶发数据损坏)并算出非规范指针
2026-10-14 18:12:15 +08:00
..
2026-10-14 15:12:19 +08:00
2026-10-12 15:06:50 +08:00
2026-10-14 13:46:57 +08:00
2026-10-14 14:52:56 +08:00
2026-10-14 18:12:15 +08:00
2026-10-14 12:54:43 +08:00
2026-10-07 19:04:33 +08:00
2026-10-14 15:46:29 +08:00
2026-10-07 19:04:33 +08:00
2026-10-14 15:05:02 +08:00