TEE-Fiasco实现需求分析

Fiasco是micro kernel,基于其上,一般使用L4作为用户开发环境。n年前,曾想将Fiasco移植为Security OS,TA可以使用L4丰富的开发环境。此篇手稿就是当时的实现需求分析。


TEE-Fiasco实现需求分析


前提:在尽可能复用Op-Tee的client API和Linux Driver的前提下,对L4提的实现需求。


1. 多核模型

  • TEE:UP
  • REE:SMP

2种发起安全请求方法:

  • IPI 中断
  • affinity thread

2. S和Ns的切换


这里写图片描述

NS:

  • Irq –>NS
  • Fiq–>monitor

S:

  • Irq–>S
  • Fiq–>S

Monitor:

  • 只负责S与NS的切换。

S:Irq

  • 将irq抽象为rpc处理的返回结果,由REE处理irq中断后切回TEE。

NS:Fiq

  • 在monitor Fiq处理中置Fiq标志,然后切换至S,由S:Fiq中断处理。处理完后作为rpc的结果返回。

小结:即在切换点处, TEE–〉REE方向的数据被抽象为:

  • TEE RPC
  • TEE处理完REE后RPC Result

同样,REE–〉TEE的数据类似。


3. Rpc


这里写图片描述

这里写图片描述

Rpc类似于Client API在TEE的proxy,解析request,处理完后返回结果。
对每一个request,Rpc将相关的调用和参数转换为L4格式,将request转换为L4 IPC,发送给Session server。

这里写图片描述

由Session Server具体执行请求操作,涉及到load TA,Task的创建,TA回调函数的解析等。


4. Session Server


需要支持多Session并存,Session有各自的state,包括Session的context和task的context。

这里写图片描述

Session Mem-space: Session Server Mem-space + TA Mem-space
Session Obj-space: Session Server Obj-space + TA Obj-space

Session mem管理:

  • 为TA的code/data/stack/heap/params等分配mem空间;
  • 维护TA Mem-space: 由于TA的回调需要运行于不同的TASK中,所以需要记录TA Mem-space,以便可以切换至不同的TASK;
  • TA Mem-space的回收;

Session Obj管理:

  • Session Obj创建:当Client API或TA发起OpenSession请求时;
  • Session Obj查询:根据Session Handler或TA UUID,可查询到已经创建的Session Obj;
  • Session Obj释放:当Client API或TA发起CLoseSession请求时;

Client:

  • Linux kernel;
  • REE的common模块;
  • REE的Client APP(UUID);

Session Obj涉及的内容:

  • TA context,1个session只能对应1个TA;
  • 如果是TA->TA的Session,则需记录关联的Client->TA的Session;
  • Client相关的信息;
  • Session Cancellation相关信息;

5. TA 管理


TA类型:

  • Static TA:静态被编译进TEE镜像中;
  • User TA:独立编译,后期动态加载;

由于static TA有很强的平台相关性,而User TA则需要考虑到兼容性,所有2者可以有不同的文件结构。

TA加载:

  • TA文件的读取:将TA文件从文件系统中读取至mem;
  • TA加载;

    • 可以利用 L4的libloader,重载其相关函数;
      • 得到TA的 data-space,由Session维护;
      • 解析elf得到TA回调函数指针;
      • 将entry地点指向invoke所请求的回调;
    • 或者完全实现自己的加载器。
  • TA进程的创建:
    libloader在加载完TA后,会创建Task/Thread,以及必须的capability,创建好Env之后,运行新的Task/Thread。

  • 利用Ned Lua脚本加载TA,其实是利用”rom/l4re”为TA创建Env,然后利用Ldr::Elf_loader加载TA。如果需要使用Lua,则需要修改l4re模块。

TA context:

  • 对于multi instance TA,1个TA可以被多个Session同时打开,需要记录打开TA的所有Session Obj;
  • TA的code/data/stack/heap的Dataspace,以便可以将TA映射到多个Task mem-space中;
  • TA文件头部分指针;
  • 如果TA是由REE读取至mem,则记录TA在normal world的物理地址;
  • 如果是static TA,则记录其文件头部分指针;

TA格式:

  • 如使用OP-Tee所用的TA格式,则需要修改TA的编译环境以及增加user TA lib库,用于解析TA和实现GP的TA interface功能。

6. Session Server & Client


L4的Server&client机制是利用Ipc-gate obj在server和client之间传递IPC消息。当Ned利用Lua加载server/client时,会自动创建”named Ipc-gate” obj,并将之压入双方的Env。

Server运行后,将Server obj 和named Ipc-gate绑定,从而后期发送给server thread的IPC可以重新路由至Server obj。 Client则利用named Ipc-gate向Server Obj发送IPC消息。

Session Client包含:Rpc,TA。则需要在加载此类模块时需要创建Session Ipc-gate,或者由加载器创建;当用Ned加载时,则由Lua创建。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值