summaryrefslogtreecommitdiff
path: root/drivers/tee/tee_shm.c
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2018-01-11 18:05:06 -0800
committerOlof Johansson <olof@lixom.net>2018-01-11 18:05:06 -0800
commitffdc98c4f25b1f4fb96cd9190917b53a760f3fec (patch)
tree7bb4bb58ac4efa60c4263e72394557e39c74ec02 /drivers/tee/tee_shm.c
parentbe60566ea9b07c61c1b3cc586a95c1927cdaf3fb (diff)
parent2490cdf6435b1d3cac0dbf710cd752487c67c296 (diff)
downloadlinux-ffdc98c4f25b1f4fb96cd9190917b53a760f3fec.tar.gz
Merge tag 'tee-drv-dynamic-shm+fixes-for-v4.16' of https://git.linaro.org/people/jens.wiklander/linux-tee into next/drivers
This pull request updates the previous tee-drv-dynamic-shm-for-v4.16 pull request with five new patches fixing review comments and errors. Apart from three small fixes there's two larger patches that in the end checks that memory to be registered really is normal cached memory. * tag 'tee-drv-dynamic-shm+fixes-for-v4.16' of https://git.linaro.org/people/jens.wiklander/linux-tee: tee: shm: Potential NULL dereference calling tee_shm_register() tee: shm: don't put_page on null shm->pages tee: shm: make function __tee_shm_alloc static tee: optee: check type of registered shared memory tee: add start argument to shm_register callback Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'drivers/tee/tee_shm.c')
-rw-r--r--drivers/tee/tee_shm.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c
index 04e1b8b37046..556960a1bab3 100644
--- a/drivers/tee/tee_shm.c
+++ b/drivers/tee/tee_shm.c
@@ -112,9 +112,9 @@ static const struct dma_buf_ops tee_shm_dma_buf_ops = {
.mmap = tee_shm_op_mmap,
};
-struct tee_shm *__tee_shm_alloc(struct tee_context *ctx,
- struct tee_device *teedev,
- size_t size, u32 flags)
+static struct tee_shm *__tee_shm_alloc(struct tee_context *ctx,
+ struct tee_device *teedev,
+ size_t size, u32 flags)
{
struct tee_shm_pool_mgr *poolm = NULL;
struct tee_shm *shm;
@@ -283,7 +283,7 @@ struct tee_shm *tee_shm_register(struct tee_context *ctx, unsigned long addr,
if (rc > 0)
shm->num_pages = rc;
if (rc != num_pages) {
- if (rc > 0)
+ if (rc >= 0)
rc = -ENOMEM;
ret = ERR_PTR(rc);
goto err;
@@ -299,7 +299,7 @@ struct tee_shm *tee_shm_register(struct tee_context *ctx, unsigned long addr,
}
rc = teedev->desc->ops->shm_register(ctx, shm, shm->pages,
- shm->num_pages);
+ shm->num_pages, start);
if (rc) {
ret = ERR_PTR(rc);
goto err;
@@ -335,9 +335,11 @@ err:
idr_remove(&teedev->idr, shm->id);
mutex_unlock(&teedev->mutex);
}
- for (n = 0; n < shm->num_pages; n++)
- put_page(shm->pages[n]);
- kfree(shm->pages);
+ if (shm->pages) {
+ for (n = 0; n < shm->num_pages; n++)
+ put_page(shm->pages[n]);
+ kfree(shm->pages);
+ }
}
kfree(shm);
teedev_ctx_put(ctx);