From 0bd9c26620c9c976cade673ca9f72b133c51ed0d Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sat, 7 Mar 2026 01:56:19 +0300 Subject: [PATCH] Make block_sizes uint64_t to prevent other integer overflow errors in the future --- src/blockstore/blockstore_disk.h | 6 +++--- src/blockstore/blockstore_heap.cpp | 2 +- src/blockstore/blockstore_init.cpp | 2 +- src/blockstore/v1/init.cpp | 2 +- src/disk_tool/disk_tool_meta.cpp | 2 +- src/disk_tool/disk_tool_resize.cpp | 8 ++++---- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/blockstore/blockstore_disk.h b/src/blockstore/blockstore_disk.h index 803b5a40..c251aa8f 100644 --- a/src/blockstore/blockstore_disk.h +++ b/src/blockstore/blockstore_disk.h @@ -26,14 +26,14 @@ class allocator_t; struct blockstore_disk_t { std::string data_device, meta_device, journal_device; - uint32_t data_block_size; + uint64_t data_block_size; uint64_t cfg_journal_size, cfg_data_size; // Required write alignment and journal/metadata/data areas' location alignment uint32_t disk_alignment = 4096; // Journal block size - minimum_io_size of the journal device is the best choice - uint32_t journal_block_size = 4096; + uint64_t journal_block_size = 4096; // Metadata block size - minimum_io_size of the metadata device is the best choice - uint32_t meta_block_size = 4096; + uint64_t meta_block_size = 4096; // Atomic write size of the data block device uint32_t atomic_write_size = 4096; // Whether we should set RWF_ATOMIC on atomic writes diff --git a/src/blockstore/blockstore_heap.cpp b/src/blockstore/blockstore_heap.cpp index 57cd0783..a748db27 100644 --- a/src/blockstore/blockstore_heap.cpp +++ b/src/blockstore/blockstore_heap.cpp @@ -301,7 +301,7 @@ int blockstore_heap_t::read_blocks(uint64_t disk_offset, uint64_t disk_size, uin heap_entry_t *wr = (heap_entry_t*)data; if (wr->size > dsk->meta_block_size-block_offset) { - fprintf(stderr, "Error: entry is too large in metadata block %u at %u (%u > max %u bytes). ", + fprintf(stderr, "Error: entry is too large in metadata block %u at %u (%u > max %ju bytes). ", block_num, block_offset, wr->size, dsk->meta_block_size-block_offset); corrupted_block: if (allow_corrupted) diff --git a/src/blockstore/blockstore_init.cpp b/src/blockstore/blockstore_init.cpp index 43acd134..30430942 100644 --- a/src/blockstore/blockstore_init.cpp +++ b/src/blockstore/blockstore_init.cpp @@ -145,7 +145,7 @@ resume_1: printf( "Configuration stored in metadata superblock" " (meta_block_size=%u, data_block_size=%u, bitmap_granularity=%u, data_csum_type=%u, csum_block_size=%u, meta_area_size=%ju)" - " differs from OSD configuration (%u/%u/%u, %u/%u, %ju).\n", + " differs from OSD configuration (%ju/%ju/%u, %u/%u, %ju).\n", hdr->meta_block_size, hdr->data_block_size, hdr->bitmap_granularity, hdr->data_csum_type, hdr->csum_block_size, hdr->meta_area_size, bs->dsk.meta_block_size, bs->dsk.data_block_size, bs->dsk.bitmap_granularity, diff --git a/src/blockstore/v1/init.cpp b/src/blockstore/v1/init.cpp index abffa80f..0585e35a 100644 --- a/src/blockstore/v1/init.cpp +++ b/src/blockstore/v1/init.cpp @@ -189,7 +189,7 @@ resume_1: printf( "Configuration stored in metadata superblock" " (meta_block_size=%u, data_block_size=%u, bitmap_granularity=%u, data_csum_type=%u, csum_block_size=%u)" - " differs from OSD configuration (%u/%u/%u, %u/%u).\n", + " differs from OSD configuration (%ju/%ju/%u, %u/%u).\n", hdr->meta_block_size, hdr->data_block_size, hdr->bitmap_granularity, hdr->data_csum_type, hdr->csum_block_size, bs->dsk.meta_block_size, bs->dsk.data_block_size, bs->dsk.bitmap_granularity, diff --git a/src/disk_tool/disk_tool_meta.cpp b/src/disk_tool/disk_tool_meta.cpp index 105f2085..f40558d4 100644 --- a/src/disk_tool/disk_tool_meta.cpp +++ b/src/disk_tool/disk_tool_meta.cpp @@ -331,7 +331,7 @@ void disk_tool_t::dump_meta_header(blockstore_meta_header_v3_t *hdr) } else { - printf("{\"version\":\"0.5\",\"meta_block_size\":%u,\"entries\":[\n", dsk.meta_block_size); + printf("{\"version\":\"0.5\",\"meta_block_size\":%ju,\"entries\":[\n", dsk.meta_block_size); } first_entry = true; } diff --git a/src/disk_tool/disk_tool_resize.cpp b/src/disk_tool/disk_tool_resize.cpp index 0640c998..39b6e9e8 100644 --- a/src/disk_tool/disk_tool_resize.cpp +++ b/src/disk_tool/disk_tool_resize.cpp @@ -212,11 +212,11 @@ void disk_tool_t::resize_init(blockstore_meta_header_v3_t *hdr) dsk.calc_lengths(); if (((new_data_offset-dsk.data_offset) % dsk.data_block_size)) { - fprintf(stderr, "Data alignment mismatch: old data offset is 0x%jx, new is 0x%jx, but alignment on %x should be equal\n", + fprintf(stderr, "Data alignment mismatch: old data offset is 0x%jx, new is 0x%jx, but alignment on %jx should be equal\n", dsk.data_offset, new_data_offset, dsk.data_block_size); exit(1); } - data_idx_diff = ((int64_t)(dsk.data_offset-new_data_offset)) / dsk.data_block_size; + data_idx_diff = ((int64_t)(dsk.data_offset-new_data_offset))/((int64_t)dsk.data_block_size); free_first = new_data_offset > dsk.data_offset ? (new_data_offset-dsk.data_offset) / dsk.data_block_size : 0; free_last = (new_data_offset+new_data_len < dsk.data_offset+dsk.data_len) ? (dsk.data_offset+dsk.data_len-new_data_offset-new_data_len) / dsk.data_block_size @@ -351,7 +351,7 @@ int disk_tool_t::resize_copy_data() if (data->res != dsk.data_block_size) { fprintf( - stderr, "Failed to read %u bytes at %ju from %s: %s\n", dsk.data_block_size, + stderr, "Failed to read %ju bytes at %ju from %s: %s\n", dsk.data_block_size, dsk.data_offset + moving_blocks[i].old_loc*dsk.data_block_size, dsk.data_device.c_str(), data->res < 0 ? strerror(-data->res) : "short read" ); @@ -376,7 +376,7 @@ int disk_tool_t::resize_copy_data() if (data->res != dsk.data_block_size) { fprintf( - stderr, "Failed to write %u bytes at %ju to %s: %s\n", dsk.data_block_size, + stderr, "Failed to write %ju bytes at %ju to %s: %s\n", dsk.data_block_size, dsk.data_offset + moving_blocks[i].new_loc*dsk.data_block_size, dsk.data_device.c_str(), data->res < 0 ? strerror(-data->res) : "short write" );