This V3 series covers points uncovered during the review of the previous
series, one major point being that register readout should not be used
for dynamic JR availability check due to its unreliability.
Instead, JR should have a proper status set in FDT which indicates the
availability of the ring in NS-World. This status is aligned with what
BootROM code configures, and can be modified by all actors in the boot
chain.
Therefore, patch in V2 series that was handling the dynamic JR
availability check is dropped in this series and replaced by the patch
which sets proper DT status for JR nodes.
Andrey Zhizhikin (2):
crypto: caam - convert to use capabilities
arm64: dts: imx8m: define proper status for caam jr
arch/arm64/boot/dts/freescale/imx8mm.dtsi | 4 +
arch/arm64/boot/dts/freescale/imx8mn.dtsi | 4 +
arch/arm64/boot/dts/freescale/imx8mp.dtsi | 4 +
arch/arm64/boot/dts/freescale/imx8mq.dtsi | 4 +
drivers/crypto/caam/caamalg_qi.c | 2 +-
drivers/crypto/caam/ctrl.c | 115 ++++++++++++++--------
drivers/crypto/caam/intern.h | 20 ++--
drivers/crypto/caam/jr.c | 19 +++-
drivers/crypto/caam/regs.h | 2 -
9 files changed, 122 insertions(+), 52 deletions(-)
base-commit: 04fe99a8d936d46a310ca61b8b63dc270962bf01
--
2.25.1
Hello arm-soc maintainers,
Please pull these TEE subsystem and OP-TEE driver fixes which by coincident
all are concerning memory shared with secure world.
There's one in particular nasty race fixed when a tee_shm is about to be
teared down.
Thanks,
Jens
The following changes since commit d58071a8a76d779eedab38033ae4c821c30295a5:
Linux 5.16-rc3 (2021-11-28 14:09:19 -0800)
are available in the Git repository at:
https://git.linaro.org/people/jens.wiklander/linux-tee.git tags/fixes-for-v5.16
for you to fetch changes up to 6add87fdae9bcb1d20b4503df5bd02ce5246cc8b:
optee: Suppress false positive kmemleak report in optee_handle_rpc() (2021-12-16 15:32:48 +0100)
----------------------------------------------------------------
TEE and OP-TEE fixes for v5.16
- Fixes a race when a tee_shm reaches reference count 0 and is about to
be teared down
- Fixes an incorrect page free bug in an error path of the OP-TEE shared
memory pool handling
- Suppresses a false positive kmemleak report when allocating driver
private shared memory buffers for OP-TEE
----------------------------------------------------------------
Jens Wiklander (1):
tee: handle lookup of shm with reference count 0
Sumit Garg (1):
tee: optee: Fix incorrect page free bug
Xiaolei Wang (1):
optee: Suppress false positive kmemleak report in optee_handle_rpc()
drivers/tee/optee/core.c | 6 +-
drivers/tee/optee/smc_abi.c | 2 +
drivers/tee/tee_shm.c | 174 +++++++++++++++++---------------------------
include/linux/tee_drv.h | 4 +-
4 files changed, 72 insertions(+), 114 deletions(-)
Pointer to the allocated pages (struct page *page) has already
progressed towards the end of allocation. It is incorrect to perform
__free_pages(page, order) using this pointer as we would free any
arbitrary pages. Fix this by stop modifying the page pointer.
Fixes: ec185dd3ab25 ("optee: Fix memory leak when failing to register shm pages")
Cc: stable(a)vger.kernel.org
Reported-by: Patrik Lantz <patrik.lantz(a)axis.com>
Signed-off-by: Sumit Garg <sumit.garg(a)linaro.org>
Reviewed-by: Tyler Hicks <tyhicks(a)linux.microsoft.com>
---
Changes since v1:
- Added stable CC tag.
- Picked up Tyler's review tag.
drivers/tee/optee/core.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c
index ab2edfcc6c70..2a66a5203d2f 100644
--- a/drivers/tee/optee/core.c
+++ b/drivers/tee/optee/core.c
@@ -48,10 +48,8 @@ int optee_pool_op_alloc_helper(struct tee_shm_pool_mgr *poolm,
goto err;
}
- for (i = 0; i < nr_pages; i++) {
- pages[i] = page;
- page++;
- }
+ for (i = 0; i < nr_pages; i++)
+ pages[i] = page + i;
shm->flags |= TEE_SHM_REGISTER;
rc = shm_register(shm->ctx, shm, pages, nr_pages,
--
2.25.1
Hi,
In light of the holiday season we are not expecting too many joiners on Dec
23. Hence, let's cancel the LOC (Linaro OP-TEE Contribution) monthly
meeting scheduled for next week.
Wish you all a great holiday and a happy new year. The next scheduled
meeting will be on 27th January 2022.
Regards,
Ruchika
(On behalf of OP-TEE team)
Hi
Me and Patrik have been tracing a kernel memory corruption bug that is
triggered when op-tee runs out of resources and returns an error from
the OPTEE_MSG_CMD_REGISTER_SHM call. This is yet another fall-out from
Patrik's fuzzing of the TEE subsystem.
The symptoms would look like this when page debugging is enabled:
BUG: Bad page state in process optee_example_h pfn:46bb0
page:(ptrval) refcount:-1 mapcount:0 mapping:00000000 index:0x0 pfn:0x46bb0
flags: 0x0(zone=0)
Our reproducer runs a loop with the TEE_IOC_SHM_ALLOC until memory runs
out at the optee-os end (dynamic SHM enabled). The error is 100%
reproducible with such a loop.
We have traced this down to what seems to be a miss in the memory
ownership contract during the call to OPTEE_MSG_CMD_REGISTER_SHM.
When pool_op_alloc() detects that optee_shm_register() has failed, it
will free the allocated page at the very end of the function.
Unfortunately that page has already been freed because OP-TEE has sent a
OPTEE_RPC_CMD_SHM_FREE for this shm object before returning from
OPTEE_MSG_CMD_REGISTER_SHM. This is my conclusion based on prints added
to the code.
I cannot write a patch for this because I am at a loss of who actually
is supposed to trigger the free of the pages in this situation. Is there
an API spec that makes this clear ?
BR,
Lars