From 35b00b588f0bc6681469b17f68552ddc71c68f13 Mon Sep 17 00:00:00 2001 From: cx Date: Fri, 12 Dec 2025 16:00:06 +0800 Subject: [PATCH] fix: modify log error. --- 0002-modify-log-error.patch | 2184 +++++++++++++++++++++++++++++++++++ TSB-agent.spec | 25 +- 2 files changed, 2208 insertions(+), 1 deletion(-) create mode 100644 0002-modify-log-error.patch diff --git a/0002-modify-log-error.patch b/0002-modify-log-error.patch new file mode 100644 index 0000000..d737b9d --- /dev/null +++ b/0002-modify-log-error.patch @@ -0,0 +1,2184 @@ +diff --git a/virtrust/build.sh b/virtrust/build.sh +index f27df27..2078d85 100755 +--- a/virtrust/build.sh ++++ b/virtrust/build.sh +@@ -78,8 +78,8 @@ function build_output() { + cmake .. -DCMAKE_BUILD_TYPE=${build_type} \ + -DBUILD_TEST=${enable_test}\ + -DUSE_MOCK_TSB_AGENT=Off \ +- -DCMAKE_INSTALL_PREFIX=${OUTPUT_DIR}/virtrust \ +- make ++ -DCMAKE_INSTALL_PREFIX=${OUTPUT_DIR}/virtrust ++ make -j$(nproc) + make install + popd + } +diff --git a/virtrust/docs/002-virtrust-api.md b/virtrust/docs/002-virtrust-api.md +index 8b12327..a20913e 100644 +--- a/virtrust/docs/002-virtrust-api.md ++++ b/virtrust/docs/002-virtrust-api.md +@@ -30,7 +30,6 @@ VirtrustRc DomainCreate(const std::unique_ptr &conn, const std::vector< + - `args`:参数向量,参考 `virt-install --help` 的参数格式 + - `args[0]`:必须为 virt-install 的路径,如 `/usr/bin/virt-install` + - 必须指定虚拟机名称字段 +- - `--allow-store-measurements`:可选参数,允许更新 TSB 的度量值 + + **功能描述**: + 创建一个新的虚拟机实例。该函数内部调用 virt-install 工具来创建虚拟机,并处理相关的 TSB 资源初始化。 +@@ -71,11 +70,9 @@ VirtrustRc DomainDestroy(const std::unique_ptr &conn, const std::string + + ### 3. DomainMigrate - 迁移虚拟机 + +-将虚拟机迁移到其他主机。当前仅支持离线迁移,虚拟机在 running/shut-off 状态下,非共享存储需要用户手动复制磁盘文件,例如 qcow2 到目的端口,目标存在同名运行的虚拟机情况下不能迁移,可配置源虚拟机是否删除,重复迁移会覆盖目标端虚拟机。 +- + ```cpp + VirtrustRc DomainMigrate(const std::unique_ptr &conn, const std::string &domainName, +- const std::string &destUri, unsigned int flags = 0); ++ const std::string &destUri, unsigned int flags = MIGRATE_UNDEFINE_SOURCE); + ``` + + **参数说明**: +@@ -83,12 +80,10 @@ VirtrustRc DomainMigrate(const std::unique_ptr &conn, const std::string + - `domainName`:虚拟机名称 + - `destUri`:目标端地址,格式为 `://:/` + - 示例:`qemu+tls://7.7.7.7:8080/system` +-- `flags`:迁移标志 +- - 默认为 0:不删除源端虚拟机 +- - `MIGRATE_UNDEFINE_SOURCE`:迁移成功后删除源端虚拟机 ++- `flags`:迁移标志,目前仅支持MIGRATE_UNDEFINE_SOURCE(迁移成功后删除源端虚机) + + **功能描述**: +-将虚拟机从当前主机迁移到目标主机。支持安全的迁移过程,包括 TSB 资源的同步。 ++将虚拟机从当前主机迁移到目标主机。支持安全的迁移过程,包括 TSB 资源的同步。当前仅支持离线迁移,并且需要确保虚拟机在 shut-off 状态下。如待迁移虚拟机配置了非共享存储,则用户需要手动复制磁盘文件(例如 qcow2)到目的节点。如果目标存在同名运行的虚拟机情况下不能迁移。当前仅支持迁移成功后删除源虚拟机。重复迁移会覆盖目标端虚拟机。 + + **返回值**: + - 成功返回 `VirtrustRc::OK` +@@ -108,6 +103,7 @@ VirtrustRc DomainStart(const std::unique_ptr &conn, const std::string & + - 当 `isOnlyTsb` 为 true 时,使用 UUID 时将忽略 flags 入参 + - `flags`:启动标志,参考 `DomainStartFlags`(当前仅定义 `DOMAIN_START_NONE = 0`) + - `isOnlyTsb`:是否只更新 TSB 资源的标志 ++- + - `true`:仅更新 TSB 资源 + - `false`:执行完整的虚拟机启动操作 + +@@ -117,8 +113,6 @@ VirtrustRc DomainStart(const std::unique_ptr &conn, const std::string & + **注意事项**: + - 当使用 `--only-tsb/isOnlyTsb` 选项时,入参 `domainName` 应传入对应虚拟机的 `uuid` + - `domainName` 长度为 [1, 200] +-- `desturi` 为目标端 uri,格式为 `://:/`,如 `qemu+tls:///system` +- + + ### 5. DomainUndefine - 删除虚拟机 + +diff --git a/virtrust/docs/003-virtrust-sh.md b/virtrust/docs/003-virtrust-sh.md +index 2db5dcb..43b82bb 100644 +--- a/virtrust/docs/003-virtrust-sh.md ++++ b/virtrust/docs/003-virtrust-sh.md +@@ -4,7 +4,7 @@ + + Virtrust Shell (virtrust-sh) 是 virtrust 项目的命令行界面工具,为用户提供了交互式的虚拟机管理功能。它基于 virtrust API 库构建,支持虚拟机的完整生命周期管理操作。 + +-- **虚拟机生命周期管理**:创建、启动、停止、迁移、查询和删除虚拟机 ++- **虚拟机生命周期管理**:创建、启动、停止、迁移、查询和删除虚拟机定义 + + ## 安装和使用 + +@@ -29,11 +29,11 @@ virtrust-sh [options]... [args...] + | 命令 | 描述 | + |------|------| + | `create` | 创建虚拟机实例 | +-| `destroy` | 销毁(停止)虚拟机域 | ++| `destroy` | 强制关闭(停止)虚拟机域 | + | `list` | 列出虚拟机信息 | + | `migrate` | 迁移虚拟机到其他主机 | + | `start` | 启动(先前定义的)非活动虚拟机域 | +-| `undefine` | 取消定义虚拟机域 | ++| `undefine` | 删除虚拟机定义 | + + ## 详细命令说明 + +@@ -43,12 +43,11 @@ virtrust-sh [options]... [args...] + + **基本语法**: + ```bash +-virtrust-sh create [options] [virt-install 支持的参数...] ++virtrust-sh create [virt-install 支持的参数...] + ``` + + **选项说明**: + - `-h | --help`:显示帮助信息 +-- `--allow-store-measurements`:允许存储测量数据(使用此选项时必须提供 `--name` 参数) + + **参数说明**: + - 必须包含虚拟机名称参数(使用 `--name` 指定) +@@ -64,13 +63,6 @@ virtrust-sh create \ + --disk path=/var/lib/libvirt/images/test-vm.qcow2,size=10 \ + --cdrom /path/to/install.iso f + --network network=default +- +-# 使用自定义连接 URI +-virtrust-sh -c qemu+tcp://host/system create \ +- --name test-vm \ +- --memory 1024 \ +- --vcpus 1 \ +- --disk path=/tmp/test.img,size=5 + ``` + + ### 2. start - 启动虚拟机 +@@ -101,9 +93,9 @@ virtrust-sh -d start test-vm + virtrust-sh start --only-tsb + ``` + +-### 3. destroy - 停止虚拟机 ++### 3. destroy - 强制关闭(停止)虚拟机 + +-强制停止运行中的虚拟机。 ++强制关闭(停止)运行中的虚拟机。 + + **基本语法**: + ```bash +@@ -115,11 +107,11 @@ virtrust-sh destroy [options] + - `--only-tsb`:仅更新 TSB 资源,需要提供虚拟机的 UUID 作为 domain_name + + **参数说明**: +-- `domain_name`:要停止的虚拟机名称或 UUID(使用 `--only-tsb` 选项时必须使用 UUID) ++- `domain_name`:要强制关闭(停止)的虚拟机名称或 UUID(使用 `--only-tsb` 选项时必须使用 UUID) + + **示例**: + ```bash +-# 停止虚拟机 ++# 强制关闭(停止)虚拟机 + virtrust-sh destroy test-vm + + # 仅更新 TSB 资源 +@@ -128,7 +120,7 @@ virtrust-sh destroy --only-tsb + + ### 4. undefine - 删除虚拟机定义 + +-删除虚拟机的配置定义,但不会删除磁盘镜像文件。 ++删除虚拟机定义,但不会删除磁盘镜像文件。 + + **基本语法**: + ```bash +@@ -161,7 +153,7 @@ virtrust-sh undefine --only-tsb + + ### 5. migrate - 迁移虚拟机 + +-将虚拟机迁移到其他主机。当前仅支持离线迁移,虚拟机在 shut-off 状态下,非共享存储需要用户手动复制磁盘文件,例如 qcow2 到目的端口,可配置源虚拟机是否删除,不支持重复迁移(目的端已存在会迁移失败)。 ++将虚拟机迁移到其他主机。当前仅支持离线迁移,虚拟机在 shut-off 状态下,非共享存储需要用户手动复制磁盘镜像文件到目的节点的相同木木目录下目的主机节点,;可配置源虚拟机是否删除,不支持重复迁移(目的端已存在会迁移失败)。 + + **基本语法**: + ```bash +@@ -170,7 +162,7 @@ virtrust-sh migrate [options] + + **选项说明**: + - `-h | --help`:显示帮助信息 +-- `--undefinesource`:迁移完成后删除源主机的虚拟机定义 ++- `--undefinesource`:迁移完成后删除源主机的虚拟机定义,当前仅支持且默认为该选项。 + + **参数说明**: + - `domain_name`:要迁移的虚拟机名称,长度为 [1, 200] +@@ -183,9 +175,6 @@ virtrust-sh migrate test-vm qemu+tls://192.168.1.100:16509/system + + # 使用 TLS 加密迁移 + virtrust-sh migrate test-vm qemu+tls://dest-host/system +- +-# 迁移并删除源主机虚拟机定义 +-virtrust-sh migrate --undefinesource test-vm qemu+tls://dest-host/system + ``` + + ### 6. list - 列出虚拟机信息 +diff --git a/virtrust/rpm/TSB-agent.spec b/virtrust/rpm/TSB-agent.spec +index bf05ab8..96ce820 100644 +--- a/virtrust/rpm/TSB-agent.spec ++++ b/virtrust/rpm/TSB-agent.spec +@@ -71,6 +71,7 @@ export CFLAGS="%{optflags}" + export CXXFLAGS="%{optflags}" + + cmake -S . -B build \ ++ -DBUILD_TEST=Off \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_CXX_STANDARD=17 \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ +diff --git a/virtrust/src/tsb_agent/CMakeLists.txt b/virtrust/src/tsb_agent/CMakeLists.txt +index 3d1e4ac..3959da2 100644 +--- a/virtrust/src/tsb_agent/CMakeLists.txt ++++ b/virtrust/src/tsb_agent/CMakeLists.txt +@@ -5,12 +5,11 @@ if(USE_MOCK_TSB_AGENT) + add_subdirectory(mock) + else() + add_library(tsb-agent STATIC tsb_agent_adaptor.cpp) +- set_target_properties(tsb-agent PROPERTIES +- POSITION_INDEPENDENT_CODE ON +- ) ++ set_target_properties(tsb-agent PROPERTIES POSITION_INDEPENDENT_CODE ON) + target_link_libraries(tsb-agent PRIVATE dl) +- target_include_directories(tsb-agent PRIVATE ${CMAKE_DEPS_INCLUDEDIR} +- $) ++ target_include_directories( ++ tsb-agent PRIVATE ${CMAKE_DEPS_INCLUDEDIR} ++ $) + endif() + + # NOTE Make sure targets are linekd to tsb-agent +diff --git a/virtrust/src/tsb_agent/mock/tsb_agent_adaptor.cpp b/virtrust/src/tsb_agent/mock/tsb_agent_adaptor.cpp +index 794391e..ca39e71 100644 +--- a/virtrust/src/tsb_agent/mock/tsb_agent_adaptor.cpp ++++ b/virtrust/src/tsb_agent/mock/tsb_agent_adaptor.cpp +@@ -35,7 +35,9 @@ int GetVRoots(int *vtpcmNums, struct Description **vtpcmInfo) + // 分配内存 + if (*vtpcmNums > 0) { + *vtpcmInfo = static_cast(malloc(*vtpcmNums * sizeof(Description))); +- ++ if (vtpcmInfo == nullptr) { ++ return -1; ++ } + // 将 instances 中的数据复制到 *vtpcmInfo中 + for (int i = 0; i < *vtpcmNums; i++) { + (*vtpcmInfo)[i] = instances[i]; +@@ -124,14 +126,24 @@ int MigrationGetCert(char *vUuid, // 虚拟机的uuid + if (cert == nullptr || pubkey == nullptr || rc != TsbAgentRc::OK || *cert != nullptr || *pubkey != nullptr) { + return ParseTsbAgentRc(TsbAgentRc::ERROR); + } +- +- *certLen = out_cert.size(); ++ if (out_cert.size() > static_cast(INT_MAX)) { ++ return ParseTsbAgentRc(TsbAgentRc::ERROR); ++ } ++ *certLen = static_cast(out_cert.size()); + *cert = static_cast(malloc(*certLen)); +- memcpy(cert, out_cert.data(), out_cert.size()); +- ++ if (memcpy_s(*cert, *certLen, out_cert.data(), out_cert.size()) != EOK) { ++ free(*cert); ++ *cert = nullptr; ++ return ParseTsbAgentRc(TsbAgentRc::ERROR); ++ } ++ if (out_pubkey.size() > static_cast(INT_MAX)) { ++ free(*cert); ++ *cert = nullptr; ++ return ParseTsbAgentRc(TsbAgentRc::ERROR); ++ } + *pubkeyLen = out_pubkey.size(); + *pubkey = static_cast(malloc(out_pubkey.size())); +- memcpy(pubkey, out_pubkey.data(), out_pubkey.size()); ++ memcpy(*pubkey, out_pubkey.data(), out_pubkey.size()); + + return ParseTsbAgentRc(rc); + } +diff --git a/virtrust/src/tsb_agent/mock/tsb_agent_impl.cpp b/virtrust/src/tsb_agent/mock/tsb_agent_impl.cpp +index 6191d22..6932bf1 100644 +--- a/virtrust/src/tsb_agent/mock/tsb_agent_impl.cpp ++++ b/virtrust/src/tsb_agent/mock/tsb_agent_impl.cpp +@@ -114,6 +114,10 @@ std::unordered_map> LoadVRootsFromFile(const + // decode line format + std::vector lineVec; + StrSplit(line, TSB_AGENT_FILE_SEP, lineVec); ++ if (lineVec.size() < 10) { ++ SPDLOG_ERROR("[MOCK-TSB-AGENT] Invalid line format in file: {}, line: {}", file, line); ++ continue; ++ } + // decode descriptions + VRootData data; + data.uuid = FromStr(lineVec[0]); // uuid +@@ -163,6 +167,10 @@ TsbAgentRc TsbAgentImpl::CreateVRoot(const std::string &uuid, const std::string + } + + VRootData desc; ++ if (uuid.size() >= desc.uuid.size() || name.size() >= desc.name.size()) { ++ SPDLOG_ERROR("[MOCK-TSB-AGENT] uuid or name is too long."); ++ return TsbAgentRc::ERROR; ++ } + if (memcpy_s(desc.uuid.data(), desc.uuid.size(), uuid.data(), uuid.size()) != EOK) { + SPDLOG_ERROR("[MOCK-TSB-AGENT] copy uuid failed"); + +diff --git a/virtrust/src/tsb_agent/tsb_agent.h b/virtrust/src/tsb_agent/tsb_agent.h +index f04da40..f7d24af 100644 +--- a/virtrust/src/tsb_agent/tsb_agent.h ++++ b/virtrust/src/tsb_agent/tsb_agent.h +@@ -61,14 +61,14 @@ enum EnDirection { + }; + + enum EN_STATE { +- VM_SHUTUP = 0, // 虚机停止状态,Description.state状态码 +- VM_RUNNING, // 虚机运行状态 +- VM_MIGRATION, // 虚机迁移状态 ++ VM_SHUTUP = 0, // 虚机停止状态,Description.state状态码 ++ VM_RUNNING, // 虚机运行状态 ++ VM_MIGRATION, // 虚机迁移状态 + +- IMPORT_BM_SUCCESS, // 基线值设置成功,CheckMeasure返回值 +- CHECK_BM_SUCCESS, // 基线值校验成功,CheckMeasure返回值 +- IMPORT_BM_FAILURE, // 基线值设置失败,CheckMeasure返回值 +- CHECK_BM_FAILURE, // 基线值校验失败,CheckMeasure返回值 ++ IMPORT_BM_SUCCESS, // 基线值设置成功,CheckMeasure返回值 ++ CHECK_BM_SUCCESS, // 基线值校验成功,CheckMeasure返回值 ++ IMPORT_BM_FAILURE, // 基线值设置失败,CheckMeasure返回值 ++ CHECK_BM_FAILURE, // 基线值校验失败,CheckMeasure返回值 + + ERR_VM_NOT_STARTED, // 虚机未启动错误,MigrationGetVrootCipher 返回值 + }; +@@ -208,7 +208,7 @@ int MigrationGetVrootCipher(char *pUuid, + ); + + int MigrationImportVrootCipher(char *pUuid, +- char *vUuid, // 虚拟机的uuid ++ char *vUuid, // 虚拟机的uuid + char *cipher, // 加密后的密码资源 + int cipherLen // 密文长度 + ); +diff --git a/virtrust/src/tsb_agent/tsb_agent_adaptor.cpp b/virtrust/src/tsb_agent/tsb_agent_adaptor.cpp +index c702837..5fbb9c2 100644 +--- a/virtrust/src/tsb_agent/tsb_agent_adaptor.cpp ++++ b/virtrust/src/tsb_agent/tsb_agent_adaptor.cpp +@@ -5,6 +5,7 @@ + // 适配器:对外保持 C 接口不变,内部通过 TsbAgent 封装进行 dlopen 调用 + + #include "tsb_agent/tsb_agent.h" ++ + #include "virtrust/dllib/tsb_agent.h" + + namespace { +@@ -13,7 +14,7 @@ bool CheckTsbAgentDlopen() + auto &ta = virtrust::TsbAgent::GetInstance(); + return ta.CheckOk() == virtrust::DllibRc::OK; + } +-} ++} // namespace + + // NOTE ALL memories are allocated inside APIs by using "malloc", remember to free after use. + +@@ -140,7 +141,7 @@ int MigrationGetVrootCipher(char *pUuid, + } + + int MigrationImportVrootCipher(char *pUuid, +- char *vUuid, // 虚拟机的uuid ++ char *vUuid, // 虚拟机的uuid + char *cipher, // 加密后的密码资源 + int cipherLen // 密文长度 + ) +diff --git a/virtrust/src/virtrust-sh/operator/op_create.cpp b/virtrust/src/virtrust-sh/operator/op_create.cpp +index 6c1e687..6ffba44 100644 +--- a/virtrust/src/virtrust-sh/operator/op_create.cpp ++++ b/virtrust/src/virtrust-sh/operator/op_create.cpp +@@ -40,7 +40,6 @@ OpRc OpCreate::ParseArgv(int argc, char **argv) + + std::vector