代码拉取完成,页面将自动刷新
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
【openEuler-1.0-LTS】【OLK-5.10】 需回合补丁 ext4: fix uninitialized ratelimit_state->lock access in __ext4_fill_super()
正常情况下 interval 一直 0 直到 s_msg_ratelimit_state 被初始化,因此 ___ratelimit() 什么都不会做。但是注册 sysfs 比 初始化 rs->lock 更早,因此可以在 rs->lock 未被初始化时通过 sysfs 的 msg_ratelimit_interval_ms 接口将 rs->interval 修改为非零值,此时调用 ext4_msg 就会因为访问未初始化的 rs->lock 而触发该问题。并发时序如下:
ext4_fill_super
ext4_register_sysfs
// sysfs registered msg_ratelimit_interval_ms
// Other processes modify rs->interval to
// non-zero via msg_ratelimit_interval_ms
ext4_orphan_cleanup
ext4_msg(sb, KERN_INFO, "Errors on filesystem, "
__ext4_msg
___ratelimit(&(EXT4_SB(sb)->s_msg_ratelimit_state)
if (!rs->interval) // do nothing if interval is 0
return 1;
raw_spin_trylock_irqsave(&rs->lock, flags)
raw_spin_trylock(lock)
_raw_spin_trylock
__raw_spin_trylock
spin_acquire(&lock->dep_map, 0, 1, _RET_IP_)
lock_acquire
__lock_acquire
register_lock_class
assign_lock_key
dump_stack();
ratelimit_state_init(&sbi->s_msg_ratelimit_state, 5 * HZ, 10);
raw_spin_lock_init(&rs->lock);
// init rs->lock here
登录 后才可以发表评论