From 6a26cb6053d987d35bef1f5cc3d6e21b4567f520 Mon Sep 17 00:00:00 2001 From: Kozlowski Mateusz Date: Fri, 4 Nov 2022 09:57:16 +0100 Subject: [PATCH] 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 Signed-off-by: Mariusz Barczak Change-Id: I7fe9694dad535de5f6b2a4af27400fa125480605 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15258 Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- lib/ftl/ftl_layout.c | 2 +- lib/ftl/mngt/ftl_mngt_md.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ftl/ftl_layout.c b/lib/ftl/ftl_layout.c index f0f4d1921..4820cf608 100644 --- a/lib/ftl/ftl_layout.c +++ b/lib/ftl/ftl_layout.c @@ -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; diff --git a/lib/ftl/mngt/ftl_mngt_md.c b/lib/ftl/mngt/ftl_mngt_md.c index 9c1ef694c..199340be0 100644 --- a/lib/ftl/mngt/ftl_mngt_md.c +++ b/lib/ftl/mngt/ftl_mngt_md.c @@ -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);