Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eed205c3 authored by Yue Ma's avatar Yue Ma Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarYue Ma <yuem@codeaurora.org>
parent 63a5f675
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -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)) {