我正在使用 OP-TEE (TrustZone Secure OS) 库用 C 语言开发一个基本应用程序。我在 QEMU 中运行代码。这是发生奇怪行为的代码:
void prepare_rsa_operation(TEE_OperationHandle *handle, uint32_t alg, TEE_OperationMode mode, TEE_ObjectHandle key) {
TEE_Result ret = TEE_SUCCESS;
TEE_ObjectInfo key_info;
ret = TEE_GetObjectInfo1(key, &key_info);
if (ret != TEE_SUCCESS) {
EMSG("TEE_GetObjectInfo1: %#" PRIx32, ret);
goto err;
}
ret = TEE_AllocateOperation(handle, alg, mode, key_info.keySize);
if (ret != TEE_SUCCESS) {
EMSG("Failed to alloc operation handle : 0x%x", ret);
goto err;
}
DMSG("========== Operation allocated successfully. ==========");
ret = TEE_SetOperationKey(*handle, key);
if (ret != TEE_SUCCESS) {
EMSG("Failed to set key : 0x%x", ret);
goto err;
}
DMSG("========== Operation key already set. ==========");
err:
TEE_FreeOperation(handle);
return 1;
}
发生的问题:
正在打印两个成功的消息(用于操作分配和键设置),但err
即使达到标签:TEE_FreeOperation(handle);
应该写入TEE_FreeOperation(*handle);
。我修复了这个并删除了return
, 因为我的函数返回void
. 现在,代码运行良好,但据我了解,只有在条件测试( 's)之一失败err
时才应该达到标签,因为命令就在其中。if
goto
我对这种理解有误吗?谁能解释我为什么err
即使之前没有发生错误也达到了标签?