zoukankan      html  css  js  c++  java
  • 关于kernel module签名【转】

    转自:https://blog.csdn.net/jiang010/article/details/109133301

    在实际应用中,为了安全,一般会使用将发布的ko进行签名,特别是像android这样的系统。例如:在android系统中,kernel在bootimage中,如果编译的ko文件在vednor或其他分区,并且打开了模块签名与校验配置,那么在调试的时候就需要同时编译ko与bootimage,否则外部的ko将安装失败。

    关于kernel module签名可以参考:https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/module-signing.rst,已经写的非常详细了。

    下面是一次调试实例:在调试kernel过程中,当重新编译bootimage后,独立编译在其他分区的ko文件安装失败了,根据上面的参考链接与本地代码发现打开了如下开关:

    CONFIG_MODULE_SIG=y
    CONFIG_MODULE_SIG_FORCE=y
    由于没有配置CONFIG_MODULE_SIG_KEY来指定签名的密钥,所以每次在编译的时候都会动态生成一个密钥对,导致每次前面的密钥不一样,从而安装失败。为了调试,根据上面参考链接的介绍,关闭了CONFIG_MODULE_SIG_FORCE,重新编译,启动的时候出现了如下报错信息:

    xxx:disagrees about version of symbol module_layout
    根据stackexchange上的回答,只能先关闭CONFIG_MODVERSIONS配置选项。重新编译,还是安装失败,报如下错误:

    xxx: version magic '4.9.193+ SMP preempt mod_unload modversions aarch64' should be '4.9.193+ SMP preempt mod_unload aarch64'
    根据 include/linux/vermagic.h中对VERMAGIC_STRING的定义,可以知道CONFIG_MODVERSIONS在打开的时候MODULE_VERMAGIC_MODVERSIONS的值为"modversions ",因为外部xxx.ko在编译的时候CONFIG_MODVERSIONS=yes,所以我们在CONFIG_MODVERSIONS关闭的时候MODULE_VERMAGIC_MODVERSIONS的值也要为"modversions "。修改如下:

    --- a/include/linux/vermagic.h
    +++ b/include/linux/vermagic.h
    @@ -19,7 +19,7 @@
    #ifdef CONFIG_MODVERSIONS
    #define MODULE_VERMAGIC_MODVERSIONS "modversions "
    #else
    -#define MODULE_VERMAGIC_MODVERSIONS ""
    +#define MODULE_VERMAGIC_MODVERSIONS "modversions "
    #endif
    #ifndef MODULE_ARCH_VERMAGIC
    #define MODULE_ARCH_VERMAGIC ""
    重新编译后,启动正常。

    该方法只能用于调试,在生产环境中应该将这些配置恢复。
    ————————————————
    版权声明:本文为CSDN博主「jiang010」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/jiang010/article/details/109133301

    【作者】张昺华
    【大饼教你学系列】https://edu.csdn.net/course/detail/10393
    【新浪微博】 张昺华--sky
    【twitter】 @sky2030_
    【微信公众号】 张昺华
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    js中“==”与“===”区别
    java中的除法及求余运算特殊性。
    oracle数据库查询历史某一时刻的表数据
    Java多线程总结(转载)
    I/O之Writer-Reader
    I/O之File
    MYSQL之內链接 左链接 右链接 区别
    ubuntu下编译boost
    linux下编译安装boost库
    搭建无线弱网测试环境
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/14926923.html
Copyright © 2011-2022 走看看