xtest 6009: TEE_GetNextPersistentObject with objectInfo==NULL

Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
Signed-off-by: Pascal Brand <pascal.brand@st.com>
diff --git a/ta/storage/storage.c b/ta/storage/storage.c
index 5f3360e..599a5be 100644
--- a/ta/storage/storage.c
+++ b/ta/storage/storage.c
@@ -241,21 +241,32 @@
 TEE_Result ta_storage_cmd_next_enum(uint32_t param_types, TEE_Param params[4])
 {
 	TEE_ObjectEnumHandle oe = VAL2HANDLE(params[0].value.a);
+	TEE_ObjectInfo *obj;
 
-	ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
-			  (TEE_PARAM_TYPE_VALUE_INPUT,
-			   TEE_PARAM_TYPE_MEMREF_OUTPUT,
-			   TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE));
+	if (TEE_PARAM_TYPE_GET(param_types, 0) != TEE_PARAM_TYPE_VALUE_INPUT)
+		return TEE_ERROR_BAD_PARAMETERS;
+	if (TEE_PARAM_TYPE_GET(param_types, 2) != TEE_PARAM_TYPE_MEMREF_OUTPUT)
+		return TEE_ERROR_BAD_PARAMETERS;
+	if (TEE_PARAM_TYPE_GET(param_types, 3) != TEE_PARAM_TYPE_NONE)
+		return TEE_ERROR_BAD_PARAMETERS;
 
-	if (params[1].memref.size < sizeof(TEE_ObjectInfo))
-		return TEE_ERROR_SHORT_BUFFER;
+	if (TEE_PARAM_TYPE_GET(param_types, 1) == TEE_PARAM_TYPE_NONE)
+		obj = NULL;
+	else if (TEE_PARAM_TYPE_GET(param_types, 1) ==
+		 TEE_PARAM_TYPE_MEMREF_OUTPUT) {
+		if (params[1].memref.size < sizeof(TEE_ObjectInfo)) {
+			params[1].memref.size = sizeof(TEE_ObjectInfo);
+			return TEE_ERROR_SHORT_BUFFER;
+		}
+		params[1].memref.size = sizeof(TEE_ObjectInfo);
+		obj = (TEE_ObjectInfo *)params[1].memref.buffer;
+	} else
+		return TEE_ERROR_BAD_PARAMETERS;
 
 	if (params[2].memref.size < TEE_OBJECT_ID_MAX_LEN)
 		return TEE_ERROR_SHORT_BUFFER;
 
-	params[1].memref.size = sizeof(TEE_ObjectInfo);
-
-	return TEE_GetNextPersistentObject(oe,
-			(TEE_ObjectInfo *)params[1].memref.buffer,
-			params[2].memref.buffer, &params[2].memref.size);
+	return TEE_GetNextPersistentObject(oe, obj,
+					   params[2].memref.buffer,
+					   &params[2].memref.size);
 }