From eed205c3f6dc485bd1a351362ba2d55f7db4d40d Mon Sep 17 00:00:00 2001 From: Yue Ma Date: Mon, 22 Mar 2021 17:52:37 -0700 Subject: [PATCH] cnss2: Skip the dump segment if memory allocation fails Avoid accessing NULL pointer if memory allocation fails for a dump segment. Change-Id: Ie2c501b619c361b9a108abf6ff41ecefa2e81c44 Signed-off-by: Yue Ma --- drivers/net/wireless/cnss2/main.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c index a96011ddd7c4..a76e971b173a 100644 --- a/drivers/net/wireless/cnss2/main.c +++ b/drivers/net/wireless/cnss2/main.c @@ -2131,13 +2131,15 @@ int cnss_do_elf_ramdump(struct cnss_plat_data *plat_priv) continue; } + seg = kcalloc(1, sizeof(*seg), GFP_KERNEL); + if (!seg) + continue; + if (meta_info.entry[dump_seg->type].entry_start == 0) { meta_info.entry[dump_seg->type].type = dump_seg->type; meta_info.entry[dump_seg->type].entry_start = i + 1; } meta_info.entry[dump_seg->type].entry_num++; - - seg = kcalloc(1, sizeof(*seg), GFP_KERNEL); seg->da = dump_seg->address; seg->va = dump_seg->v_address; seg->size = dump_seg->size; @@ -2145,16 +2147,19 @@ int cnss_do_elf_ramdump(struct cnss_plat_data *plat_priv) dump_seg++; } + seg = kcalloc(1, sizeof(*seg), GFP_KERNEL); + if (!seg) + goto do_elf_dump; + meta_info.magic = CNSS_RAMDUMP_MAGIC; meta_info.version = CNSS_RAMDUMP_VERSION; meta_info.chipset = plat_priv->device_id; meta_info.total_entries = CNSS_FW_DUMP_TYPE_MAX; - - seg = kcalloc(1, sizeof(*seg), GFP_KERNEL); seg->va = &meta_info; seg->size = sizeof(meta_info); list_add(&seg->node, &head); +do_elf_dump: ret = do_elf_dump(&head, info_v2->ramdump_dev); while (!list_empty(&head)) {