aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorMasahiro Yamada <masahiroy@kernel.org>2021-08-19 09:57:36 +0900
committerMasahiro Yamada <masahiroy@kernel.org>2021-09-03 08:17:20 +0900
commita8390ba9ddce15242a41ca04d097b75fd54fd63f (patch)
treeef5a3965b046be545e5a3b24101b08d978b0d847 /scripts
parentkbuild: remove unused quiet_cmd_update_lto_symversions (diff)
downloadlinux-dev-a8390ba9ddce15242a41ca04d097b75fd54fd63f.tar.xz
linux-dev-a8390ba9ddce15242a41ca04d097b75fd54fd63f.zip
kbuild: remove stale *.symversions
cmd_update_lto_symversions merges all the existing *.symversions, but some of them might be stale. If the last EXPORT_SYMBOL is removed from a C file, the *.symversions file is not deleted or updated. It contains stale CRCs, but still they will be used for linking the vmlinux or modules. It is not a big deal when the EXPORT_SYMBOL is really removed. However, when the EXPORT_SYMBOL is moved to another file, the same __crc_<symbol> will appear twice in the merged *.symversions, possibly with different CRCs if the function argument is changed at the same time. It would confuse module versioning. If no EXPORT_SYMBOL is found, let's remove *.symversions explicitly. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Reviewed-by: Kees Cook <keescook@chromium.org>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Makefile.build2
1 files changed, 2 insertions, 0 deletions
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 6961b4acacf8..3efc984d4c69 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -177,6 +177,8 @@ cmd_modversions_c = \
if $(NM) $@ 2>/dev/null | grep -q __ksymtab; then \
$(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \
> $@.symversions; \
+ else \
+ rm -f $@.symversions; \
fi;
else
cmd_modversions_c = \