U-Boot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] tee: optee: don't fail on services enumeration failure
@ 2023-11-29 12:37 Etienne Carriere
  2023-11-29 12:37 ` [PATCH 2/2] tee: optee: don't enumerate services if there ain't any Etienne Carriere
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Etienne Carriere @ 2023-11-29 12:37 UTC (permalink / raw)
  To: u-boot; +Cc: Jens Wiklander, Patrick Delaunay, Patrice Chotard,
	Etienne Carriere

Change optee probe function to only warn when service enumeration
sequence fails instead of reporting an optee driver probe failure.
Indeed U-Boot can still use OP-TEE even if some OP-TEE services are
not discovered.

Fixes: 94ccfb78a4d6 ("drivers: tee: optee: discover OP-TEE services")
Signed-off-by: Etienne Carriere <etienne.carriere@foss.st.com>
---
 drivers/tee/optee/core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c
index 9a9b697e91..5308dd58ce 100644
--- a/drivers/tee/optee/core.c
+++ b/drivers/tee/optee/core.c
@@ -841,7 +841,7 @@ static int optee_probe(struct udevice *dev)
 	if (IS_ENABLED(CONFIG_OPTEE_SERVICE_DISCOVERY)) {
 		ret = bind_service_drivers(dev);
 		if (ret)
-			return ret;
+			dev_warn(dev, "optee service enumeration failed: %d\n", ret);
 	} else if (IS_ENABLED(CONFIG_RNG_OPTEE)) {
 		/*
 		 * Discovery of TAs on the TEE bus is not supported in U-Boot:
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] tee: optee: don't enumerate services if there ain't any
  2023-11-29 12:37 [PATCH 1/2] tee: optee: don't fail on services enumeration failure Etienne Carriere
@ 2023-11-29 12:37 ` Etienne Carriere
  2023-12-01 10:05   ` Patrice CHOTARD
                     ` (2 more replies)
  2023-12-01 10:05 ` [PATCH 1/2] tee: optee: don't fail on services enumeration failure Patrice CHOTARD
                   ` (2 subsequent siblings)
  3 siblings, 3 replies; 8+ messages in thread
From: Etienne Carriere @ 2023-11-29 12:37 UTC (permalink / raw)
  To: u-boot; +Cc: Jens Wiklander, Patrick Delaunay, Patrice Chotard,
	Etienne Carriere

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: 94ccfb78a4d6 ("drivers: tee: optee: discover OP-TEE services")
Signed-off-by: Etienne Carriere <etienne.carriere@foss.st.com>
---
 drivers/tee/optee/core.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c
index 5308dd58ce..47f845cffe 100644
--- a/drivers/tee/optee/core.c
+++ b/drivers/tee/optee/core.c
@@ -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);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] tee: optee: don't fail on services enumeration failure
  2023-11-29 12:37 [PATCH 1/2] tee: optee: don't fail on services enumeration failure Etienne Carriere
  2023-11-29 12:37 ` [PATCH 2/2] tee: optee: don't enumerate services if there ain't any Etienne Carriere
@ 2023-12-01 10:05 ` Patrice CHOTARD
  2023-12-05 15:14 ` Jens Wiklander
  2023-12-19 17:46 ` Tom Rini
  3 siblings, 0 replies; 8+ messages in thread
From: Patrice CHOTARD @ 2023-12-01 10:05 UTC (permalink / raw)
  To: Etienne Carriere, u-boot; +Cc: Jens Wiklander, Patrick Delaunay



