The arg->session is not valid if arg->ret != NULL, so can't be
assigned, correct this. Also remove "while" loop as there is no
reason for looping till correct session is opened.

Signed-off-by: Ivan Khoronzhuk <ivan.khoronz...@globallogic.com>
---
 common/avb_verify.c | 38 +++++++++++++++++++-------------------
 1 file changed, 19 insertions(+), 19 deletions(-)

diff --git a/common/avb_verify.c b/common/avb_verify.c
index 0520a71455..c3cccd986d 100644
--- a/common/avb_verify.c
+++ b/common/avb_verify.c
@@ -605,26 +605,26 @@ static AvbIOResult validate_vbmeta_public_key(AvbOps *ops,
 #ifdef CONFIG_OPTEE_TA_AVB
 static int get_open_session(struct AvbOpsData *ops_data)
 {
-       struct udevice *tee = NULL;
-
-       while (!ops_data->tee) {
-               const struct tee_optee_ta_uuid uuid = TA_AVB_UUID;
-               struct tee_open_session_arg arg;
-               int rc;
-
-               tee = tee_find_device(tee, NULL, NULL, NULL);
-               if (!tee)
-                       return -ENODEV;
-
-               memset(&arg, 0, sizeof(arg));
-               tee_optee_ta_uuid_to_octets(arg.uuid, &uuid);
-               rc = tee_open_session(tee, &arg, 0, NULL);
-               if (!rc) {
-                       ops_data->tee = tee;
-                       ops_data->session = arg.session;
-               }
-       }
+       const struct tee_optee_ta_uuid uuid = TA_AVB_UUID;
+       struct tee_open_session_arg arg;
+       struct udevice *tee;
+       int rc;
+
+       if (ops_data->tee)
+               return 0;
+
+       tee = tee_find_device(NULL, NULL, NULL, NULL);
+       if (!tee)
+               return -ENODEV;
+
+       memset(&arg, 0, sizeof(arg));
+       tee_optee_ta_uuid_to_octets(arg.uuid, &uuid);
+       rc = tee_open_session(tee, &arg, 0, NULL);
+       if (rc || arg.ret)
+               return -EIO;
 
+       ops_data->tee = tee;
+       ops_data->session = arg.session;
        return 0;
 }
 
-- 
2.34.1

Reply via email to