in TAs/optee_ta/AuthVars/AuthVars.c [178:219]
static TEE_Result AuthVarGetNext(
uint32_t ParamTypes,
TEE_Param Params[4]
)
{
VARIABLE_GET_NEXT_PARAM *GetNextParam;
VARIABLE_GET_NEXT_RESULT *GetNextResult;
uint32_t GetNextParamSize;
uint32_t GetNextResultSize;
uint32_t ExpectedTypes;
TEE_Result Status;
ExpectedTypes = TEE_PARAM_TYPES(
TEE_PARAM_TYPE_MEMREF_INPUT,
TEE_PARAM_TYPE_MEMREF_OUTPUT,
TEE_PARAM_TYPE_VALUE_OUTPUT,
TEE_PARAM_TYPE_NONE);
// Validate parameter types
if (ParamTypes != ExpectedTypes) {
IMSG("AuthVarGetNext: bad param types");
return TEE_ERROR_BAD_PARAMETERS;
}
GetNextParam = (VARIABLE_GET_NEXT_PARAM *)Params[0].memref.buffer;
GetNextParamSize = Params[0].memref.size;
GetNextResult = (VARIABLE_GET_RESULT *)Params[1].memref.buffer;
GetNextResultSize = Params[1].memref.size;
// Call VarOps
Status = GetNextVariableName(GetNextParamSize, GetNextParam, &GetNextResultSize, GetNextResult);
Params[2].value.a = GetNextResultSize;
// Authvars driver expects TEE_SUCCESS, TEE_ERROR_SHORT_BUFFER,
// or TEEC_ERROR_ITEM_NOT_FOUND as a return value. All other values
// are handled as errors. Return values are also passed back through
// parameter 2b to be handled by the command specific part of the driver.
Params[2].value.b = Status;
return Status;
}