![[Android稳定性] 第023篇 [问题篇] printk非空的非法指针参数导致的spinlock死锁引起Non Secure WDT](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/2/cover_android_stability_023.png)
[Android稳定性] 第023篇 [问题篇] printk非空的非法指针参数导致的spinlock死锁引起Non Secure WDT
**摘要**: 本文分析了Linux内核中因`Non secure wdt`导致的死机问题。通过分析ramdump,发现所有CPU都在等待一个spin lock,且锁的持有者是`kworker/u17:12`。进一步分析发现,该进程在获取锁后出现了data abort,并在异常处理流程中再次尝试获取锁,导致死锁。根本原因是`nvt_update_firmware`函数中使用了未初始化的指针作为`printk`的参数,导致打印异常。解决方案是将`kmalloc`改为`kzalloc`,以确保内存被清零。实验验证了当`printk`的参数为非法指针时,会导致死锁。

记一次频繁使用spinlock接口函数导致的无法开机问题
一台设备出现无法开机,表现为卡白米。分析发现,设备在启动过程中,因spinlock频繁获取和释放导致CPU资源被占用,无法完成正常操作。检查发现存在嵌套循环,导致CPU长时间被stick占用,无法挂载misc分区,最终引发重启。频繁使用spinlock可能引起性能开销、CPU资源浪费、死锁、优先级反转等问题。