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, ¶ms[2].memref.size);
+ return TEE_GetNextPersistentObject(oe, obj,
+ params[2].memref.buffer,
+ ¶ms[2].memref.size);
}