From d0225ef1cbed47aefc5ec6a48976e3656d682bf6 Mon Sep 17 00:00:00 2001 From: Michal Mielewczyk Date: Thu, 7 Jan 2021 02:45:05 -0500 Subject: [PATCH 1/2] Prevent uint32_t overflow Signed-off-by: Michal Mielewczyk --- src/utils/utils_part.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/utils_part.h b/src/utils/utils_part.h index 17c5fb2..c37a43d 100644 --- a/src/utils/utils_part.h +++ b/src/utils/utils_part.h @@ -61,7 +61,8 @@ static inline uint32_t ocf_part_get_min_size(ocf_cache_t cache, { uint64_t ioclass_size; - ioclass_size = part->config->min_size * cache->conf_meta->cachelines; + ioclass_size = (uint64_t)part->config->min_size * + (uint64_t)cache->conf_meta->cachelines; ioclass_size /= 100; From fcef130919c23e7bcba11c3290d24127d01c179e Mon Sep 17 00:00:00 2001 From: Michal Mielewczyk Date: Thu, 7 Jan 2021 17:59:13 -0500 Subject: [PATCH 2/2] Bug on metadata access error Signed-off-by: Michal Mielewczyk --- src/metadata/metadata.c | 18 ++++++------------ src/metadata/metadata_core.c | 18 ++++++------------ 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/metadata/metadata.c b/src/metadata/metadata.c index 8507a2d..537f8e0 100644 --- a/src/metadata/metadata.c +++ b/src/metadata/metadata.c @@ -1485,18 +1485,12 @@ void ocf_metadata_get_core_and_part_id(struct ocf_cache *cache, info = ocf_metadata_raw_rd_access(cache, &(ctrl->raw_desc[metadata_segment_list_info]), line); - if (collision && info) { - if (core_id) - *core_id = collision->core_id; - if (part_id) - *part_id = info->partition_id; - } else { - ocf_metadata_error(cache); - if (core_id) - *core_id = OCF_CORE_MAX; - if (part_id) - *part_id = PARTITION_DEFAULT; - } + ENV_BUG_ON(!collision || !info); + + if (core_id) + *core_id = collision->core_id; + if (part_id) + *part_id = info->partition_id; } /******************************************************************************* * Hash Table diff --git a/src/metadata/metadata_core.c b/src/metadata/metadata_core.c index 9f49c94..d501741 100644 --- a/src/metadata/metadata_core.c +++ b/src/metadata/metadata_core.c @@ -20,19 +20,13 @@ void ocf_metadata_get_core_info(struct ocf_cache *cache, collision = ocf_metadata_raw_rd_access(cache, &(ctrl->raw_desc[metadata_segment_collision]), line); - if (collision) { - if (core_id) - *core_id = collision->core_id; - if (core_sector) - *core_sector = collision->core_line; - } else { - ocf_metadata_error(cache); - if (core_id) - *core_id = OCF_CORE_MAX; - if (core_sector) - *core_sector = ULLONG_MAX; - } + ENV_BUG_ON(!collision); + + if (core_id) + *core_id = collision->core_id; + if (core_sector) + *core_sector = collision->core_line; } void ocf_metadata_set_core_info(struct ocf_cache *cache,