lkm: add autodetection of kernel stack frame size; reactivate objtool scrutiny since _asm files are indeed not yet kernel-compatible; delete linuxkm/lkm_testcrypto.c and use wolfcrypt/test/test.c.

This commit is contained in:
Daniel Pouzzner
2020-08-22 00:32:32 -05:00
parent 535822f4df
commit c194fb3beb
4 changed files with 21 additions and 29446 deletions

View File

@ -1,3 +1,5 @@
SHELL=/bin/bash
# libwolfssl Kbuild # libwolfssl Kbuild
# wolfcrypto asm provokes many objtool complaints: # wolfcrypto asm provokes many objtool complaints:
@ -6,7 +8,7 @@
# "indirect jump found in RETPOLINE build", # "indirect jump found in RETPOLINE build",
# and "is missing an ELF size annotation" # and "is missing an ELF size annotation"
# see /usr/src/linux/tools/objtool/Documentation/stack-validation.txt # see /usr/src/linux/tools/objtool/Documentation/stack-validation.txt
OBJECT_FILES_NON_STANDARD := y #OBJECT_FILES_NON_STANDARD := y
obj-m := libwolfssl.o obj-m := libwolfssl.o
@ -18,9 +20,17 @@ ifeq "$(WOLFSSL_CFLAGS)" ""
$(error $$WOLFSSL_CFLAGS is unset.) $(error $$WOLFSSL_CFLAGS is unset.)
endif endif
hostprogs := linuxkm/get_thread_size
always-y := $(hostprogs)
HOST_EXTRACFLAGS += $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(KBUILD_CFLAGS) -static
$(patsubst %, $(obj)/%, $(WOLFSSL_OBJ_FILES)): $(obj)/linuxkm/get_thread_size
KERNEL_THREAD_STACK_SIZE=$(shell $(obj)/linuxkm/get_thread_size)
MAX_STACK_FRAME_SIZE=$(shell echo $$(( $(KERNEL_THREAD_STACK_SIZE) / 4)))
libwolfssl-y := $(WOLFSSL_OBJ_FILES) libwolfssl-y := $(WOLFSSL_OBJ_FILES)
ccflags-y := $(WOLFSSL_CFLAGS) ccflags-y = $(WOLFSSL_CFLAGS) -Wframe-larger-than=$(MAX_STACK_FRAME_SIZE) -mpreferred-stack-boundary=4
%/libwolfssl.mod.o: ccflags-y := %/libwolfssl.mod.o: ccflags-y :=
%/lkm_testcrypto.o: ccflags-y += -DNO_MAIN_DRIVER %/lkm_testcrypto.o: ccflags-y += -DNO_MAIN_DRIVER

View File

@ -22,13 +22,17 @@ ifeq "$(src_libwolfssl_la_OBJECTS)" ""
$(error $$src_libwolfssl_la_OBJECTS is unset.) $(error $$src_libwolfssl_la_OBJECTS is unset.)
endif endif
WOLFSSL_CFLAGS=-DHAVE_CONFIG_H -I$(SRC_TOP) -DBUILDING_WOLFSSL $(AM_CFLAGS) $(CFLAGS) -Wframe-larger-than=5000 -mpreferred-stack-boundary=4 WOLFSSL_CFLAGS=-DHAVE_CONFIG_H -I$(SRC_TOP) -DBUILDING_WOLFSSL $(AM_CFLAGS) $(CFLAGS)
ifeq "$(KARCH)" "x86"
WOLFSSL_CFLAGS+=-msse -mmmx -msse2 -mavx -mavx2
endif
WOLFSSL_ASFLAGS=-DHAVE_CONFIG_H -I$(SRC_TOP) -DBUILDING_WOLFSSL $(AM_CCASFLAGS) $(CCASFLAGS) WOLFSSL_ASFLAGS=-DHAVE_CONFIG_H -I$(SRC_TOP) -DBUILDING_WOLFSSL $(AM_CCASFLAGS) $(CCASFLAGS)
WOLFSSL_OBJ_FILES=linuxkm/module_hooks.o $(patsubst %.lo, %.o, $(patsubst src/src_libwolfssl_la-%, src/%, $(patsubst src/libwolfssl_la-%, src/%, $(patsubst wolfcrypt/src/src_libwolfssl_la-%, wolfcrypt/src/%, $(src_libwolfssl_la_OBJECTS))))) WOLFSSL_OBJ_FILES=linuxkm/module_hooks.o $(patsubst %.lo, %.o, $(patsubst src/src_libwolfssl_la-%, src/%, $(patsubst src/libwolfssl_la-%, src/%, $(patsubst wolfcrypt/src/src_libwolfssl_la-%, wolfcrypt/src/%, $(src_libwolfssl_la_OBJECTS)))))
ifeq "$(ENABLED_CRYPT_TESTS)" "yes" ifeq "$(ENABLED_CRYPT_TESTS)" "yes"
WOLFSSL_OBJ_FILES+=linuxkm/lkm_testcrypto.o WOLFSSL_OBJ_FILES+=wolfcrypt/test/test.o
else else
WOLFSSL_CFLAGS+=-DNO_CRYPT_TEST WOLFSSL_CFLAGS+=-DNO_CRYPT_TEST
endif endif
@ -36,11 +40,10 @@ endif
export WOLFSSL_CFLAGS WOLFSSL_ASFLAGS WOLFSSL_OBJ_FILES export WOLFSSL_CFLAGS WOLFSSL_ASFLAGS WOLFSSL_OBJ_FILES
libwolfssl.ko: libwolfssl.ko:
@mkdir -p linuxkm src wolfcrypt/src @mkdir -p linuxkm src wolfcrypt/src wolfcrypt/test
@if test ! -h $(SRC_TOP)/Kbuild; then ln -s $(MODULE_TOP)/Kbuild $(SRC_TOP)/Kbuild; fi @if test ! -h $(SRC_TOP)/Kbuild; then ln -s $(MODULE_TOP)/Kbuild $(SRC_TOP)/Kbuild; fi
+make -C $(KROOT) M=$(MODULE_TOP) src=$(SRC_TOP) +make -C $(KROOT) M=$(MODULE_TOP) src=$(SRC_TOP)
.PHONY: clean .PHONY: clean
clean: clean:
@cd $(MODULE_TOP) && rm -f libwolfssl.ko Module.symvers built-in.a modules.order libwolfssl.mod libwolfssl.mod.c src/*.o wolfcrypt/src/*.o +make -C $(KROOT) M=$(MODULE_TOP) src=$(SRC_TOP) clean

File diff suppressed because it is too large Load Diff

View File

@ -2104,6 +2104,7 @@ extern void uITRON4_free(void *p) ;
#define WOLFSSL_USER_IO 1 #define WOLFSSL_USER_IO 1
#define USE_WOLF_STRTOK #define USE_WOLF_STRTOK
#define WOLFSSL_SP_DIV_64 #define WOLFSSL_SP_DIV_64
#define WOLFSSL_OLD_PRIME_CHECK
#endif #endif