Re: Soft tag and inline kasan triggering NULL pointer dereference, but not for hard tag and outline mode (was Re: [6.19-rc3] xxhash invalid access during BTRFS mount)
From: Qu Wenruo
Date: Tue Dec 30 2025 - 23:55:15 EST
在 2025/12/31 14:35, Qu Wenruo 写道:
[...]
在 2025/12/31 13:59, Daniel J Blueman 写道:
On Tue, 30 Dec 2025 at 17:28, Qu Wenruo <wqu@xxxxxxxx> wrote:
在 2025/12/30 19:26, Qu Wenruo 写道:
在 2025/12/30 18:02, Daniel J Blueman 写道:
When mounting a BTRFS filesystem on 6.19-rc3 on ARM64 using xxhash
checksumming and KASAN, I see invalid access:
Mind to share the page size? As aarch64 has 3 different supported pages
size (4K, 16K, 64K).
I'll give it a try on that branch. Although on my rc1 based development
branch it looks OK so far.
Tried both 4K and 64K page size with KASAN enabled, all on 6.19-rc3 tag,
no reproduce on newly created fs with xxhash.
My environment is aarch64 VM on Orion O6 board.
The xxhash implementation is the same xxhash64-generic:
[ 17.035933] BTRFS: device fsid 260364b9-d059-410c-92de-56243c346d6d
devid 1 transid 8 /dev/mapper/test-scratch1 (253:2) scanned by mount (629)
[ 17.038033] BTRFS info (device dm-2): first mount of filesystem
260364b9-d059-410c-92de-56243c346d6d
[ 17.038645] BTRFS info (device dm-2): using xxhash64
(xxhash64-generic) checksum algorithm
[ 17.041303] BTRFS info (device dm-2): checking UUID tree
[ 17.041390] BTRFS info (device dm-2): turning on async discard
[ 17.041393] BTRFS info (device dm-2): enabling free space tree
[ 19.032109] BTRFS info (device dm-2): last unmount of filesystem
260364b9-d059-410c-92de-56243c346d6d
So there maybe something else involved, either related to the fs or the
hardware.
Thanks for checking Wenruo!
With KASAN_GENERIC or KASAN_HW_TAGS, I don't see "kasan:
KernelAddressSanitizer initialized", so please ensure you are using
KASAN_SW_TAGS, KASAN_OUTLINE and 4KB pages. Full config at
https://gist.github.com/dblueman/cb4113f2cf880520081cf3f7c8dae13f
Thanks a lot for the detailed configs.
Unfortunately with that KASAN_SW_TAGS and KASAN_INLINE, the kernel can no longer boot, will always crash at boot with the following call trace, thus not even able to reach btrfs:
[ 3.938722] ==================================================================
[ 3.938739] BUG: KASAN: invalid-access in bpf_patch_insn_data+0x178/0x3b0
Considering this is only showing up in KASAN_SW_TAGS, not HW_TAGS or the default generic mode, I'm wondering if this is a bug in KASAN itself.
Adding KASAN people to the thread, meanwhile I'll check more KASAN + hardware combinations including x86_64 (since it's still 4K page size).
I tried the following combinations, with a simple workload of mounting a btrfs with xxhash checksum.
According to the original report, the KASAN is triggered as btrfs metadata verification time, thus mount option/workload shouldn't cause any different, as all metadata will use the same checksum algorithm.
x86_64 + generic + inline: PASS
x86_64 + generic + outline: PASS
arm64 + soft tag + inline: KASAN error at boot
arm64 + soft tag + outline: KASAN error at boot
arm64 + hard tag: PASS
arm64 + generic + inline: PASS
arm64 + generic + outline: PASS
So it looks like it's the software tag based KASAN itself causing false alerts.
Thanks,
Qu
Thanks,
Qu
Also ensure your mount options resolve similar to
"rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvolid=5,subvol=/".
Failing that, let me know of any significant filesystem differences from:
# btrfs inspect-internal dump-super /dev/nvme0n1p5
superblock: bytenr=65536, device=/dev/nvme0n1p5
---------------------------------------------------------
csum_type 1 (xxhash64)
csum_size 8
csum 0x97ec1a3695ae35d0 [match]
bytenr 65536
flags 0x1
( WRITTEN )
magic _BHRfS_M [match]
fsid f99f2753-0283-4f93-8f5d-7a9f59f148cc
metadata_uuid 00000000-0000-0000-0000-000000000000
label
generation 34305
root 586579968
sys_array_size 129
chunk_root_generation 33351
root_level 0
chunk_root 19357892608
chunk_root_level 0
log_root 0
log_root_transid (deprecated) 0
log_root_level 0
total_bytes 83886080000
bytes_used 14462930944
sectorsize 4096
nodesize 16384
leafsize (deprecated) 16384
stripesize 4096
root_dir 6
num_devices 1
compat_flags 0x0
compat_ro_flags 0x3
( FREE_SPACE_TREE |
FREE_SPACE_TREE_VALID )
incompat_flags 0x361
( MIXED_BACKREF |
BIG_METADATA |
EXTENDED_IREF |
SKINNY_METADATA |
NO_HOLES )
cache_generation 0
uuid_tree_generation 34305
dev_item.uuid 86166b5f-2258-4ab9-aac6-0d0e37ffbdb6
dev_item.fsid f99f2753-0283-4f93-8f5d-7a9f59f148cc [match]
dev_item.type 0
dev_item.total_bytes 83886080000
dev_item.bytes_used 22624075776
dev_item.io_align 4096
dev_item.io_width 4096
dev_item.sector_size 4096
dev_item.devid 1
dev_item.dev_group 0
dev_item.seek_speed 0
dev_item.bandwidth 0
dev_item.generation 0
Thanks,
Dan
--
Daniel J Blueman