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