为什么 module_param_hw( ) 宏比 module_param( ) 更安全?

why module_param_hw( ) macro is more secure than module_param( )?

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

它或枚举 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。带参数在内核中插入模块时会调用此函数。