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

Commit 7c187e86 authored by Puja Gupta's avatar Puja Gupta Committed by Satya Durga Srinivasu Prabhala
Browse files

soc: qcom: pil: Clear elf memory on validation failure



Clear memory where elf segments are loaded if any of the segments fail
authentication.

CRs-Fixed: 1113126
Change-Id: I85d6bdc8efbb5738a863e59c0244222defcc1bcb
Signed-off-by: default avatarPuja Gupta <pujag@codeaurora.org>
Signed-off-by: default avatarSatya Durga Srinivasu Prabhala <satyap@codeaurora.org>
parent 51be7069
Loading
Loading
Loading
Loading
+24 −7
Original line number Diff line number Diff line
@@ -582,11 +582,35 @@ static int pil_init_mmap(struct pil_desc *desc, const struct pil_mdt *mdt)
	return pil_init_entry_addr(priv, mdt);
}

struct pil_map_fw_info {
	void *region;
	unsigned long attrs;
	phys_addr_t base_addr;
	struct device *dev;
};

static void pil_release_mmap(struct pil_desc *desc)
{
	struct pil_priv *priv = desc->priv;
	struct pil_seg *p, *tmp;
	u64 zero = 0ULL;
	u8 __iomem *buf;

	struct pil_map_fw_info map_fw_info = {
		.attrs = desc->attrs,
		.region = priv->region,
		.base_addr = priv->region_start,
		.dev = desc->dev,
	};

	void *map_data = desc->map_data ? desc->map_data : &map_fw_info;

	/* Clear memory so that unauthorized ELF code is not left behind */
	buf = desc->map_fw_mem(priv->region_start, (priv->region_end -
					priv->region_start), map_data);
	pil_memset_io(buf, 0, (priv->region_end - priv->region_start));
	desc->unmap_fw_mem(buf, (priv->region_end - priv->region_start),
								map_data);

	if (priv->info) {
		__iowrite32_copy(&priv->info->start, &zero,
@@ -602,13 +626,6 @@ static void pil_release_mmap(struct pil_desc *desc)

#define IOMAP_SIZE SZ_1M

struct pil_map_fw_info {
	void *region;
	unsigned long attrs;
	phys_addr_t base_addr;
	struct device *dev;
};

static void *map_fw_mem(phys_addr_t paddr, size_t size, void *data)
{
	struct pil_map_fw_info *info = data;