Merge branch 'modules-next' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty...
[pandora-kernel.git] / kernel / Makefile
index 5404911..0dfeca4 100644 (file)
@@ -54,6 +54,7 @@ obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock.o
 obj-$(CONFIG_PROVE_LOCKING) += spinlock.o
 obj-$(CONFIG_UID16) += uid16.o
 obj-$(CONFIG_MODULES) += module.o
+obj-$(CONFIG_MODULE_SIG) += module_signing.o modsign_pubkey.o
 obj-$(CONFIG_KALLSYMS) += kallsyms.o
 obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o
 obj-$(CONFIG_KEXEC) += kexec.o
@@ -130,3 +131,79 @@ quiet_cmd_timeconst  = TIMEC   $@
 targets += timeconst.h
 $(obj)/timeconst.h: $(src)/timeconst.pl FORCE
        $(call if_changed,timeconst)
+
+ifeq ($(CONFIG_MODULE_SIG),y)
+#
+# Pull the signing certificate and any extra certificates into the kernel
+#
+extra_certificates:
+       touch $@
+
+kernel/modsign_pubkey.o: signing_key.x509 extra_certificates
+
+###############################################################################
+#
+# If module signing is requested, say by allyesconfig, but a key has not been
+# supplied, then one will need to be generated to make sure the build does not
+# fail and that the kernel may be used afterwards.
+#
+###############################################################################
+sign_key_with_hash :=
+ifeq ($(CONFIG_MODULE_SIG_SHA1),y)
+sign_key_with_hash := -sha1
+endif
+ifeq ($(CONFIG_MODULE_SIG_SHA224),y)
+sign_key_with_hash := -sha224
+endif
+ifeq ($(CONFIG_MODULE_SIG_SHA256),y)
+sign_key_with_hash := -sha256
+endif
+ifeq ($(CONFIG_MODULE_SIG_SHA384),y)
+sign_key_with_hash := -sha384
+endif
+ifeq ($(CONFIG_MODULE_SIG_SHA512),y)
+sign_key_with_hash := -sha512
+endif
+ifeq ($(sign_key_with_hash),)
+$(error Could not determine digest type to use from kernel config)
+endif
+
+signing_key.priv signing_key.x509: x509.genkey
+       @echo "###"
+       @echo "### Now generating an X.509 key pair to be used for signing modules."
+       @echo "###"
+       @echo "### If this takes a long time, you might wish to run rngd in the"
+       @echo "### background to keep the supply of entropy topped up.  It"
+       @echo "### needs to be run as root, and should use a hardware random"
+       @echo "### number generator if one is available, eg:"
+       @echo "###"
+       @echo "###     rngd -r /dev/hwrandom"
+       @echo "###"
+       openssl req -new -nodes -utf8 $(sign_key_with_hash) -days 36500 -batch \
+               -x509 -config x509.genkey \
+               -outform DER -out signing_key.x509 \
+               -keyout signing_key.priv
+       @echo "###"
+       @echo "### Key pair generated."
+       @echo "###"
+
+x509.genkey:
+       @echo Generating X.509 key generation config
+       @echo  >x509.genkey "[ req ]"
+       @echo >>x509.genkey "default_bits = 4096"
+       @echo >>x509.genkey "distinguished_name = req_distinguished_name"
+       @echo >>x509.genkey "prompt = no"
+       @echo >>x509.genkey "string_mask = utf8only"
+       @echo >>x509.genkey "x509_extensions = myexts"
+       @echo >>x509.genkey
+       @echo >>x509.genkey "[ req_distinguished_name ]"
+       @echo >>x509.genkey "O = Magrathea"
+       @echo >>x509.genkey "CN = Glacier signing key"
+       @echo >>x509.genkey "emailAddress = slartibartfast@magrathea.h2g2"
+       @echo >>x509.genkey
+       @echo >>x509.genkey "[ myexts ]"
+       @echo >>x509.genkey "basicConstraints=critical,CA:FALSE"
+       @echo >>x509.genkey "keyUsage=digitalSignature"
+       @echo >>x509.genkey "subjectKeyIdentifier=hash"
+       @echo >>x509.genkey "authorityKeyIdentifier=keyid"
+endif