Skip to content

Commit

Permalink
Revert "optee: Clear stale cache entries during initialization"
Browse files Browse the repository at this point in the history
This reverts commit b5c10dd 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] OP-TEE/build#523
Link: [2] https://xenbits.xen.org/gitweb/?p=xen.git;a=commit;h=1c3ed9c908732d19660fbe83580674d585464d4c
Signed-off-by: Jerome Forissier <jerome@forissier.org>
[jf: rebase onto v5.16]
Signed-off-by: Jerome Forissier <jerome@forissier.org>
  • Loading branch information
jforissier committed Jan 10, 2022
1 parent 5f137b5 commit ea26c1a
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 43 deletions.
1 change: 0 additions & 1 deletion drivers/tee/optee/optee_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,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);
Expand Down
45 changes: 3 additions & 42 deletions drivers/tee/optee/smc_abi.c
Original file line number Diff line number Diff line change
Expand Up @@ -275,13 +275,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;

Expand All @@ -300,13 +298,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);
Expand All @@ -317,27 +308,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)

Expand Down Expand Up @@ -1295,15 +1265,6 @@ static int optee_probe(struct platform_device *pdev)
optee->smc.memremaped_shm = memremaped_shm;
optee->pool = pool;

/*
* 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)
Expand Down

0 comments on commit ea26c1a

Please sign in to comment.