static TEE_Result AuthVarGetNext()

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;
}