From 655f73274808bfb8fbc4fa2aca4bb047e7665547 Mon Sep 17 00:00:00 2001 From: Michal Mielewczyk Date: Wed, 8 Dec 2021 08:50:58 +0100 Subject: [PATCH] Don't access freed memory Instead of accessing memory of a freed IO, redo size calculations Signed-off-by: Michal Mielewczyk --- src/metadata/metadata_raw_dynamic.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/metadata/metadata_raw_dynamic.c b/src/metadata/metadata_raw_dynamic.c index 42887f9..a776384 100644 --- a/src/metadata/metadata_raw_dynamic.c +++ b/src/metadata/metadata_raw_dynamic.c @@ -332,6 +332,8 @@ int raw_dynamic_update(ocf_cache_t cache, * RAM DYNAMIC Implementation - Load all */ #define RAW_DYNAMIC_LOAD_PAGES 128 +#define metadata_io_size(__i_page, __pages_total) \ + OCF_MIN(RAW_DYNAMIC_LOAD_PAGES, (__pages_total -__i_page)) struct raw_dynamic_load_all_context { struct ocf_metadata_raw *raw; @@ -389,8 +391,7 @@ static int raw_dynamic_load_all_read(struct ocf_request *req) uint64_t count; int result; - count = OCF_MIN(RAW_DYNAMIC_LOAD_PAGES, - raw->ssd_pages - context->i_page); + count = metadata_io_size(context->i_page, raw->ssd_pages); /* Allocate IO */ context->io = ocf_new_cache_io(context->cache, req->io_queue, @@ -428,7 +429,7 @@ static int raw_dynamic_load_all_update(struct ocf_request *req) struct raw_dynamic_load_all_context *context = req->priv; struct ocf_metadata_raw *raw = context->raw; ocf_cache_t cache = context->cache; - uint64_t count = BYTES_TO_PAGES(context->io->bytes); + uint64_t count = metadata_io_size(context->i_page, raw->ssd_pages); int result = 0; /* Reset head of data buffer */