diff --git a/linuxkm/Kbuild b/linuxkm/Kbuild index 0798e7691..d902e596f 100644 --- a/linuxkm/Kbuild +++ b/linuxkm/Kbuild @@ -43,6 +43,10 @@ ifeq "$(KERNEL_ARCH)" "aarch64" WOLFSSL_CFLAGS += -mno-outline-atomics else ifeq "$(KERNEL_ARCH)" "arm64" WOLFSSL_CFLAGS += -mno-outline-atomics +else ifeq "$(KERNEL_ARCH)" "arm" + # avoids R_ARM_THM_JUMP11 relocations, including a stubborn tail recursion + # optimization from wc_sp_cmp to wc_sp_cmp_mag: + WOLFSSL_CFLAGS += -fno-optimize-sibling-calls -Os endif obj-m := libwolfssl.o @@ -97,7 +101,7 @@ else WOLFSSL_CFLAGS_YES_VECTOR_INSNS := $(WOLFSSL_CFLAGS_NO_VECTOR_INSNS) endif -ccflags-y := $(WOLFSSL_CFLAGS) $(WOLFSSL_CFLAGS_NO_VECTOR_INSNS) +ccflags-y = $(WOLFSSL_CFLAGS) $(WOLFSSL_CFLAGS_NO_VECTOR_INSNS) ifeq "$(ENABLED_LINUXKM_PIE)" "yes" # note, we need -fno-stack-protector to avoid references to @@ -142,7 +146,7 @@ ifeq "$(ENABLED_LINUXKM_PIE)" "yes" endif ifdef KERNEL_EXTRA_CFLAGS_REMOVE - ccflags-remove-y += KERNEL_EXTRA_CFLAGS_REMOVE + ccflags-remove-y += $(KERNEL_EXTRA_CFLAGS_REMOVE) endif $(obj)/libwolfssl.mod.o: ccflags-y := $(PIE_SUPPORT_FLAGS) diff --git a/linuxkm/Makefile b/linuxkm/Makefile index a3da6adfc..4cd05cf96 100644 --- a/linuxkm/Makefile +++ b/linuxkm/Makefile @@ -207,6 +207,47 @@ endif .PHONY: libwolfssl.ko libwolfssl.ko: @set -e + @[[ '$(V)' == 1 ]] && { echo 'MODULE_TOP = "$(MODULE_TOP)"'; + echo 'SRC_TOP = "$(SRC_TOP)"'; + echo 'AM_CPPFLAGS = "$(AM_CPPFLAGS)"'; + echo 'CPPFLAGS = "$(CPPFLAGS)"'; + echo 'AM_CFLAGS = "$(AM_CFLAGS)"'; + echo 'CFLAGS = "$(CFLAGS)"'; + echo 'KERNEL_EXTRA_CFLAGS = "$(KERNEL_EXTRA_CFLAGS)"'; + echo 'FIPS_OPTEST = "$(FIPS_OPTEST)"'; + echo 'AM_CCASFLAGS = "$(AM_CCASFLAGS)"'; + echo 'CCASFLAGS = "$(CCASFLAGS)"'; + echo 'src_libwolfssl_la_OBJECTS = "$(src_libwolfssl_la_OBJECTS)"'; + echo 'ENABLED_CRYPT_TESTS = "$(ENABLED_CRYPT_TESTS)"'; + echo 'ENABLED_LINUXKM_LKCAPI_REGISTER = "$(ENABLED_LINUXKM_LKCAPI_REGISTER)"'; + echo 'ENABLED_LINUXKM_BENCHMARKS = "$(ENABLED_LINUXKM_BENCHMARKS)"'; + echo 'ENABLED_LINUXKM_PIE = "$(ENABLED_LINUXKM_PIE)"'; + echo 'host_triplet = "$(host_triplet)"'; + echo 'build_triplet = "$(build_triplet)"'; + echo 'CC = "$(CC)"'; + echo 'AS = "$(AS)"'; + echo 'LD = "$(LD)"'; + echo 'READELF = "$(READELF)"'; + echo 'AWK = "$(AWK)"'; + echo 'TMPDIR = "$(TMPDIR)"'; + echo 'MAKE_TMPDIR = "$(MAKE_TMPDIR)"'; + echo 'KERNEL_ROOT = "$(KERNEL_ROOT)"'; + echo 'obj = "$(obj)"'; + echo 'RM = "$(RM)"'; + echo 'KERNEL_ARCH = "$(KERNEL_ARCH)"'; + echo 'FIPS_HASH = "$(FIPS_HASH)"'; + echo 'MAKE = "$(MAKE)"'; + echo 'ENABLED_ASM = "$(ENABLED_ASM)"'; + echo 'CFLAGS_FPU_DISABLE = "$(CFLAGS_FPU_DISABLE)"'; + echo 'CFLAGS_FPU_ENABLE = "$(CFLAGS_FPU_ENABLE)"'; + echo 'CFLAGS_SIMD_DISABLE = "$(CFLAGS_SIMD_DISABLE)"'; + echo 'CFLAGS_SIMD_ENABLE = "$(CFLAGS_SIMD_ENABLE)"'; + echo 'CFLAGS_AUTO_VECTORIZE_DISABLE = "$(CFLAGS_AUTO_VECTORIZE_DISABLE)"'; + echo 'CFLAGS_AUTO_VECTORIZE_ENABLE = "$(CFLAGS_AUTO_VECTORIZE_ENABLE)"'; + echo 'ASFLAGS_FPU_DISABLE_SIMD_ENABLE = "$(ASFLAGS_FPU_DISABLE_SIMD_ENABLE)"'; + echo 'ASFLAGS_FPU_ENABLE_SIMD_DISABLE = "$(ASFLAGS_FPU_ENABLE_SIMD_DISABLE)"'; + echo 'ASFLAGS_FPUSIMD_DISABLE = "$(ASFLAGS_FPUSIMD_DISABLE)"'; + echo 'ASFLAGS_FPUSIMD_ENABLE = "$(ASFLAGS_FPUSIMD_ENABLE)"'; } @function resolved_link_is_equal() { [[ -L "$$1" && "$$(readlink -f "$$1")" == "$$(readlink -f "$$2")" ]]; } @if test -z '$(KERNEL_ROOT)'; then echo '$$KERNEL_ROOT is unset' >&2; exit 1; fi @if test -z '$(AM_CFLAGS)$(CFLAGS)'; then echo '$$AM_CFLAGS and $$CFLAGS are both unset.' >&2; exit 1; fi diff --git a/linuxkm/lkcapi_sha_glue.c b/linuxkm/lkcapi_sha_glue.c index 196ade40f..ab741057b 100644 --- a/linuxkm/lkcapi_sha_glue.c +++ b/linuxkm/lkcapi_sha_glue.c @@ -1198,7 +1198,7 @@ static int wc_linuxkm_drbg_seed(struct crypto_rng *tfm, { struct wc_linuxkm_drbg_ctx *ctx = (struct wc_linuxkm_drbg_ctx *)crypto_rng_ctx(tfm); u8 *seed_copy = NULL; - int ret; + int ret = 0; int n; if ((tfm->base.__crt_alg->cra_init != wc_linuxkm_drbg_init_tfm) || diff --git a/linuxkm/module_hooks.c b/linuxkm/module_hooks.c index 759bc5ef2..788aa6600 100644 --- a/linuxkm/module_hooks.c +++ b/linuxkm/module_hooks.c @@ -142,11 +142,11 @@ static void lkmFipsCb(int ok, int err, const char* hash) } } } -#endif #ifdef WOLFCRYPT_FIPS_CORE_DYNAMIC_HASH_VALUE static int updateFipsHash(void); #endif +#endif /* HAVE_FIPS */ #ifdef WOLFSSL_LINUXKM_BENCHMARKS extern int wolfcrypt_benchmark_main(int argc, char** argv); @@ -1507,7 +1507,7 @@ static int set_up_wolfssl_linuxkm_pie_redirect_table(void) { #endif /* WC_PIE_RELOC_TABLES */ -#ifdef WOLFCRYPT_FIPS_CORE_DYNAMIC_HASH_VALUE +#if defined(HAVE_FIPS) && defined(WOLFCRYPT_FIPS_CORE_DYNAMIC_HASH_VALUE) #include @@ -1763,7 +1763,7 @@ static int updateFipsHash(void) return ret; } -#endif /* WOLFCRYPT_FIPS_CORE_DYNAMIC_HASH_VALUE */ +#endif /* HAVE_FIPS && WOLFCRYPT_FIPS_CORE_DYNAMIC_HASH_VALUE */ #ifdef CONFIG_HAVE_KPROBES