Linux: Remove ZFS_AC_KERNEL_SRC_MODULE_PARAM_CALL_CONST autotools check
On older kernels, the definition for `module_param_call()` typecasts function pointers to `(void *)`, which triggers -Werror, causing the check to return false when it should return true. Fixing this breaks the build process on some older kernels because they define a `__check_old_set_param()` function in their headers that checks for a non-constified `->set()`. We workaround that through the c preprocessor by defining `__check_old_set_param(set)` to `(set)`, which prevents the build failures. However, it is now apparent that all kernels that we support have adopted the GRSecurity change, so there is no need to have an explicit autotools check for it anymore. We therefore remove the autotools check, while adding the workaround to our headers for the build time non-constified `->set()` check done by older kernel headers. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Jorgen Lundman <lundman@lundman.net> Reviewed-by: Ryan Moeller <ryan@iXsystems.com> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu> Closes #13984 Closes #14004
This commit is contained in:
parent
4dd9c3b08e
commit
7a1b6c51d0
|
@ -1,33 +0,0 @@
|
||||||
dnl #
|
|
||||||
dnl # Grsecurity kernel API change
|
|
||||||
dnl # constified parameters of module_param_call() methods
|
|
||||||
dnl #
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_SRC_MODULE_PARAM_CALL_CONST], [
|
|
||||||
ZFS_LINUX_TEST_SRC([module_param_call], [
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/moduleparam.h>
|
|
||||||
|
|
||||||
int param_get(char *b, const struct kernel_param *kp)
|
|
||||||
{
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int param_set(const char *b, const struct kernel_param *kp)
|
|
||||||
{
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
module_param_call(p, param_set, param_get, NULL, 0644);
|
|
||||||
],[])
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_MODULE_PARAM_CALL_CONST], [
|
|
||||||
AC_MSG_CHECKING([whether module_param_call() is hardened])
|
|
||||||
ZFS_LINUX_TEST_RESULT([module_param_call], [
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_DEFINE(MODULE_PARAM_CALL_CONST, 1,
|
|
||||||
[hardened module_param_call])
|
|
||||||
],[
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
])
|
|
||||||
])
|
|
|
@ -119,7 +119,6 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
|
||||||
ZFS_AC_KERNEL_SRC_FMODE_T
|
ZFS_AC_KERNEL_SRC_FMODE_T
|
||||||
ZFS_AC_KERNEL_SRC_KUIDGID_T
|
ZFS_AC_KERNEL_SRC_KUIDGID_T
|
||||||
ZFS_AC_KERNEL_SRC_KUID_HELPERS
|
ZFS_AC_KERNEL_SRC_KUID_HELPERS
|
||||||
ZFS_AC_KERNEL_SRC_MODULE_PARAM_CALL_CONST
|
|
||||||
ZFS_AC_KERNEL_SRC_RENAME
|
ZFS_AC_KERNEL_SRC_RENAME
|
||||||
ZFS_AC_KERNEL_SRC_CURRENT_TIME
|
ZFS_AC_KERNEL_SRC_CURRENT_TIME
|
||||||
ZFS_AC_KERNEL_SRC_USERNS_CAPABILITIES
|
ZFS_AC_KERNEL_SRC_USERNS_CAPABILITIES
|
||||||
|
@ -236,7 +235,6 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
|
||||||
ZFS_AC_KERNEL_FMODE_T
|
ZFS_AC_KERNEL_FMODE_T
|
||||||
ZFS_AC_KERNEL_KUIDGID_T
|
ZFS_AC_KERNEL_KUIDGID_T
|
||||||
ZFS_AC_KERNEL_KUID_HELPERS
|
ZFS_AC_KERNEL_KUID_HELPERS
|
||||||
ZFS_AC_KERNEL_MODULE_PARAM_CALL_CONST
|
|
||||||
ZFS_AC_KERNEL_RENAME
|
ZFS_AC_KERNEL_RENAME
|
||||||
ZFS_AC_KERNEL_CURRENT_TIME
|
ZFS_AC_KERNEL_CURRENT_TIME
|
||||||
ZFS_AC_KERNEL_USERNS_CAPABILITIES
|
ZFS_AC_KERNEL_USERNS_CAPABILITIES
|
||||||
|
|
|
@ -30,12 +30,16 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
|
|
||||||
/* Grsecurity kernel API change */
|
/*
|
||||||
#ifdef MODULE_PARAM_CALL_CONST
|
* Despite constifying struct kernel_param_ops, some older kernels define a
|
||||||
|
* `__check_old_set_param()` function in their headers that checks for a
|
||||||
|
* non-constified `->set()`. This has long been fixed in Linux mainline, but
|
||||||
|
* since we support older kernels, we workaround it by using a preprocessor
|
||||||
|
* definition to disable it.
|
||||||
|
*/
|
||||||
|
#define __check_old_set_param(_) (0)
|
||||||
|
|
||||||
typedef const struct kernel_param zfs_kernel_param_t;
|
typedef const struct kernel_param zfs_kernel_param_t;
|
||||||
#else
|
|
||||||
typedef struct kernel_param zfs_kernel_param_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ZMOD_RW 0644
|
#define ZMOD_RW 0644
|
||||||
#define ZMOD_RD 0444
|
#define ZMOD_RD 0444
|
||||||
|
|
Loading…
Reference in New Issue