DEBUG大典
这里受小星星的邀请,更一下目前遇到的所有极为Hard的BUG(Debug 1-2天,最后改一两行代码)以及解决方案,日后遇到类似的可以有所参考。这里面大多是一些非常不合理的结果,遇到这种结果一般来说就是踩内存了。
-
2024-5-22: DEBUG RCU锁的时候,reclaimer (
call_rcu
)可能在退出Read Critical Section的任何地方call back
,这导致一些持有的访问读着读着被free
了(KASAN检查不出来),造成的结果是到处各种BUG:soft lockup,access null entry,各种reference count不一致等。结果就是把rcu_read_lock
拉大一点,避免访问的内部内存被free。当然,由于代码中有一些可能sleep的地方,将保护的rcu_read_lock
换成srcu_read_lock
,并将call_rcu
换为call_srcu
,从而保证在srcu_read_lock
的保护域内不会访问到已经被free
的内存 -
2023-02-25:基于Spinlock的多线程BUG,也是没有保护好内存,造成非常匪夷所思的结果,不过由于Spinlock是同步的,KASAN成功检测了出来。见内核调试:一次多线程调试与KASAN检测实例。