Skip to content

Commit d7ec435

Browse files
committed
X.509: Fix certificate gathering
Fix the gathering of certificates from both the source tree and the build tree to correctly calculate the pathnames of all the certificates. The problem was that if the default generated cert, signing_key.x509, didn't exist then it would not have a path attached and if it did, it would have a path attached. This means that the contents of kernel/.x509.list would change between the first compilation in a directory and the second. After the second it would remain stable because the signing_key.x509 file exists. The consequence was that the kernel would get relinked unconditionally on the second recompilation. The second recompilation would also show something like this: X.509 certificate list changed CERTS kernel/x509_certificate_list - Including cert /home/torvalds/v2.6/linux/signing_key.x509 AS kernel/system_certificates.o LD kernel/built-in.o which is why the relink would happen. Unfortunately, it isn't a simple matter of just sticking a path on the front of the filename of the certificate in the build directory as make can't then work out how to build it. So the path has to be prepended to the name for sorting and duplicate elimination and then removed for the make rule if it is in the build tree. Reported-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: David Howells <dhowells@redhat.com>
1 parent 8d27637 commit d7ec435

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

kernel/Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,10 @@ $(obj)/timeconst.h: $(obj)/hz.bc $(src)/timeconst.bc FORCE
137137
###############################################################################
138138
ifeq ($(CONFIG_SYSTEM_TRUSTED_KEYRING),y)
139139
X509_CERTIFICATES-y := $(wildcard *.x509) $(wildcard $(srctree)/*.x509)
140-
X509_CERTIFICATES-$(CONFIG_MODULE_SIG) += signing_key.x509
141-
X509_CERTIFICATES := $(sort $(foreach CERT,$(X509_CERTIFICATES-y), \
140+
X509_CERTIFICATES-$(CONFIG_MODULE_SIG) += $(objtree)/signing_key.x509
141+
X509_CERTIFICATES-raw := $(sort $(foreach CERT,$(X509_CERTIFICATES-y), \
142142
$(or $(realpath $(CERT)),$(CERT))))
143+
X509_CERTIFICATES := $(subst $(realpath $(objtree))/,,$(X509_CERTIFICATES-raw))
143144

144145
ifeq ($(X509_CERTIFICATES),)
145146
$(warning *** No X.509 certificates found ***)

0 commit comments

Comments
 (0)