内核6.5.0启动时出现大量bcache相关UBSAN数组索引越界报错的咨询
内核6.5.0启动时出现大量bcache相关UBSAN数组索引越界报错的咨询
问题背景
我搭建了基于两个设备的btrfs RAID1文件系统,这两个设备是bcache设备(NVMe+HDD)通过cryptsetup luksOpen映射出来的。这个btrfs文件系统运行起来完全正常,但每次启动都会弹出大量类似下面的内核报错信息,打断了图形启动界面,看起来可能很严重,想问问这是什么情况。
报错日志
2023-12-19T23:21:41.595579+01:00 HostName kernel: [ 4.042319] ================================================================================ 2023-12-19T23:21:41.595580+01:00 HostName kernel: [ 4.042327] UBSAN: array-index-out-of-bounds in /build/linux-SXblTa/linux-6.5.0/drivers/md/bcache/bset.c:1098:3 2023-12-19T23:21:41.595580+01:00 HostName kernel: [ 4.042338] index 4 is out of range for type 'btree_iter_set [4]' 2023-12-19T23:21:41.595580+01:00 HostName kernel: [ 4.042344] CPU: 6 PID: 133 Comm: kworker/6:1 Not tainted 6.5.0-14-generic #14-Ubuntu 2023-12-19T23:21:41.595581+01:00 HostName kernel: [ 4.042346] Hardware name: ASUS System Product Name/PRIME X670E-PRO WIFI, BIOS 1813 10/13/2023 2023-12-19T23:21:41.595581+01:00 HostName kernel: [ 4.042347] Workqueue: events register_cache_worker [bcache] 2023-12-19T23:21:41.595581+01:00 HostName kernel: [ 4.042355] Call Trace: 2023-12-19T23:21:41.595581+01:00 HostName kernel: [ 4.042356] <TASK> 2023-12-19T23:21:41.595582+01:00 HostName kernel: [ 4.042357] dump_stack_lvl+0x48/0x70 2023-12-19T23:21:41.595582+01:00 HostName kernel: [ 4.042359] dump_stack+0x10/0x20 2023-12-19T23:21:41.595582+01:00 HostName kernel: [ 4.042361] __ubsan_handle_out_of_bounds+0xc6/0x110 2023-12-19T23:21:41.595582+01:00 HostName kernel: [ 4.042364] bch_btree_iter_push+0x2d3/0x4f0 [bcache] 2023-12-19T23:21:41.595583+01:00 HostName kernel: [ 4.042373] bch_btree_node_read_done+0xcb/0x410 [bcache] 2023-12-19T23:21:41.595583+01:00 HostName kernel: [ 4.042382] bch_btree_node_read+0xf8/0x1e0 [bcache] 2023-12-19T23:21:41.595583+01:00 HostName kernel: [ 4.042391] ? __pfx_closure_sync_fn+0x10/0x10 [bcache] 2023-12-19T23:21:41.595584+01:00 HostName kernel: [ 4.042400] bch_btree_node_get.part.0+0x15c/0x330 [bcache] 2023-12-19T23:21:41.595584+01:00 HostName kernel: [ 4.042408] ? __bch_btree_ptr_invalid+0x66/0xe0 [bcache] 2023-12-19T23:21:41.595584+01:00 HostName kernel: [ 4.042416] ? __pfx_up_write+0x10/0x10 2023-12-19T23:21:41.595584+01:00 HostName kernel: [ 4.042419] bch_btree_node_get+0x16/0x30 [bcache] 2023-12-19T23:21:41.595585+01:00 HostName kernel: [ 4.042427] run_cache_set+0x596/0x850 [bcache] 2023-12-19T23:21:41.595585+01:00 HostName kernel: [ 4.042435] ? srso_alias_return_thunk+0x5/0x7f 2023-12-19T23:21:41.595586+01:00 HostName kernel: [ 4.042439] register_cache_set+0x1a2/0x210 [bcache] 2023-12-19T23:21:41.595587+01:00 HostName kernel: [ 4.042448] register_cache+0x11a/0x1a0 [bcache] 2023-12-19T23:21:41.595587+01:00 HostName kernel: [ 4.042456] register_cache_worker+0x22/0x80 [bcache] 2023-12-19T23:21:41.595587+01:00 HostName kernel: [ 4.042464] process_one_work+0x220/0x440 2023-12-19T23:21:41.595587+01:00 HostName kernel: [ 4.042467] worker_thread+0x4d/0x3f0 2023-12-19T23:21:41.595588+01:00 HostName kernel: [ 4.042468] ? srso_alias_return_thunk+0x5/0x7f 2023-12-19T23:21:41.595588+01:00 HostName kernel: [ 4.042470] ? _raw_spin_lock_irqsave+0xe/0x20 2023-12-19T23:21:41.595588+01:00 HostName kernel: [ 4.042472] ? __pfx_worker_thread+0x10/0x10 2023-12-19T23:21:41.595588+01:00 HostName kernel: [ 4.042474] kthread+0xef/0x120 2023-12-19T23:21:41.595589+01:00 HostName kernel: [ 4.042476] ? __pfx_kthread+0x10/0x10 2023-12-19T23:21:41.595589+01:00 HostName kernel: [ 4.042478] ret_from_fork+0x44/0x70 2023-12-19T23:21:41.595590+01:00 HostName kernel: [ 4.042480] ? __pfx_kthread+0x10/0x10 2023-12-19T23:21:41.595590+01:00 HostName kernel: [ 4.042482] ret_from_fork_asm+0x1b/0x30 2023-12-19T23:21:41.595590+01:00 HostName kernel: [ 4.042485] </TASK> 2023-12-19T23:21:41.595590+01:00 HostName kernel: [ 4.042486] ================================================================================ 2023-12-19T23:21:41.598663+01:00 HostName kernel: [ 4.091709] bcache: bch_journal_replay() journal replay done, 0 keys in 2 entries, seq 140818
问题分析与建议
首先别太慌,咱们拆解一下这个报错:
- 这是**UBSAN(未定义行为检查器)**抛出的数组索引越界错误,来自bcache驱动的
bset.c文件第1098行——简单说就是代码里访问了一个长度为4的数组的第5个元素(索引从0开始,所以索引4超出范围)。 - 但你提到btrfs文件系统运行完全正常,而且日志最后显示
bch_journal_replay()已经完成了日志重放,说明bcache初始化其实是成功的,这个报错大概率是驱动代码里一个不影响实际功能的小瑕疵触发了UBSAN的严格检查,而非会导致数据损坏的严重bug。 - 这个问题出在启动阶段的
register_cache_worker工作队列里,启动完成后驱动已经正常工作,所以日常使用不会受影响。
给你几个处理方案:
- 暂时忽略,等待内核更新:Ubuntu的6.5.x内核后续版本大概率会修复这个bcache的UBSAN触发问题,毕竟这是一个明显的代码检查告警,官方维护者会跟进的。
- 临时屏蔽报错(仅为美观):如果觉得启动时的报错太碍眼,可以尝试在GRUB启动参数中添加
ubsan_ignore=array-index-out-of-bounds,这样UBSAN会跳过这类越界检查。不过这只是临时方案,不推荐长期用,还是等官方修复更稳妥。 - 检查bcache配置:可以确认一下你的bcache设备是否正常初始化,比如用
bcache-super-show查看设备元数据,但从日志看元数据重放已经完成,大概率没问题。
备注:内容来源于stack exchange,提问作者Fade
相关产品推荐
相关产品推荐

