2013-11-25 49 views
2

我试图从EL1(Android Kernel)向EL2(管理程序)传递一个函数指针,使用SMC调用并在管理程序中捕获SMC调用。我明白,只是通过指针,虚拟机管理程序将无法工作,因为它是一个虚拟设备,它对虚拟机管理程序没有任何意义。从内核驱动程序传递函数指针到管理程序

有关如何做到这一点的任何意见?我想从EL2调用函数,而不是从EL1调用。

我的猜测是,我可能需要使用离子内存或可能需要将VA转换 - > IPA/PA

任何帮助或指针的感谢,谢谢!

回答

0

通常,您不希望保留这种方式传递的指针。传递缓冲区索引并将其复制到监视器部分会更好。如果恢复正常的操作系统,指向的内存可能会改变,这可能导致各种溢出和条件检查被避免。

因此,如果可能的话,通过价值传递信息通常会更好。如果你必须通过缓冲区,最好在正常和安全的世界之间共享的内存中使用一些无锁结构。该缓冲区是固定和索引的。呼叫是为了使安全世界意识到状态改变而完成的。它复制缓冲区并更新共享内存中的结构以表示它是空闲的。然后在专用副本中对缓冲区进行验证并执行操作。

通常,根据normal world address行事并不是一个好主意。这很容易出错,应该避免。这就是为什么微内核使用消息传递,它始终复制缓冲区。

+0

Thanks @artless_noise 我完全理解在安全和非安全世界之间传递指针的担忧。但我在这里尝试的是看看我是否可以调用EL1中的内核模块驱动程序中存在的函数,以便从更高特权级别EL2(管理程序)调用 根据你的看法,这似乎是可行的吗?我明白它有很多安全问题,但我只是为了踢球而努力! :) 谢谢,我真的很感激你的时间。 – kimi

+0

您可以将物理地址添加到您的SMC API并将其映射到安全的世界中。我不认为你有权访问虚拟地址。 EL1和EL2的命名似乎是AAarch64特有的。如果你想要一个答案,那么你应该更新你的问题。注意:Hypervisor与[tag:Trust-Zone]不同。他们是相似的,但不同的。请参见[hypervisor vs trustzone](http://stackoverflow.com/questions/17485367/trustzone-versus-pervisor) –

+0

“在安全的世界中映射”是什么意思?对不起,但我是这个Linux世界的新手,仍处于学习阶段。 我有一个TZ和Hyp系统已经编程已经和他们应该工作。目标是在Hyp中捕获SMC调用并在内核驱动程序中调用一个函数 – kimi

相关问题