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

C 为什么module_param_hw()宏比module_param()更安全?,c,linux,module,linux-kernel,insmod,C,Linux,Module,Linux Kernel,Insmod,我开始学习内核模块编程。要将任何参数传递给内核模块,您可以使用module\u param()宏,我猜它的工作方式类似于用户空间中的动态链接方法(通过内核模块加载程序将符号重新定位到运行时),如果我错了,您可以纠正我。无论如何,module_param()接受一个权限参数来指定参数值的读写和执行权限。因此,如果正确设置了权限,module_param()会变得多么不安全,而module_param_hw()又是如何解决这些问题的呢。我知道当我们传递与硬件相关的值时应该使用module\u par

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

在文件module\u param.h中标记KERNEL\u param结构的成员是不安全的。。检查已命名的宏模块参数

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

if (kp->flags & KERNEL_PARAM_FL_HWPARAM &&
    security_locked_down(LOCKDOWN_MODULE_PARAMETERS))
    return false;
您可以在kernel/params.c文件中检查函数param_check_unsafe。在内核中插入带参数的模块时,将调用此函数