OPTEE:CA-TA会话的关闭(四)

前言

前面我们了解TA的加载、CA与TA会话通道的创建、怎么通过TA指令去实现一些功能。这里最后我们来看看怎么关闭这个创立的通道。

1、关闭会话操作在OP-TEE中的实现

CA端通过调用libteec库文件中关闭会话的接口通知OP-TEE执行关闭会话的操作。

该操作的作用是让OP-TEE释放建立的会话的相关资源,并将该会话从全局的会话链表中删除。OP-TEE实现关闭会话操作的流程如图13-8所示。
在这里插入图片描述
实现关闭会话的操作过程中,在将会话从全局会话队列tee_open_session链表删除之前,需要先执行TA中的关闭会话接口中的操作,这是因为TA可能在创建会话时分配了一些资源,如果在释放这些资源之前就将该会话从链表中移除,这些分配的资源将无法被释放,这样会造成内存泄漏或者其他问题。

tee_ta_close_session函数是执行关闭会话的主要函数,大多数资源的释放操作都是在该函数中完成的,该函数的内容如下:
在这里插入图片描述
在这里插入图片描述

2、静态TA的关闭会话操作

关闭与静态TA的会话操作时,OP-TEE会调用ctx->ops->enter_close_session来执行具体TA的关闭会话操作。

其调用的是pseudo_ta_enter_close_session函数,该函数会调用具体静态TA提供的close_session_entry_ponit和destroy_entry_point指定的接口来释放掉该TA占用的系统资源。

3、动态TA的关闭会话操作

关闭动态TA的会话操作时,OP-TEE会调用ctx->ops->enter_close_session来执行具体TA的关闭会话操作,其调用的是user_ta_enter_close_session函数。

该函数的执行过程中会切换到OP-TEE的用户空间,调用具体动态TA中的TA_CloseSessionEntryPoint函数,完成动态TA在用户空间资源的释放,其整体的调用流程类似于动态TA的创建会话操作。

这个系列的小结

本章介绍了CA端调用libteec库文件中的接口执行创建会话、关闭会话、调用命令操作时在OP-TEE中的具体实现和流程。静态TA运行于OP-TEE的内核空间,动态TA运行于OP-TEE的用户空间。

两种TA在OP-TEE中实现上述操作各有不同,静态TA的所有操作都在内核空间中完成,**动态TA的所有操作则需要分别在内核空间和用户空间中完成。**关于如何从OP-TEE的内核空间切换到OP-TEE的用户空间运行在本章中也进行了详细的介绍。

有这方面的非常推荐这本书,可以看看。

经过这个四篇文章,对TA和CA的工作流程有了映像,下面回归出发点,对TA镜像的加载签名流程进行学习。

(任务:完成TA验签)

先知道TA是个什么?
TA是怎么工作的?
为什么要验签?–>动态TA是存在REE的文件系统中,所以加载到TEE的安全内存中时,需要验证。
什么是验签?
怎么验签与加载?

下一篇说说什么是验签?

参考资料:
《手机安全和可信应用开发指南》


版权声明:本文为weixin_45264425原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。