From d85cedb6d0a20a10ad34d4de96c6d4ce30a8b8bd Mon Sep 17 00:00:00 2001 From: Peng Fan Date: Thu, 30 Apr 2020 12:08:13 +0800 Subject: [PATCH] MLK-23882 remoteproc: imx_rproc: check resource table header Before using resource table, check whether this is a valid header. M4 image might not publish a valid header, so let's catch it to avoid kernel panic. Reviewed-by: Fugang Duan Signed-off-by: Peng Fan --- drivers/remoteproc/imx_rproc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c index 171530d58716..efedc4972d0c 100644 --- a/drivers/remoteproc/imx_rproc.c +++ b/drivers/remoteproc/imx_rproc.c @@ -628,7 +628,7 @@ static int check_dt_rsc_table(struct rproc *rproc) /*Parse device tree to get resource table */ elems = of_property_count_u32_elems(np, "rsrc-table"); if (elems < 0) { - dev_err(&rproc->dev, "no rsrc-table\n"); + dev_err(&rproc->dev, "no dtb rsrc-table\n"); return elems; } @@ -716,6 +716,12 @@ static int imx_rproc_parse_fw(struct rproc *rproc, const struct firmware *fw) } table = (struct resource_table *)priv->rsc_va; + + if (table->ver != 1 || table->reserved[0] || table->reserved[1]) { + dev_err(priv->dev, "Invalid rsrc table header\n"); + return 0; + } + /* Assuming that the resource table fits in 1kB is fair */ rproc->cached_table = kmemdup(table, SZ_1K, GFP_KERNEL); if (!rproc->cached_table)