On 11/29/23 13:37, Etienne Carriere wrote:
> Change optee probe function to only warn when service enumeration
> sequence fails instead of reporting an optee driver probe failure.
> Indeed U-Boot can still use OP-TEE even if some OP-TEE services are
> not discovered.
> 
> Fixes: 94ccfb78a4d6 ("drivers: tee: optee: discover OP-TEE services")
> Signed-off-by: Etienne Carriere <etienne.carriere@foss.st.com>
> ---
>  drivers/tee/optee/core.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c
> index 9a9b697e91..5308dd58ce 100644
> --- a/drivers/tee/optee/core.c
> +++ b/drivers/tee/optee/core.c
> @@ -841,7 +841,7 @@ static int optee_probe(struct udevice *dev)
>  	if (IS_ENABLED(CONFIG_OPTEE_SERVICE_DISCOVERY)) {
>  		ret = bind_service_drivers(dev);
>  		if (ret)
> -			return ret;
> +			dev_warn(dev, "optee service enumeration failed: %d\n", ret);
>  	} else if (IS_ENABLED(CONFIG_RNG_OPTEE)) {
>  		/*
>  		 * Discovery of TAs on the TEE bus is not supported in U-Boot:

Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>

Thanks
Patrice

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] tee: optee: don't enumerate services if there ain't any
  2023-11-29 12:37 ` [PATCH 2/2] tee: optee: don't enumerate services if there ain't any Etienne Carriere
@ 2023-12-01 10:05   ` Patrice CHOTARD
  2023-12-05 15:20   ` Jens Wiklander
  2023-12-19 17:46   ` Tom Rini
  2 siblings, 0 replies; 8+ messages in thread
From: Patrice CHOTARD @ 2023-12-01 10:05 UTC (permalink / raw)
  To: Etienne Carriere, u-boot; +Cc: Jens Wiklander, Patrick Delaunay



On 11/29/23 13:37, Etienne Carriere wrote:
> 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: 94ccfb78a4d6 ("drivers: tee: optee: discover OP-TEE services")
> Signed-off-by: Etienne Carriere <etienne.carriere@foss.st.com>
> ---
>  drivers/tee/optee/core.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c
> index 5308dd58ce..47f845cffe 100644
> --- a/drivers/tee/optee/core.c
> +++ b/drivers/tee/optee/core.c
> @@ -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);
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>

Thanks
Patrice

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] tee: optee: don't fail on services enumeration failure
  2023-11-29 12:37 [PATCH 1/2] tee: optee: don't fail on services enumeration failure Etienne Carriere
  2023-11-29 12:37 ` [PATCH 2/2] tee: optee: don't enumerate services if there ain't any Etienne Carriere
  2023-12-01 10:05 ` [PATCH 1/2] tee: optee: don't fail on services enumeration failure Patrice CHOTARD
@ 2023-12-05 15:14 ` Jens Wiklander
  2023-12-19 17:46 ` Tom Rini
  3 siblings, 0 replies; 8+ messages in thread
From: Jens Wiklander @ 2023-12-05 15:14 UTC (permalink / raw)
  To: Etienne Carriere; +Cc: u-boot, Patrick Delaunay, Patrice Chotard

On Wed, Nov 29, 2023 at 1:37 PM Etienne Carriere
<etienne.carriere@foss.st.com> wrote:
>
> Change optee probe function to only warn when service enumeration
> sequence fails instead of reporting an optee driver probe failure.
> Indeed U-Boot can still use OP-TEE even if some OP-TEE services are
> not discovered.
>
> Fixes: 94ccfb78a4d6 ("drivers: tee: optee: discover OP-TEE services")
> Signed-off-by: Etienne Carriere <etienne.carriere@foss.st.com>
> ---
>  drivers/tee/optee/core.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c
> index 9a9b697e91..5308dd58ce 100644
> --- a/drivers/tee/optee/core.c
> +++ b/drivers/tee/optee/core.c
> @@ -841,7 +841,7 @@ static int optee_probe(struct udevice *dev)
>         if (IS_ENABLED(CONFIG_OPTEE_SERVICE_DISCOVERY)) {
>                 ret = bind_service_drivers(dev);
>                 if (ret)
> -                       return ret;
> +                       dev_warn(dev, "optee service enumeration failed: %d\n", ret);
>         } else if (IS_ENABLED(CONFIG_RNG_OPTEE)) {
>                 /*
>                  * Discovery of TAs on the TEE bus is not supported in U-Boot:
> --
> 2.25.1
>

Looks good.
Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>

Thanks,
Jens

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] tee: optee: don't enumerate services if there ain't any
  2023-11-29 12:37 ` [PATCH 2/2] tee: optee: don't enumerate services if there ain't any Etienne Carriere
  2023-12-01 10:05   ` Patrice CHOTARD
@ 2023-12-05 15:20   ` Jens Wiklander
  2023-12-19 17:46   ` Tom Rini
  2 siblings, 0 replies; 8+ messages in thread
From: Jens Wiklander @ 2023-12-05 15:20 UTC (permalink / raw)
  To: Etienne Carriere; +Cc: u-boot, Patrick Delaunay, Patrice Chotard

On Wed, Nov 29, 2023 at 1:37 PM Etienne Carriere
<etienne.carriere@foss.st.com> wrote:
>
> 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: 94ccfb78a4d6 ("drivers: tee: optee: discover OP-TEE services")
> Signed-off-by: Etienne Carriere <etienne.carriere@foss.st.com>
> ---
>  drivers/tee/optee/core.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)

Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>

Thanks,
Jens

>
> diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c
> index 5308dd58ce..47f845cffe 100644
> --- a/drivers/tee/optee/core.c
> +++ b/drivers/tee/optee/core.c
> @@ -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);
> --
> 2.25.1
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] tee: optee: don't fail on services enumeration failure
  2023-11-29 12:37 [PATCH 1/2] tee: optee: don't fail on services enumeration failure Etienne Carriere
                   ` (2 preceding siblings ...)
  2023-12-05 15:14 ` Jens Wiklander
@ 2023-12-19 17:46 ` Tom Rini
  3 siblings, 0 replies; 8+ messages in thread
From: Tom Rini @ 2023-12-19 17:46 UTC (permalink / raw)
  To: Etienne Carriere
  Cc: u-boot, Jens Wiklander, Patrick Delaunay, Patrice Chotard

[-- Attachment #1: Type: text/plain, Size: 609 bytes --]

On Wed, Nov 29, 2023 at 01:37:52PM +0100, Etienne Carriere wrote:

> Change optee probe function to only warn when service enumeration
> sequence fails instead of reporting an optee driver probe failure.
> Indeed U-Boot can still use OP-TEE even if some OP-TEE services are
> not discovered.
> 
> Fixes: 94ccfb78a4d6 ("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>

Applied to u-boot/next, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] tee: optee: don't enumerate services if there ain't any
  2023-11-29 12:37 ` [PATCH 2/2] tee: optee: don't enumerate services if there ain't any Etienne Carriere
  2023-12-01 10:05   ` Patrice CHOTARD
  2023-12-05 15:20   ` Jens Wiklander
@ 2023-12-19 17:46   ` Tom Rini
  2 siblings, 0 replies; 8+ messages in thread
From: Tom Rini @ 2023-12-19 17:46 UTC (permalink / raw)
  To: Etienne Carriere
  Cc: u-boot, Jens Wiklander, Patrick Delaunay, Patrice Chotard

[-- Attachment #1: Type: text/plain, Size: 890 bytes --]

On Wed, Nov 29, 2023 at 01:37:53PM +0100, Etienne Carriere wrote:

> 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: 94ccfb78a4d6 ("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>

Applied to u-boot/next, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-12-19 17:47 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-29 12:37 [PATCH 1/2] tee: optee: don't fail on services enumeration failure Etienne Carriere
2023-11-29 12:37 ` [PATCH 2/2] tee: optee: don't enumerate services if there ain't any Etienne Carriere
2023-12-01 10:05   ` Patrice CHOTARD
2023-12-05 15:20   ` Jens Wiklander
2023-12-19 17:46   ` Tom Rini
2023-12-01 10:05 ` [PATCH 1/2] tee: optee: don't fail on services enumeration failure Patrice CHOTARD
2023-12-05 15:14 ` Jens Wiklander
2023-12-19 17:46 ` Tom Rini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox