lib/ftl: Fix findings of static code analysis

A metadata region without mirror should have the INVALID enum set,
otherwise it risks touching invalid parts of the array.

The sb_shm_md not being set to NULL could cause the code to touch this
freed pointer in the error path in ftl_md_create -> ftl_md_create_shm ->
ftl_md_invalidate_shm calls.

Signed-off-by: Kozlowski Mateusz <mateusz.kozlowski@intel.com>
Signed-off-by: Mariusz Barczak <mariusz.barczak@intel.com>
Change-Id: I7fe9694dad535de5f6b2a4af27400fa125480605
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15258
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Kozlowski Mateusz 2022-11-04 09:57:16 +01:00 committed by Tomasz Zawadzki
parent 646b851e75
commit 6a26cb6053
2 changed files with 2 additions and 1 deletions

View File

@ -528,7 +528,7 @@ ftl_layout_setup_superblock(struct spdk_ftl_dev *dev)
region = &layout->region[FTL_LAYOUT_REGION_TYPE_SB_BASE];
region->type = FTL_LAYOUT_REGION_TYPE_SB_BASE;
region->mirror_type = FTL_LAYOUT_REGION_TYPE_MAX;
region->mirror_type = FTL_LAYOUT_REGION_TYPE_INVALID;
region->name = "sb_mirror";
region->current.version = FTL_SB_VERSION_CURRENT;
region->prev.version = FTL_SB_VERSION_CURRENT;

View File

@ -606,6 +606,7 @@ shm_retry:
if ((md_create_flags & FTL_MD_CREATE_SHM_NEW) == 0) {
md_create_flags |= FTL_MD_CREATE_SHM_NEW;
ftl_md_destroy(dev->sb_shm_md, 0);
dev->sb_shm_md = NULL;
goto shm_retry;
}
ftl_mngt_fail_step(mngt);