fix(phase2): free_llc_task 误 free 任务槽导致 double-free

LlcTask 记录是 llc_tasks 数组的连续槽(非独立 malloc),free_llc_task
此前对槽调 stdlib.free,循环后又对数组整体 free -> 同一 32 字节区域
double-free(ASan)。修复:free_llc_task 只释放命令串并置 None,记录
由调用方随数组整体释放。
This commit is contained in:
TermiNexus committed 2026-08-19 07:34:57 +08:00
1 parent 18b9b8bfa8
commit edd842b6af
1 file changed
+5 -2
+5 -2
View File
@@ -490,16 +490,19 @@ def init_llc_task(task: LlcTask | t.CPtr, ir_path: str, output_dir: str,
def free_llc_task(task: LlcTask | t.CPtr):
"""释放任务(命令串 + 记录)"""
"""释放任务的命令串;记录本身是任务数组的连续槽(非独立 malloc),
由调用方对数组整体 stdlib.free(此前对槽 free 导致 double-free)"""
if task is None:
return
if task.OptCmd is not None:
stdlib.free(task.OptCmd)
task.OptCmd = None
if task.LlcCmd is not None:
stdlib.free(task.LlcCmd)
task.LlcCmd = None
if task.ModuleSha1 is not None:
stdlib.free(task.ModuleSha1)
stdlib.free(task)
task.ModuleSha1 = None
def _llc_task_worker(arg: t.CPtr) -> t.CPtr: