From 52149d5a3ddd444c383b94cd4517b15e689a365c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E7=A5=A5?= Date: Sat, 14 Jun 2025 08:31:22 +0000 Subject: [PATCH 1/9] hvb support vab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高祥 --- .../innerkits/fs_manager/libfs_hvb/fs_hvb.c | 25 +++++++++++++ .../innerkits/fs_manager/libfs_hvb/hvb_ops.c | 35 +++++++++++++++++++ .../innerkits/include/fs_manager/fs_manager.h | 16 +++++++++ .../init_module_engine/include/bootstage.h | 1 + test/unittest/BUILD.gn | 5 +++ 5 files changed, 82 insertions(+) diff --git a/interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c b/interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c index 377b715b7..327bd3077 100755 --- a/interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c +++ b/interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c @@ -25,6 +25,10 @@ #include #include "hvb_sm2.h" #include "hvb_sm3.h" +#include "hookmgr.h" +#include "bootstage.h" +#include "fs_manager.h" +#include "list.h" #ifdef __cplusplus #if __cplusplus @@ -659,6 +663,7 @@ int FsHvbSetupHashtree(FstabItem *fsItem) FS_HVB_RETURN_ERR_IF_NULL(g_vd); // fsItem->deviceName is like /dev/block/platform/xxx/by-name/system + // for vab boot, is like /dev/block/dm-1 // we just basename system devName = basename(fsItem->deviceName); if (devName == NULL) { @@ -666,6 +671,26 @@ int FsHvbSetupHashtree(FstabItem *fsItem) return -1; } + // for virtual ab boot, find the partition name based on snapshot name + HvbDeviceParam devPara = {0}; + HOOK_EXEC_OPTIONS options; + if (memcpy_s(devPara.partName, sizeof(devPara.partName), devName, strlen(devName)) != 0) { + BEGET_LOGE("error, fail to copy shapshot name"); + return -1; + } + (void)memset_s(devPara.value, sizeof(devPara.value), 0, sizeof(devPara.value)); + devPara.reverse = 1; + devPara.len = (int)sizeof(devPara.value); + options.flags = TRAVERSE_STOP_WHEN_ERROR; + options.preHook = NULL; + options.postHook = NULL; + rc = HookMgrExecute(GetBootStageHookMgr(), INIT_VAB_HVBCHECK, (void*)&devPara, &options); + BEGET_LOGW("try find partition from snapshot path %s, ret=%d", devName, rc); + if (rc == 0) { + BEGET_LOGW("found partition %s, len=%d", devPara.value, devPara.len); + devName = devPara.value; + } + rc = FsHvbCreateVerityTarget(&target, devName, g_vd); if (rc != 0) { BEGET_LOGE("error 0x%x, create verity-table", rc); diff --git a/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c b/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c index 5fb90966c..6e76c6466 100755 --- a/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c +++ b/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c @@ -24,6 +24,10 @@ #include "fs_hvb.h" #include "securec.h" #include "init_utils.h" +#include "hookmgr.h" +#include "bootstage.h" +#include "fs_manager.h" +#include "list.h" #ifdef __cplusplus #if __cplusplus @@ -32,6 +36,7 @@ extern "C" { #endif #define PARTITION_PATH_PREFIX "/dev/block/by-name/" +#define SNAPSHOT_PATH_PREFIX "/dev/block/" #define MAX_EXT_HVB_PARTITION_NUM 1 #define FS_HVB_LOCK_STATE_STR_MAX 32 @@ -194,6 +199,36 @@ static char *HvbGetPartitionPath(const char *partition) BEGET_LOGE("error, calloc fail"); return NULL; } + + // get snapshot path for vab boot condition + HvbDeviceParam devPara = {0}; + HOOK_EXEC_OPTIONS options; + if (memcpy_s(devPara.partName, sizeof(devPara.partName), partition, strlen(partition)) != 0) { + BEGET_LOGE("error, fail to copy partition"); + return NULL; + } + (void)memset_s(devPara.value, sizeof(devPara.value), 0, sizeof(devPara.value)); + devPara.reverse = 0; + devPara.len = (int)sizeof(devPara.value); + options.flags = TRAVERSE_STOP_WHEN_ERROR; + options.preHook = NULL; + options.postHook = NULL; + rc = HookMgrExecute(GetBootStageHookMgr(), INIT_VAB_HVBCHECK, (void *)&devPara, &options); + BEGET_LOGW("check snapshot path for partition %s, ret=%d", partition, rc); + if (rc == 0) { + BEGET_LOGW("snapshot path exists for partition %s", partition); + rc = snprintf_s(path, pathLen + 1, pathLen, "%s%s", SNAPSHOT_PATH_PREFIX, + devPara.value); + if (rc < 0) { + BEGET_LOGE("error, snprintf_s snapshot path fail, ret=%d", rc); + free(path); + return NULL; + } else { + BEGET_LOGW("snapshot path generated: %s", path); + return path; + } + } + rc = snprintf_s(path, pathLen + 1, pathLen, "%s%s", PARTITION_PATH_PREFIX, partition); if (rc < 0) { diff --git a/interfaces/innerkits/include/fs_manager/fs_manager.h b/interfaces/innerkits/include/fs_manager/fs_manager.h index de7d021bb..571e4ae3c 100644 --- a/interfaces/innerkits/include/fs_manager/fs_manager.h +++ b/interfaces/innerkits/include/fs_manager/fs_manager.h @@ -38,6 +38,7 @@ extern "C" { #define FS_MANAGER_FORMATTABLE 0x00000200 #define NAME_SIZE 32 #define MAX_SLOT 2 +#define HVB_DEV_NAME_SIZE 64 #define VALID_FS_MANAGER_FLAGS (FS_MANAGER_CHECK | FS_MANAGER_WAIT | FS_MANAGER_REQUIRED) #define FS_MANAGER_FLAGS_ENABLED(fsMgrFlags, flag) (((fsMgrFlags) & FS_MANAGER_##flag) != 0) @@ -68,6 +69,20 @@ typedef struct { struct FstabItem *tail; } Fstab; +typedef struct { + char partName[HVB_DEV_NAME_SIZE]; + int reverse; // 0 :system->dm0 1:dm0->system + char value[HVB_DEV_NAME_SIZE]; + int len; +} HvbDeviceParam; + +typedef struct { + char partName[HVB_DEV_NAME_SIZE]; + int reverse; // 0 :system->dm0 1:dm0->system + char value[HVB_DEV_NAME_SIZE]; + int len; +} HvbDeviceParam; + typedef enum SlotFlag { UNBOOT = 0, ACTIVE = 1, @@ -81,6 +96,7 @@ typedef struct SlotInfo { unsigned int reserved; } SlotInfo; + Fstab* LoadFstabFromCommandLine(void); int GetBootSlots(void); int GetCurrentSlot(void); diff --git a/interfaces/innerkits/init_module_engine/include/bootstage.h b/interfaces/innerkits/init_module_engine/include/bootstage.h index 44b3e97c4..c9aa37863 100755 --- a/interfaces/innerkits/init_module_engine/include/bootstage.h +++ b/interfaces/innerkits/init_module_engine/include/bootstage.h @@ -35,6 +35,7 @@ enum INIT_BOOTSTAGE { INIT_DISABLE_CHECKPOINT = 7, INIT_HEALTH_CHECK_ACTIVE = 8, INIT_PRE_PARAM_SERVICE = 10, + INIT_VAB_HVBCHECK = 11, INIT_PRE_PARAM_LOAD = 20, INIT_PARAM_LOAD_FILTER = 25, INIT_PRE_CFG_LOAD = 30, diff --git a/test/unittest/BUILD.gn b/test/unittest/BUILD.gn index adad572b1..511921163 100755 --- a/test/unittest/BUILD.gn +++ b/test/unittest/BUILD.gn @@ -518,6 +518,11 @@ ohos_unittest("init_fshvb_unittest") { "//base/startup/init/test/mock/init/ueventd/ueventd_socket.c", ] + deps = [ + "//base/startup/init/interfaces/innerkits:libbegetutil", + "//base/startup/init/interfaces/innerkits/fs_manager:libfsmanager_static", + ] + defines = [ "STARTUP_INIT_UT_PATH =\"/data/init_ut\"" ] configs = [] -- Gitee From 8eaf5018eff5e97cc2ed675cb86d71918e6a2587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E7=A5=A5?= Date: Sat, 14 Jun 2025 08:33:37 +0000 Subject: [PATCH 2/9] hvb support vab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高祥 --- interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c b/interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c index 327bd3077..ce2594df9 100755 --- a/interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c +++ b/interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c @@ -671,7 +671,7 @@ int FsHvbSetupHashtree(FstabItem *fsItem) return -1; } - // for virtual ab boot, find the partition name based on snapshot name + // for virtual ab boot, find the partition name based on snapshot name HvbDeviceParam devPara = {0}; HOOK_EXEC_OPTIONS options; if (memcpy_s(devPara.partName, sizeof(devPara.partName), devName, strlen(devName)) != 0) { -- Gitee From 09cdabf79062c55aa6c9383b5c776965862282ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E7=A5=A5?= Date: Sat, 14 Jun 2025 08:43:08 +0000 Subject: [PATCH 3/9] update interfaces/innerkits/include/fs_manager/fs_manager.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高祥 --- interfaces/innerkits/include/fs_manager/fs_manager.h | 8 -------- 1 file changed, 8 deletions(-) diff --git a/interfaces/innerkits/include/fs_manager/fs_manager.h b/interfaces/innerkits/include/fs_manager/fs_manager.h index 571e4ae3c..a77a3a349 100644 --- a/interfaces/innerkits/include/fs_manager/fs_manager.h +++ b/interfaces/innerkits/include/fs_manager/fs_manager.h @@ -76,13 +76,6 @@ typedef struct { int len; } HvbDeviceParam; -typedef struct { - char partName[HVB_DEV_NAME_SIZE]; - int reverse; // 0 :system->dm0 1:dm0->system - char value[HVB_DEV_NAME_SIZE]; - int len; -} HvbDeviceParam; - typedef enum SlotFlag { UNBOOT = 0, ACTIVE = 1, @@ -96,7 +89,6 @@ typedef struct SlotInfo { unsigned int reserved; } SlotInfo; - Fstab* LoadFstabFromCommandLine(void); int GetBootSlots(void); int GetCurrentSlot(void); -- Gitee From 6b2d4b45089f846a02ea20d0a02f09f8bb39af97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E7=A5=A5?= Date: Sat, 14 Jun 2025 11:55:54 +0000 Subject: [PATCH 4/9] update interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高祥 --- .../innerkits/fs_manager/libfs_hvb/fs_hvb.c | 47 ++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c b/interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c index ce2594df9..a77ba8193 100755 --- a/interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c +++ b/interfaces/innerkits/fs_manager/libfs_hvb/fs_hvb.c @@ -652,6 +652,34 @@ void FsHvbDestoryVerityTarget(DmVerityTarget *target) } } +static int FsHvbFindPartitionName(const char *devName, HvbDeviceParam *devPara) +{ + int rc; + HOOK_EXEC_OPTIONS options; + if (devPara == NULL) { + BEGET_LOGE("error, get devPara"); + return -1; + } + if (memcpy_s(devPara->partName, sizeof(devPara->partName), devName, strlen(devName)) != 0) { + BEGET_LOGE("error, fail to copy shapshot name"); + return -1; + } + (void)memset_s(devPara->value, sizeof(devPara->value), 0, sizeof(devPara->value)); + devPara->reverse = 1; + devPara->len = (int)sizeof(devPara->value); + options.flags = TRAVERSE_STOP_WHEN_ERROR; + options.preHook = NULL; + options.postHook = NULL; + + rc = HookMgrExecute(GetBootStageHookMgr(), INIT_VAB_HVBCHECK, (void*)devPara, &options); + BEGET_LOGW("try find partition from snapshot path %s, ret = %d", devName, rc); + if (rc == 0) { + BEGET_LOGW("found partition %s, len=%d", devPara->value, devPara->len); + } + + return rc; +} + int FsHvbSetupHashtree(FstabItem *fsItem) { int rc; @@ -671,23 +699,10 @@ int FsHvbSetupHashtree(FstabItem *fsItem) return -1; } - // for virtual ab boot, find the partition name based on snapshot name - HvbDeviceParam devPara = {0}; - HOOK_EXEC_OPTIONS options; - if (memcpy_s(devPara.partName, sizeof(devPara.partName), devName, strlen(devName)) != 0) { - BEGET_LOGE("error, fail to copy shapshot name"); - return -1; - } - (void)memset_s(devPara.value, sizeof(devPara.value), 0, sizeof(devPara.value)); - devPara.reverse = 1; - devPara.len = (int)sizeof(devPara.value); - options.flags = TRAVERSE_STOP_WHEN_ERROR; - options.preHook = NULL; - options.postHook = NULL; - rc = HookMgrExecute(GetBootStageHookMgr(), INIT_VAB_HVBCHECK, (void*)&devPara, &options); - BEGET_LOGW("try find partition from snapshot path %s, ret=%d", devName, rc); + // for virtual ab boot, find partition name with snapshot name + HvbDeviceParam devPara = {}; + rc = FsHvbFindPartitionName(devName, &devPara); if (rc == 0) { - BEGET_LOGW("found partition %s, len=%d", devPara.value, devPara.len); devName = devPara.value; } -- Gitee From cfaadddf59a1dcb9a3b91071eee6abf3736370a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E7=A5=A5?= Date: Sat, 14 Jun 2025 11:59:18 +0000 Subject: [PATCH 5/9] update interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高祥 --- .../innerkits/fs_manager/libfs_hvb/hvb_ops.c | 62 ++++++++++--------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c b/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c index 6e76c6466..23f9ed10e 100755 --- a/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c +++ b/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c @@ -178,6 +178,37 @@ err: return NULL; } +static int HvbGetSnapshotPath(const char *partition, char *out, size_t out_len) +{ + int rc; + HvbDeviceParam devPara = {}; + HOOK_EXEC_OPTIONS options = {}; + if (memcpy_s(devPara.partName, sizeof(devPara.partName), partition, strlen(partition)) != 0) { + BEGET_LOGE("error, fail to copy partition"); + return HVB_IO_ERROR_IO; + } + devPara.reverse = 0; + devPara.len = (int)sizeof(devPara.value); + options.flags = TRAVERSE_STOP_WHEN_ERROR; + options.preHook = NULL; + options.postHook = NULL; + + rc = HookMgrExecute(GetBootStageHookMgr(), INIT_VAB_HVBCHECK, (void *)&devPara, &options); + BEGET_LOGW("check snapshot path for partition %s, ret = %d", partition, rc); + if (rc != 0) { + BEGET_LOGE("error 0x%x, trans vab for %s", rc, partition); + return rc; + } + BEGET_LOGW("snapshot path exists for partition %s", partition); + rc = snprintf_s(out, out_len, out_len - 1, "%s%s", SNAPSHOT_PATH_PREFIX, + devPara.value); + if (rc < 0) { + BEGET_LOGE("error, snprintf_s snapshot path fail, ret = %d", rc); + return rc; + } + return 0; +} + static char *HvbGetPartitionPath(const char *partition) { int rc; @@ -194,39 +225,14 @@ static char *HvbGetPartitionPath(const char *partition) } pathLen = strlen(PARTITION_PATH_PREFIX) + ptnLen; - path = calloc(1, pathLen + 1); + path = calloc(1, pathLen * 2 + 1); if (path == NULL) { BEGET_LOGE("error, calloc fail"); return NULL; } - // get snapshot path for vab boot condition - HvbDeviceParam devPara = {0}; - HOOK_EXEC_OPTIONS options; - if (memcpy_s(devPara.partName, sizeof(devPara.partName), partition, strlen(partition)) != 0) { - BEGET_LOGE("error, fail to copy partition"); - return NULL; - } - (void)memset_s(devPara.value, sizeof(devPara.value), 0, sizeof(devPara.value)); - devPara.reverse = 0; - devPara.len = (int)sizeof(devPara.value); - options.flags = TRAVERSE_STOP_WHEN_ERROR; - options.preHook = NULL; - options.postHook = NULL; - rc = HookMgrExecute(GetBootStageHookMgr(), INIT_VAB_HVBCHECK, (void *)&devPara, &options); - BEGET_LOGW("check snapshot path for partition %s, ret=%d", partition, rc); - if (rc == 0) { - BEGET_LOGW("snapshot path exists for partition %s", partition); - rc = snprintf_s(path, pathLen + 1, pathLen, "%s%s", SNAPSHOT_PATH_PREFIX, - devPara.value); - if (rc < 0) { - BEGET_LOGE("error, snprintf_s snapshot path fail, ret=%d", rc); - free(path); - return NULL; - } else { - BEGET_LOGW("snapshot path generated: %s", path); - return path; - } + if (HvbGetSnapshotPath(partition, path, pathLen) == 0) { + return path; } rc = snprintf_s(path, pathLen + 1, pathLen, "%s%s", PARTITION_PATH_PREFIX, -- Gitee From 09890bd50dfe4b0ac3d5329fed2c413749547d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E7=A5=A5?= Date: Sat, 14 Jun 2025 12:09:39 +0000 Subject: [PATCH 6/9] update interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高祥 --- interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c b/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c index 23f9ed10e..f07e9edb4 100755 --- a/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c +++ b/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c @@ -224,7 +224,7 @@ static char *HvbGetPartitionPath(const char *partition) return GetExtHvbVerifiedPath(index); } - pathLen = strlen(PARTITION_PATH_PREFIX) + ptnLen; + pathLen = strlen(PARTITION_PATH_PREFIX) + HVB_MAX_PARTITION_NAME_LEN - 1; path = calloc(1, pathLen * 2 + 1); if (path == NULL) { BEGET_LOGE("error, calloc fail"); -- Gitee From ac1677dd8aef89b43e19b6ba6591adaf86ad929f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E7=A5=A5?= Date: Sat, 14 Jun 2025 12:10:34 +0000 Subject: [PATCH 7/9] update interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高祥 --- interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c b/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c index f07e9edb4..02f38b3bf 100755 --- a/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c +++ b/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c @@ -225,7 +225,7 @@ static char *HvbGetPartitionPath(const char *partition) } pathLen = strlen(PARTITION_PATH_PREFIX) + HVB_MAX_PARTITION_NAME_LEN - 1; - path = calloc(1, pathLen * 2 + 1); + path = calloc(1, pathLen + 1); if (path == NULL) { BEGET_LOGE("error, calloc fail"); return NULL; -- Gitee From 04ec2d1470b24a714adf238639ce39984953a0ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E7=A5=A5?= Date: Sat, 14 Jun 2025 12:25:18 +0000 Subject: [PATCH 8/9] update interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高祥 --- interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c b/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c index 02f38b3bf..b82743fa5 100755 --- a/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c +++ b/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c @@ -178,7 +178,7 @@ err: return NULL; } -static int HvbGetSnapshotPath(const char *partition, char *out, size_t out_len) +static int HvbGetSnapshotPath(const char *partition, char *out, size_t outLen) { int rc; HvbDeviceParam devPara = {}; -- Gitee From ce21e0e65419b63d87ca46bb041918033280e3be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E7=A5=A5?= Date: Sun, 15 Jun 2025 02:03:29 +0000 Subject: [PATCH 9/9] update interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高祥 --- interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c b/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c index b82743fa5..e801ae5d1 100755 --- a/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c +++ b/interfaces/innerkits/fs_manager/libfs_hvb/hvb_ops.c @@ -200,7 +200,7 @@ static int HvbGetSnapshotPath(const char *partition, char *out, size_t outLen) return rc; } BEGET_LOGW("snapshot path exists for partition %s", partition); - rc = snprintf_s(out, out_len, out_len - 1, "%s%s", SNAPSHOT_PATH_PREFIX, + rc = snprintf_s(out, outLen, outLen - 1, "%s%s", SNAPSHOT_PATH_PREFIX, devPara.value); if (rc < 0) { BEGET_LOGE("error, snprintf_s snapshot path fail, ret = %d", rc); -- Gitee