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:
1 parent
18b9b8bfa8
commit
edd842b6af
1 file changed
+5
-2
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user