diff --git a/src/blockstore/v1/write.cpp b/src/blockstore/v1/write.cpp index 433ed0eb..448dfbfd 100644 --- a/src/blockstore/v1/write.cpp +++ b/src/blockstore/v1/write.cpp @@ -183,7 +183,7 @@ bool blockstore_impl_t::enqueue_write(blockstore_op_t *op) uint32_t end = (op->offset+op->len-1) / dsk.csum_block_size; auto fn = state & BS_ST_BIG_WRITE ? crc32c_pad : crc32c_nopad; if (start == end) - data_csums[0] = fn(0, op->buf, op->len, op->offset - start*dsk.csum_block_size, end*dsk.csum_block_size - (op->offset+op->len)); + data_csums[0] = fn(0, op->buf, op->len, op->offset - start*dsk.csum_block_size, (end+1)*dsk.csum_block_size - (op->offset+op->len)); else { // First block diff --git a/src/util/crc32c.c b/src/util/crc32c.c index ab9da5f7..e3c9f71e 100644 --- a/src/util/crc32c.c +++ b/src/util/crc32c.c @@ -37,6 +37,7 @@ #include #include #include +#include #include "crc32c.h" #ifdef WITH_ISAL @@ -394,6 +395,7 @@ static uint8_t zero_page[4096] = {}; uint32_t crc32c_pad(uint32_t prev_crc, const void *buf, size_t len, size_t left_pad, size_t right_pad) { + assert(left_pad < 0x10000000 && right_pad < 0x10000000); uint32_t r = prev_crc; while (left_pad >= 4096) {