From 665750f493d3fcf307952f19c0442c092b76d852 Mon Sep 17 00:00:00 2001 From: Jerome Forissier Date: Mon, 27 Sep 2021 17:42:45 +0200 Subject: [PATCH] Revert "optee: Clear stale cache entries during initialization" This reverts commit b5c10dd04b7418793517e3286cde5c04759a86de which breaks OP-TEE virtualization support [1]. The bug is in fact in the Xen mediator [2] so the proper fix is to upgrade Xen when a new maintenance release is available, at which point this revert should be discarded. Link: [1] https://github.com/OP-TEE/build/issues/523 Link: [2] https://xenbits.xen.org/gitweb/?p=xen.git;a=commit;h=1c3ed9c908732d19660fbe83580674d585464d4c Signed-off-by: Jerome Forissier [jf: rebase onto v5.16] Signed-off-by: Jerome Forissier [jf: rebase onto v5.17] Signed-off-by: Jerome Forissier --- drivers/tee/optee/optee_private.h | 1 - drivers/tee/optee/smc_abi.c | 45 +++---------------------------- 2 files changed, 3 insertions(+), 43 deletions(-) diff --git a/drivers/tee/optee/optee_private.h b/drivers/tee/optee/optee_private.h index 92bc47bef95ffc..a3d5e39b62a547 100644 --- a/drivers/tee/optee/optee_private.h +++ b/drivers/tee/optee/optee_private.h @@ -237,7 +237,6 @@ int optee_pool_op_alloc_helper(struct tee_shm_pool_mgr *poolm, size_t num_pages, unsigned long start)); - void optee_remove_common(struct optee *optee); int optee_open(struct tee_context *ctx, bool cap_memref_null); void optee_release(struct tee_context *ctx); diff --git a/drivers/tee/optee/smc_abi.c b/drivers/tee/optee/smc_abi.c index c517d310249f89..2defa18395f8d1 100644 --- a/drivers/tee/optee/smc_abi.c +++ b/drivers/tee/optee/smc_abi.c @@ -269,13 +269,11 @@ static void optee_enable_shm_cache(struct optee *optee) } /** - * __optee_disable_shm_cache() - Disables caching of some shared memory - * allocation in OP-TEE + * optee_disable_shm_cache() - Disables caching of some shared memory allocation + * in OP-TEE * @optee: main service struct - * @is_mapped: true if the cached shared memory addresses were mapped by this - * kernel, are safe to dereference, and should be freed */ -static void __optee_disable_shm_cache(struct optee *optee, bool is_mapped) +void optee_disable_shm_cache(struct optee *optee) { struct optee_call_waiter w; @@ -294,13 +292,6 @@ static void __optee_disable_shm_cache(struct optee *optee, bool is_mapped) if (res.result.status == OPTEE_SMC_RETURN_OK) { struct tee_shm *shm; - /* - * Shared memory references that were not mapped by - * this kernel must be ignored to prevent a crash. - */ - if (!is_mapped) - continue; - shm = reg_pair_to_ptr(res.result.shm_upper32, res.result.shm_lower32); tee_shm_free(shm); @@ -311,27 +302,6 @@ static void __optee_disable_shm_cache(struct optee *optee, bool is_mapped) optee_cq_wait_final(&optee->call_queue, &w); } -/** - * optee_disable_shm_cache() - Disables caching of mapped shared memory - * allocations in OP-TEE - * @optee: main service struct - */ -static void optee_disable_shm_cache(struct optee *optee) -{ - return __optee_disable_shm_cache(optee, true); -} - -/** - * optee_disable_unmapped_shm_cache() - Disables caching of shared memory - * allocations in OP-TEE which are not - * currently mapped - * @optee: main service struct - */ -static void optee_disable_unmapped_shm_cache(struct optee *optee) -{ - return __optee_disable_shm_cache(optee, false); -} - #define PAGELIST_ENTRIES_PER_PAGE \ ((OPTEE_MSG_NONCONTIG_PAGE_SIZE / sizeof(u64)) - 1) @@ -1445,15 +1415,6 @@ static int optee_probe(struct platform_device *pdev) pr_info("Asynchronous notifications enabled\n"); } - /* - * Ensure that there are no pre-existing shm objects before enabling - * the shm cache so that there's no chance of receiving an invalid - * address during shutdown. This could occur, for example, if we're - * kexec booting from an older kernel that did not properly cleanup the - * shm cache. - */ - optee_disable_unmapped_shm_cache(optee); - optee_enable_shm_cache(optee); if (optee->smc.sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM)