v1
2026-11-04
kexec 避免固定基址 CMA · v1
修复 kexec CMA 连续分配作最终内核位置时,内存被入内核释放重用覆盖 .text。
原始补丁链接
子 Patch(4)
1/4
kexec: do not place the next kernel in a fixed-address CMA area
让 kexec_alloc_contig() 仅接受 CMA_DYNAMIC_BASE 标记的自分配 CMA 区,避免把下一内核放入 DT 固定地址 CMA;否则 cma_activate_area() 会释放正在执行的内核镜像,失败时回退 memblock。
2/4
of: reserved_mem: keep the reservation when node_init returns -EBUSY
fdt_init_reserved_mem_node() 对 -EBUSY 不再 memblock_phys_free() 整段保留区,保留“不可用但必须保留”语义;供后续拒绝与内核镜像重叠的 CMA,避免误释放 [_text,_end)。
3/4
mm/cma: reject CMA areas that overlap the kernel image
在 cma_init_reserved_mem() 中拒绝与 [_text,_end) 重叠的 CMA,防止 cma_activate_area() 清除 PageReserved 后把内核代码页释放进 MIGRATE_CMA,暴露给用户空间。
4/4
mm/cma: drop the duplicate alignment check in rmem_cma_setup()
删除 rmem_cma_setup() 中重复的对齐检查,改由 cma_init_reserved_mem() 统一拒绝未按 CMA_MIN_ALIGNMENT_BYTES 对齐的 base/size,并利用 area 名输出具体 pool。