为啥 module_param_hw( ) 宏比 module_param( ) 更安全?

Posted

技术标签:

【中文标题】为啥 module_param_hw( ) 宏比 module_param( ) 更安全?【英文标题】:why module_param_hw( ) macro is more secure than module_param( )?为什么 module_param_hw( ) 宏比 module_param( ) 更安全? 【发布时间】:2021-07-14 01:09:37 【问题描述】:

我开始学习内核模块编程。要将任何参数传递给内核模块,您可以使用module_param( ) 宏,我猜它的工作原理类似于用户空间中的动态链接方法(通过内核模块加载程序将符号重定位到运行时),如果我错了,您可以纠正我。无论如何,module_param() 接受一个权限参数来指定参数值的读写和执行权限。那么,如果您正确设置权限,module_param() 究竟如何变得不安全,module_param_hw( ) 究竟如何解决这些问题。我知道module_param_hw 应该在我们传递与硬件相关的值时使用,但不明白为什么它更安全。

【问题讨论】:

【参考方案1】:

它或枚举 KERNEL_PARAM_FL_UNSAFE 来标记文件 module_param.h 中 kernel_param 结构的成员。检查宏 module_param_hw_named

它还添加了与内核锁定功能相关的额外检查,

if (kp->flags & KERNEL_PARAM_FL_HWPARAM &&
    security_locked_down(LOCKDOWN_MODULE_PARAMETERS))
    return false;

您可以在文件 kernel/params.c 中检查函数 param_check_unsafe。该函数在带参数的内核中插入模块时会被调用。

【讨论】:

以上是关于为啥 module_param_hw( ) 宏比 module_param( ) 更安全?的主要内容,如果未能解决你的问题,请参考以下文章

你应该同步运行方法吗?为啥或者为啥不?

为啥使用 glTranslatef?为啥不直接更改渲染坐标?

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]