Commit 9ce3bf22 authored by Clement Leger's avatar Clement Leger Committed by Bjorn Andersson
Browse files

remoteproc: Use size_t type for len in da_to_va



With upcoming changes in elf loader for elf64 support, section size will
be a u64. When used with da_to_va, this will potentially lead to
overflow if using the current "int" type for len argument. Change
da_to_va prototype to use a size_t for len and fix all users of this
function.

Reviewed-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
Reviewed-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: default avatarClement Leger <cleger@kalray.eu>
Link: https://lore.kernel.org/r/20200302093902.27849-2-cleger@kalray.eu


Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
parent 2e7d4c2c
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -186,7 +186,7 @@ static int imx_rproc_stop(struct rproc *rproc)
}

static int imx_rproc_da_to_sys(struct imx_rproc *priv, u64 da,
			       int len, u64 *sys)
			       size_t len, u64 *sys)
{
	const struct imx_rproc_dcfg *dcfg = priv->dcfg;
	int i;
@@ -203,19 +203,19 @@ static int imx_rproc_da_to_sys(struct imx_rproc *priv, u64 da,
		}
	}

	dev_warn(priv->dev, "Translation failed: da = 0x%llx len = 0x%x\n",
	dev_warn(priv->dev, "Translation failed: da = 0x%llx len = 0x%zx\n",
		 da, len);
	return -ENOENT;
}

static void *imx_rproc_da_to_va(struct rproc *rproc, u64 da, int len)
static void *imx_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len)
{
	struct imx_rproc *priv = rproc->priv;
	void *va = NULL;
	u64 sys;
	int i;

	if (len <= 0)
	if (len == 0)
		return NULL;

	/*
@@ -235,7 +235,8 @@ static void *imx_rproc_da_to_va(struct rproc *rproc, u64 da, int len)
		}
	}

	dev_dbg(&rproc->dev, "da = 0x%llx len = 0x%x va = 0x%p\n", da, len, va);
	dev_dbg(&rproc->dev, "da = 0x%llx len = 0x%zx va = 0x%p\n",
		da, len, va);

	return va;
}
+2 −2
Original line number Diff line number Diff line
@@ -246,7 +246,7 @@ static void keystone_rproc_kick(struct rproc *rproc, int vqid)
 * can be used either by the remoteproc core for loading (when using kernel
 * remoteproc loader), or by any rpmsg bus drivers.
 */
static void *keystone_rproc_da_to_va(struct rproc *rproc, u64 da, int len)
static void *keystone_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len)
{
	struct keystone_rproc *ksproc = rproc->priv;
	void __iomem *va = NULL;
@@ -255,7 +255,7 @@ static void *keystone_rproc_da_to_va(struct rproc *rproc, u64 da, int len)
	size_t size;
	int i;

	if (len <= 0)
	if (len == 0)
		return NULL;

	for (i = 0; i < ksproc->num_mems; i++) {
+1 −1
Original line number Diff line number Diff line
@@ -270,7 +270,7 @@ static int adsp_stop(struct rproc *rproc)
	return ret;
}

static void *adsp_da_to_va(struct rproc *rproc, u64 da, int len)
static void *adsp_da_to_va(struct rproc *rproc, u64 da, size_t len)
{
	struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv;
	int offset;
+1 −1
Original line number Diff line number Diff line
@@ -1325,7 +1325,7 @@ static int q6v5_stop(struct rproc *rproc)
	return 0;
}

static void *q6v5_da_to_va(struct rproc *rproc, u64 da, int len)
static void *q6v5_da_to_va(struct rproc *rproc, u64 da, size_t len)
{
	struct q6v5 *qproc = rproc->priv;
	int offset;
+1 −1
Original line number Diff line number Diff line
@@ -222,7 +222,7 @@ static int adsp_stop(struct rproc *rproc)
	return ret;
}

static void *adsp_da_to_va(struct rproc *rproc, u64 da, int len)
static void *adsp_da_to_va(struct rproc *rproc, u64 da, size_t len)
{
	struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv;
	int offset;
Loading