From f9a64f12b542d3ff1bb4918ff01bce695b7b73d3 Mon Sep 17 00:00:00 2001 From: Zeng Tao Date: Thu, 1 Jun 2017 14:13:13 +0800 Subject: [PATCH] core: fix the keepalive condition in close session According to the The GP Internal Core API v1.1: The keepalive flag should be ignored when the single instance flag is not set. Reviewed-by: Jens Wiklander Signed-off-by: Zeng Tao --- core/kernel/tee_ta_manager.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/kernel/tee_ta_manager.c b/core/kernel/tee_ta_manager.c index 2fd71295df1..e658a55f4c9 100644 --- a/core/kernel/tee_ta_manager.c +++ b/core/kernel/tee_ta_manager.c @@ -373,6 +373,7 @@ TEE_Result tee_ta_close_session(struct tee_ta_session *csess, { struct tee_ta_session *sess; struct tee_ta_ctx *ctx; + bool keep_alive; DMSG("tee_ta_close_session(0x%" PRIxVA ")", (vaddr_t)csess); @@ -416,7 +417,9 @@ TEE_Result tee_ta_close_session(struct tee_ta_session *csess, panic(); ctx->ref_count--; - if (!ctx->ref_count && !(ctx->flags & TA_FLAG_INSTANCE_KEEP_ALIVE)) { + keep_alive = (ctx->flags & TA_FLAG_INSTANCE_KEEP_ALIVE) && + (ctx->flags & TA_FLAG_SINGLE_INSTANCE); + if (!ctx->ref_count && !keep_alive) { DMSG(" ... Destroy TA ctx"); TAILQ_REMOVE(&tee_ctxes, ctx, link);