From 5167962b4c1e9cca5e00ee2c07adf4cb59dcfbfd Mon Sep 17 00:00:00 2001 From: maplestory Date: Mon, 23 Aug 2021 11:43:33 +0800 Subject: [PATCH] [faultloggerd] fix some memory leak issues Signed-off-by: maplestory --- tools/process_dump/dfx_elf.c | 3 +++ tools/process_dump/dfx_process.c | 2 ++ tools/process_dump/dfx_unwind_remote.c | 10 +++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/tools/process_dump/dfx_elf.c b/tools/process_dump/dfx_elf.c index 70d7bd934..b44f98201 100644 --- a/tools/process_dump/dfx_elf.c +++ b/tools/process_dump/dfx_elf.c @@ -156,6 +156,9 @@ void CreateLoadInfo(DfxElfImage *image, uint64_t vaddr, uint64_t offset) } LoadInfo *info = (LoadInfo *)calloc(1, sizeof(LoadInfo)); + if (info == NULL) { + return; + } info->vaddr = vaddr; info->offset = offset; diff --git a/tools/process_dump/dfx_process.c b/tools/process_dump/dfx_process.c index 253fa9721..433c9482c 100644 --- a/tools/process_dump/dfx_process.c +++ b/tools/process_dump/dfx_process.c @@ -58,6 +58,8 @@ BOOL InitProcessWithKeyThread(DfxProcess **process, pid_t pid, DfxThread *keyThr (*process)->processName = calloc(1, NAME_LEN); if ((*process)->processName == NULL) { DfxLogWarn("Fail to alloc processName."); + free(*process); + *process = NULL; return FALSE; } diff --git a/tools/process_dump/dfx_unwind_remote.c b/tools/process_dump/dfx_unwind_remote.c index d1783befc..c61f0971b 100644 --- a/tools/process_dump/dfx_unwind_remote.c +++ b/tools/process_dump/dfx_unwind_remote.c @@ -61,15 +61,22 @@ BOOL UnwindThread(DfxProcess *process, DfxThread *thread) } unw_addr_space_t as = unw_create_addr_space(&_UPT_accessors, 0); + if (as == NULL) { + return FALSE; + } + pid_t tid = thread->tid; void *context = _UPT_create(tid); if (context == NULL) { - DfxLogWarn("Fail to create context for %d.", tid); + unw_destroy_addr_space(as); return FALSE; } + unw_cursor_t cursor; if (unw_init_remote(&cursor, as, context) != 0) { DfxLogWarn("Fail to init cursor for remote unwind."); + _UPT_destroy(context); + unw_destroy_addr_space(as); return FALSE; } @@ -103,5 +110,6 @@ BOOL UnwindThread(DfxProcess *process, DfxThread *thread) index++; } while (unw_step(&cursor) > 0); _UPT_destroy(context); + unw_destroy_addr_space(as); return TRUE; } -- Gitee