From 7759efd0cb4dc0d3d66f629e9ab3344962aa5a48 Mon Sep 17 00:00:00 2001 From: Bjarne von Horn Date: Wed, 15 Jan 2025 09:56:44 +0100 Subject: [PATCH] bbapi: Add Compile time check for Linux >= 5.8 __vmalloc_node_range has become a macro in 6.10, so the workaround does no longer work. This check reveals that at compile time. --- Makefile | 3 +++ api.c | 6 ++---- api_internals.h | 17 +++++++++++++++++ compile_test.c | 18 ++++++++++++++++++ 4 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 api_internals.h create mode 100644 compile_test.c diff --git a/Makefile b/Makefile index 4c96b3d..73e07a6 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,9 @@ SUDO := ${SUDO_${OS}} ccflags-y := -DBIOSAPIERR_OFFSET=0 ccflags-y := -DUNAME_S=\"${OS}\" +# compile test for vmalloc workaround check for Linux >= 5.8 +always-y += compile_test.o + all: make -C $(KDIR) M=$(PWD) modules make -C $(KDIR) M=$(PWD)/button modules diff --git a/api.c b/api.c index 0d2ffb2..8860282 100644 --- a/api.c +++ b/api.c @@ -192,10 +192,8 @@ static struct kprobe kp = { typedef unsigned long (*kallsyms_lookup_name_t)(const char *name); kallsyms_lookup_name_t fcn_kallsyms_lookup_name; -typedef void *(*fcn_vmalloc_node_range_t)(unsigned long size, unsigned long align, - unsigned long start, unsigned long end, gfp_t gfp_mask, - pgprot_t prot, unsigned long vm_flags, int node, - const void *caller); +#include "api_internals.h" + fcn_vmalloc_node_range_t fcn_vmalloc_node_range; #endif diff --git a/api_internals.h b/api_internals.h new file mode 100644 index 0000000..3d905af --- /dev/null +++ b/api_internals.h @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +/** + Author: Bjarne von Horn + Copyright (C) 2024 IgH GmbH +*/ +#ifndef __API_INTERNALS_H +#define __API_INTERNALS_H + +#include + +typedef void *(*fcn_vmalloc_node_range_t)(unsigned long size, unsigned long align, + unsigned long start, unsigned long end, gfp_t gfp_mask, + pgprot_t prot, unsigned long vm_flags, int node, + const void *caller); + +#endif + diff --git a/compile_test.c b/compile_test.c new file mode 100644 index 0000000..84dd026 --- /dev/null +++ b/compile_test.c @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +/** + Compile test to ensure __vmalloc_node_range is a symbol and its arguments + Author: Bjarne von Horn + Copyright (C) 2024 IgH GmbH +*/ + +#include + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0) + +#include "api_internals.h" +#include + + +__attribute__((__used__)) fcn_vmalloc_node_range_t fcn_vmalloc_node_range_test = &__vmalloc_node_range; + +#endif