mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-05 02:23:31 +08:00
tee: optee: don't enumerate services if there ain't any
Change optee driver service enumeration to not enumerate (and
allocate a zero sized shared memory buffer) when OP-TEE
reports that there is no service to enumerate.
This change fixes an existing issue that occurs when the such zero
sized shared memory buffer allocated from malloc() has a physical
address of offset 0 of a physical 4kB page. In such case, OP-TEE
secure world refuses to register the zero-sized shared memory
area and makes U-Boot optee service enumeration to fail.
Fixes: 94ccfb78a4
("drivers: tee: optee: discover OP-TEE services")
Signed-off-by: Etienne Carriere <etienne.carriere@foss.st.com>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
This commit is contained in:
parent
ab9500e9c3
commit
51774b3b03
@ -139,6 +139,11 @@ static int enum_services(struct udevice *dev, struct tee_shm **shm, size_t *coun
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (!shm_size) {
|
||||
*count = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = tee_shm_alloc(dev, shm_size, 0, shm);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to allocated shared memory: %d\n", ret);
|
||||
@ -185,14 +190,15 @@ static int bind_service_drivers(struct udevice *dev)
|
||||
|
||||
ret = enum_services(dev, &service_list, &service_count, tee_sess,
|
||||
PTA_CMD_GET_DEVICES);
|
||||
if (!ret)
|
||||
if (!ret && service_count)
|
||||
ret = bind_service_list(dev, service_list, service_count);
|
||||
|
||||
tee_shm_free(service_list);
|
||||
service_list = NULL;
|
||||
|
||||
ret2 = enum_services(dev, &service_list, &service_count, tee_sess,
|
||||
PTA_CMD_GET_DEVICES_SUPP);
|
||||
if (!ret2)
|
||||
if (!ret2 && service_count)
|
||||
ret2 = bind_service_list(dev, service_list, service_count);
|
||||
|
||||
tee_shm_free(service_list);
|
||||
|
Loading…
Reference in New Issue
Block a user