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

Commit 9021984e authored by Yashwanth's avatar Yashwanth
Browse files

disp: msm: sde: add checks to avoid null pointer dereference



This change adds required checks to avoid accessing the
null pointer in case where memory allocation fails while
dumping the registers in memory.

Change-Id: Ic087a1bd041d193820289672d325a78795c48c14
Signed-off-by: default avatarYashwanth <yvulapu@codeaurora.org>
parent 9122159c
Loading
Loading
Loading
Loading
+23 −10
Original line number Diff line number Diff line
@@ -504,6 +504,9 @@ static void _sde_dump_reg(const char *dump_name, u32 reg_dump_flag,
	pr_debug("%s: reg_dump_flag=%d in_log=%d in_mem=%d\n",
		dump_name, reg_dump_flag, in_log, in_mem);

	if (!dbg_base->reg_dump_addr)
		in_mem = 0;

	if (!in_log && !in_mem)
		return;

@@ -711,12 +714,15 @@ static void _sde_dump_reg_by_ranges(struct sde_dbg_reg_base *dbg,
				addr, range_node->offset.start,
				range_node->offset.end);

			if (dbg_base->reg_dump_addr) {
				scnprintf(dbg_base->reg_dump_addr, REG_BASE_NAME_LEN,
						dbg->name);
				dbg_base->reg_dump_addr += REG_BASE_NAME_LEN;
				scnprintf(dbg_base->reg_dump_addr, RANGE_NAME_LEN,
						range_node->range_name);
				dbg_base->reg_dump_addr += RANGE_NAME_LEN;
			}

			_sde_dump_reg(range_node->range_name, reg_dump_flag,
					dbg->base, addr, len,
					&range_node->reg_dump);
@@ -729,10 +735,13 @@ static void _sde_dump_reg_by_ranges(struct sde_dbg_reg_base *dbg,
				dbg->max_offset);
		addr = dbg->base;
		len = dbg->max_offset;
		if (dbg_base->reg_dump_addr) {
			scnprintf(dbg_base->reg_dump_addr, REG_BASE_NAME_LEN,
					dbg->name);
			dbg_base->reg_dump_addr += REG_BASE_NAME_LEN;
			dbg_base->reg_dump_addr += RANGE_NAME_LEN;
		}

		_sde_dump_reg(dbg->name, reg_dump_flag, dbg->base, addr, len,
				&dbg->reg_dump);
	}
@@ -1352,6 +1361,10 @@ static void _sde_dump_array(struct sde_dbg_reg_base *blk_arr[],
	dbg_base->reg_dump_addr = devm_kzalloc(sde_dbg_base.dev,
			reg_dump_size, GFP_KERNEL);

	if (!dbg_base->reg_dump_addr)
		pr_err("Failed to allocate memory for reg_dump_addr size:%d\n",
				reg_dump_size);

	if (dbg_base->reg_dump_addr &&
			sde_mini_dump_add_region("reg_dump",
			reg_dump_size, dbg_base->reg_dump_addr) < 0)