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 <[email protected]>
  • Loading branch information
jforissier committed Sep 28, 2021
1 parent 0a74b86 commit f8e3503
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 43 deletions.
36 changes: 3 additions & 33 deletions drivers/tee/optee/call.c
Original file line number Diff line number Diff line change
Expand Up @@ -421,13 +421,11 @@ 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 @@ -446,13 +444,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 @@ -463,27 +454,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
*/
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
*/
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
9 changes: 0 additions & 9 deletions drivers/tee/optee/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -719,15 +719,6 @@ static int optee_probe(struct platform_device *pdev)
optee->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->sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM)
Expand Down
1 change: 0 additions & 1 deletion drivers/tee/optee/optee_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,6 @@ int optee_cancel_req(struct tee_context *ctx, u32 cancel_id, u32 session);

void optee_enable_shm_cache(struct optee *optee);
void optee_disable_shm_cache(struct optee *optee);
void optee_disable_unmapped_shm_cache(struct optee *optee);

int optee_shm_register(struct tee_context *ctx, struct tee_shm *shm,
struct page **pages, size_t num_pages,
Expand Down

0 comments on commit f8e3503

Please sign in to comment.