diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index b11bfe68dd65..e0b515aa1c63 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -18,6 +18,9 @@ #include #include #include +#ifdef CONFIG_KMSAN +#include +#endif #include #include "ctree.h" #include "disk-io.h" @@ -93,6 +96,10 @@ static void csum_tree_block(struct extent_buffer *buf, u8 *result) num_pages = num_extent_pages(buf); } +#ifdef CONFIG_KMSAN + kmsan_unpoison_memory(kaddr + BTRFS_CSUM_SIZE, + first_page_part - BTRFS_CSUM_SIZE); +#endif crypto_shash_update(shash, kaddr + BTRFS_CSUM_SIZE, first_page_part - BTRFS_CSUM_SIZE); @@ -104,6 +111,9 @@ static void csum_tree_block(struct extent_buffer *buf, u8 *result) */ for (i = 1; i < num_pages && INLINE_EXTENT_BUFFER_PAGES > 1; i++) { kaddr = folio_address(buf->folios[i]); +#ifdef CONFIG_KMSAN + kmsan_unpoison_memory(kaddr, PAGE_SIZE); +#endif crypto_shash_update(shash, kaddr, PAGE_SIZE); } memset(result, 0, BTRFS_CSUM_SIZE);