解析 Section Mismatch

本文详细解析了Section Mismatch问题,包括如何配置检测、引发错误的原因及具体的解决步骤,同时探讨了在arm内核环境下的支持情况。
摘要由CSDN通过智能技术生成
Section Mismatch 可能引发非法内存访问,进而引发内核crush崩溃
0 配置 Section Mismatch 检测
CONFIG_DEBUG_SECTION_MISMATCH=y
1 如何引发 Section Mismatch
1.1 非法访问 __init section中的资源,因为带有__init 标记的section会在linux启动初始化完成后被free掉,这样可以较少内存消耗, 非法引用已经被free掉的init section的资源会导致Section Mistach
1.2 不同section之间的引用会导致编译时出现Warnning,同1.1, 运行时如果其中一个section资源被free掉,另外一个section重新去引用它也会出现section mismatch, 还可能崩溃
2 如何解决 Section Mismatch
2.1 解决1.1的问题, 如果运行时函数需要调用init section 中的函数或者变量, 则被调用的函数或者变量要去掉__init *的标记, 或者给调用者加上init 的声明, include/linux/init.h
2.2 解决1.2的问题,如果不同的Section之间存在交叉引用,这个交叉引用是安全的,则用__ref标记让Section Mismatch Detector(modpost)忽略相关检查, 比如在cpu hotplug中,__cpuinit不会放在Init section中,在运行时访问是安全的。如果一个函数跟cpu hotplug无关,不用添加__cpuinit标记。因为这种访问是安全的,所以可以让内核忽略对它的检测,用__ref标记 该函数即可。
3 arm内核支持
在最新的ARM内核中,引入了一个更进一步的智能检测,该检测是针对free掉的内存被运行时函数访问的情况,前面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值