From d754d09549110c119a93cd4328a8e6faa6bddf31 Mon Sep 17 00:00:00 2001 From: anujbillore-0-0 Date: Mon, 9 Mar 2026 23:19:45 +0530 Subject: [PATCH] btrfs: Fix pointer arithmetic in WriteSuperBlock() The checksum was being calculated over the wrong memory region. &fSuperBlock+N advances by N*sizeof(btrfs_super_block) bytes, not N bytes. The correct form is (uint8*)&fSuperBlock+N which advances by exactly N bytes past the start of the superblock, correctly skipping the checksum field. Change-Id: I8dba6410f2cd2d2d66e3cf484d4ac1f599449021 Reviewed-on: https://review.haiku-os.org/c/haiku/+/10447 Reviewed-by: Adrien Destugues Tested-by: Commit checker robot --- src/add-ons/kernel/file_systems/btrfs/Volume.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/add-ons/kernel/file_systems/btrfs/Volume.cpp b/src/add-ons/kernel/file_systems/btrfs/Volume.cpp index efe8a91aaf..ee100fcdaf 100644 --- a/src/add-ons/kernel/file_systems/btrfs/Volume.cpp +++ b/src/add-ons/kernel/file_systems/btrfs/Volume.cpp @@ -510,7 +510,7 @@ status_t Volume::WriteSuperBlock() { uint32 checksum = calculate_crc((uint32)~1, - (uint8 *)(&fSuperBlock + sizeof(fSuperBlock.checksum)), + (uint8 *)&fSuperBlock + sizeof(fSuperBlock.checksum), sizeof(fSuperBlock) - sizeof(fSuperBlock.checksum)); fSuperBlock.checksum[0] = (checksum >> 0) & 0xFF;