⬢ DragonFlyBSD Kernel Audit
DF-5135 / fix.diff
← back to finding ↓ download raw
--- sys/dev/drm/include/linux/moduleparam.h.orig
+++ sys/dev/drm/include/linux/moduleparam.h
@@ -38,7 +38,17 @@
 
 #define TUNABLE_int(name, var)		TUNABLE_INT( _TUNABLE_VAR(.name), &(var))
 
-#define TUNABLE_bool(name, var)		TUNABLE_INT( _TUNABLE_VAR(.name), (int *)&(var))
+#define TUNABLE_bool(name, var)		_TUNABLE_BOOL((name), (var), __LINE__)
+#define _TUNABLE_BOOL(name, var, line)	__TUNABLE_BOOL((name), (var), line)
+#define __TUNABLE_BOOL(name, var, line)					\
+static void __tunable_bool_ ## line (void *unused)			\
+{									\
+	int __tv = (var);	/* start from the compiled-in default */	\
+	TUNABLE_INT_FETCH(_TUNABLE_VAR(.name), &__tv);			\
+	(var) = !!__tv;							\
+}									\
+SYSINIT(__tunable_bool_init_ ## line, SI_BOOT1_TUNABLES,		\
+	SI_ORDER_MIDDLE, __tunable_bool_ ## line, NULL)
 
 #define TUNABLE_uint(name, var)		TUNABLE_INT( _TUNABLE_VAR(.name), (int *)&(var))