optee: enable OPTEE_SMC_SEC_CAP_MEMREF_NULL capability
authorVolodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Fri, 7 May 2021 01:39:47 +0000 (01:39 +0000)
committerJulien Grall <jgrall@amazon.com>
Mon, 10 May 2021 17:35:46 +0000 (18:35 +0100)
commitd4fb5f166c2bfbaf9ba0de69da0d411288f437a9
tree962001a4c494593c7772aae6932a3163467145bf
parent30f34457b20c78b2862b2b16cb26cb4f10a667ad
optee: enable OPTEE_SMC_SEC_CAP_MEMREF_NULL capability

OP-TEE mediator already have support for NULL memory references. It
was added in patch 0dbed3ad336 ("optee: allow plain TMEM buffers with
NULL address"). But it does not propagate
OPTEE_SMC_SEC_CAP_MEMREF_NULL capability flag to a guest, so well
behaving guest can't use this feature.

Note: linux optee driver honors this capability flag when handling
buffers from userspace clients, but ignores it when working with
internal calls. For instance, __optee_enumerate_devices() function
uses NULL argument to get buffer size hint from OP-TEE. This was the
reason, why "optee: allow plain TMEM buffers with NULL address" was
introduced in the first place.

This patch adds the mentioned capability to list of known
capabilities. From Linux point of view it means that userspace clients
can use this feature, which is confirmed by OP-TEE test suite:

* regression_1025 Test memref NULL and/or 0 bytes size
o regression_1025.1 Invalid NULL buffer memref registration
  regression_1025.1 OK
o regression_1025.2 Input/Output MEMREF Buffer NULL - Size 0 bytes
  regression_1025.2 OK
o regression_1025.3 Input MEMREF Buffer NULL - Size non 0 bytes
  regression_1025.3 OK
o regression_1025.4 Input MEMREF Buffer NULL over PTA invocation
  regression_1025.4 OK
  regression_1025 OK

Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@epam.com>
Acked-by: Julien Grall <jgrall@amazon.com>
xen/arch/arm/tee/optee.c
xen/include/asm-arm/tee/optee_smc.h