@@ -56,7 +56,10 @@ ifeq "$(ENABLED_LINUXKM_BENCHMARKS)" "yes"
5656endif
5757
5858ifeq "$(ENABLED_LINUXKM_PIE ) " "yes"
59- WOLFCRYPT_PIE_FILES := $(filter wolfcrypt/src/% ,$(WOLFSSL_OBJ_FILES ) ) linuxkm/pie_redirect_table.o
59+ WOLFCRYPT_PIE_FILES := \
60+ $(filter wolfcrypt/src/% ,$(WOLFSSL_OBJ_FILES ) ) \
61+ linuxkm/pie_redirect_table.o \
62+ linuxkm/wc_linuxkm_pie_reloc_tab.o
6063 WOLFSSL_OBJ_FILES := $(WOLFCRYPT_PIE_FILES ) $(filter-out $(WOLFCRYPT_PIE_FILES ) ,$(WOLFSSL_OBJ_FILES ) )
6164endif
6265
@@ -100,12 +103,12 @@ ifndef MAKE_TMPDIR
100103 MAKE_TMPDIR := $(TMPDIR )
101104endif
102105
103- GENERATE_RELOC_TAB := $(READELF ) --wide -r libwolfssl.ko | \
104- $(AWK ) 'BEGIN { \
106+ GENERATE_RELOC_TAB := $(AWK ) 'BEGIN { \
105107 n=0; \
106108 bad_relocs=0; \
109+ print "\# include <wolfssl/wolfcrypt/libwolfssl_sources.h>"; \
107110 printf("%s\n ", \
108- "const unsigned int wc_linuxkm_pie_reloc_tab[] = { "); \
111+ "WOLFSSL_LOCAL const unsigned int wc_linuxkm_pie_reloc_tab[] = { "); \
109112 } \
110113 /^Relocation section '\''\.rela\.text_wolfcrypt'\''/ { \
111114 p=1; \
@@ -130,7 +133,7 @@ GENERATE_RELOC_TAB := $(READELF) --wide -r libwolfssl.ko | \
130133 print "Found " bad_relocs " unexpected relocations." >"/dev/stderr"; \
131134 exit(1); \
132135 } \
133- print "~0U };\nconst size_t wc_linuxkm_pie_reloc_tab_length = sizeof wc_linuxkm_pie_reloc_tab / sizeof wc_linuxkm_pie_reloc_tab[0];";\
136+ print "~0U };\nWOLFSSL_LOCAL const unsigned long wc_linuxkm_pie_reloc_tab_length = sizeof wc_linuxkm_pie_reloc_tab / sizeof wc_linuxkm_pie_reloc_tab[0];";\
134137 }'
135138
136139ifeq "$(V ) " "1"
@@ -139,29 +142,31 @@ endif
139142
140143.PHONY : libwolfssl.ko
141144libwolfssl.ko :
145+ @function resolved_link_is_equal () { [[ -L " $$ 1" && (" $$ (readlink -f " $$ 1" )" == " $$ (readlink -f " $$ 2" )" ) ]] }
142146 @if test -z ' $(KERNEL_ROOT)' ; then echo ' $$KERNEL_ROOT is unset' >&2 ; exit 1; fi
143147 @if test -z ' $(AM_CFLAGS)$(CFLAGS)' ; then echo ' $$AM_CFLAGS and $$CFLAGS are both unset.' >&2 ; exit 1; fi
144148 @if test -z ' $(src_libwolfssl_la_OBJECTS)' ; then echo ' $$src_libwolfssl_la_OBJECTS is unset.' >&2 ; exit 1; fi
145149 # after commit 9a0ebe5011 (6.10), sources must be in $(obj). work around this by making links to all needed sources:
146150 @mkdir -p '$(MODULE_TOP)/linuxkm'
147- @test '$(MODULE_TOP)/module_hooks.c' -ef '$(MODULE_TOP)/linuxkm /module_hooks.c' || cp $(vflag) --no-dereference --symbolic-link --no-clobber '$(MODULE_TOP)'/*.[ch] '$(MODULE_TOP)/linuxkm/'
148- @test '$(SRC_TOP )/wolfcrypt/src/wc_port.c' -ef '$(MODULE_TOP )/wolfcrypt/src/wc_port.c' || cp $(vflag) --no-dereference --symbolic-link --no-clobber --recursive '$(SRC_TOP)/wolfcrypt' '$(MODULE_TOP)/'
149- @test '$(SRC_TOP )/src/wolfio.c' -ef '$(MODULE_TOP )/src/wolfio.c' || cp $(vflag) --no-dereference --symbolic-link --no-clobber --recursive '$(SRC_TOP)/src' '$(MODULE_TOP)/'
151+ @resolved_link_is_equal '$(MODULE_TOP)/linuxkm/ module_hooks.c' '$(MODULE_TOP)/module_hooks.c' || cp $(vflag) --no-dereference --symbolic-link --no-clobber '$(MODULE_TOP)'/*.[ch] '$(MODULE_TOP)/linuxkm/'
152+ @resolved_link_is_equal '$(MODULE_TOP )/wolfcrypt/src/wc_port.c' '$(SRC_TOP )/wolfcrypt/src/wc_port.c' || cp $(vflag) --no-dereference --symbolic-link --no-clobber --recursive '$(SRC_TOP)/wolfcrypt' '$(MODULE_TOP)/'
153+ @resolved_link_is_equal '$(MODULE_TOP )/src/wolfio.c' '$(SRC_TOP )/src/wolfio.c' || cp $(vflag) --no-dereference --symbolic-link --no-clobber --recursive '$(SRC_TOP)/src' '$(MODULE_TOP)/'
150154ifeq "$(FIPS_OPTEST ) " "1"
151- @test '$(SRC_TOP)/../fips/ optest-140-3/linuxkm_optest_wrapper.c' -ef '$(MODULE_TOP)/linuxkm /optest-140-3/linuxkm_optest_wrapper.c' || cp $(vflag) --no-dereference --symbolic-link --no-clobber --recursive '$(SRC_TOP)/../fips/optest-140-3' '$(MODULE_TOP)/linuxkm'
155+ @resolved_link_is_equal '$(MODULE_TOP)/linuxkm/ optest-140-3/linuxkm_optest_wrapper.c' '$(SRC_TOP)/../fips /optest-140-3/linuxkm_optest_wrapper.c' || cp $(vflag) --no-dereference --symbolic-link --no-clobber --recursive '$(SRC_TOP)/../fips/optest-140-3' '$(MODULE_TOP)/linuxkm'
152156endif
153157ifeq "$(ENABLED_LINUXKM_PIE ) " "yes"
158+ @[[ -f '$(MODULE_TOP)/linuxkm/wc_linuxkm_pie_reloc_tab.c' ]] || \
159+ { $(RM) -f '$(MODULE_TOP)/linuxkm/wc_linuxkm_pie_reloc_tab.c' && $(GENERATE_RELOC_TAB) < /dev/null > '$(MODULE_TOP)/linuxkm/wc_linuxkm_pie_reloc_tab.c'; }
154160 @$(eval RELOC_TMP := $(shell mktemp "$(MAKE_TMPDIR)/wc_linuxkm_pie_reloc_tab.c.XXXXXX"))
155- @[[ -f wc_linuxkm_pie_reloc_tab.c ]] || echo -e "const unsigned int wc_linuxkm_pie_reloc_tab[] = { ~0U };\nconst size_t wc_linuxkm_pie_reloc_tab_length = 1;" > wc_linuxkm_pie_reloc_tab.c
156- @if [[ -f libwolfssl.ko ]]; then touch -r libwolfssl.ko "$(RELOC_TMP)"; fi
161+ @if [[ -f libwolfssl.ko ]]; then touch -r libwolfssl.ko '$(RELOC_TMP)'; fi
157162 +$(MAKE) ARCH='$(KERNEL_ARCH)' $(OVERRIDE_PATHS) $(CROSS_COMPILE) -C '$(KERNEL_ROOT)' M='$(MODULE_TOP)' $(KBUILD_EXTRA_FLAGS) CC_FLAGS_FTRACE=
158163 # if the above make didn't build a fresh libwolfssl.ko, then the module is already up to date and we leave it untouched, assuring stability for purposes of module-update-fips-hash.
159- @if [[ ! libwolfssl.ko -nt " $(RELOC_TMP)" ]]; then rm " $(RELOC_TMP)" ; exit 0; fi
160- @$(GENERATE_RELOC_TAB) >| wc_linuxkm_pie_reloc_tab.c
164+ @if [[ ! libwolfssl.ko -nt ' $(RELOC_TMP)' ]]; then rm ' $(RELOC_TMP)' ; exit 0; fi
165+ @$(READELF) --wide -r libwolfssl.ko | $( GENERATE_RELOC_TAB) >| '$(MODULE_TOP)/linuxkm/ wc_linuxkm_pie_reloc_tab.c'
161166 +$(MAKE) ARCH='$(KERNEL_ARCH)' $(OVERRIDE_PATHS) $(CROSS_COMPILE) -C '$(KERNEL_ROOT)' M='$(MODULE_TOP)' $(KBUILD_EXTRA_FLAGS) CC_FLAGS_FTRACE=
162- @$(GENERATE_RELOC_TAB) >| $(RELOC_TMP)
163- @if diff wc_linuxkm_pie_reloc_tab.c $(RELOC_TMP); then echo " Relocation table is stable."; else echo "PIE failed: relocation table is unstable." 1>&2; rm $(RELOC_TMP); exit 1; fi
164- @rm $(RELOC_TMP)
167+ @$(READELF) --wide -r libwolfssl.ko | $( GENERATE_RELOC_TAB) >| ' $(RELOC_TMP)'
168+ @if diff '$(MODULE_TOP)/linuxkm/ wc_linuxkm_pie_reloc_tab.c' ' $(RELOC_TMP)' ; then echo " Relocation table is stable."; else echo "PIE failed: relocation table is unstable." 1>&2; rm ' $(RELOC_TMP)' ; exit 1; fi
169+ @rm ' $(RELOC_TMP)'
165170else
166171 +$(MAKE) ARCH='$(KERNEL_ARCH)' $(OVERRIDE_PATHS) $(CROSS_COMPILE) -C '$(KERNEL_ROOT)' M='$(MODULE_TOP)' $(KBUILD_EXTRA_FLAGS)
167172endif
0 commit comments