mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	certs: Move load_certificate_list() to be with the asymmetric keys code
Move load_certificate_list(), which loads a series of binary X.509 certificates from a blob and inserts them as keys into a keyring, to be with the asymmetric keys code that it drives. This makes it easier to add FIPS selftest code in which we need to load up a private keyring for the tests to use. Signed-off-by: David Howells <dhowells@redhat.com> Reviewed-by: Simo Sorce <simo@redhat.com> Reviewed-by: Herbert Xu <herbert@gondor.apana.org.au> cc: keyrings@vger.kernel.org cc: linux-crypto@vger.kernel.org Link: https://lore.kernel.org/r/165515742145.1554877.13488098107542537203.stgit@warthog.procyon.org.uk/
This commit is contained in:
		
							parent
							
								
									b13baccc38
								
							
						
					
					
						commit
						60050ffe3d
					
				
					 7 changed files with 17 additions and 22 deletions
				
			
		| 
						 | 
					@ -3,8 +3,8 @@
 | 
				
			||||||
# Makefile for the linux kernel signature checking certificates.
 | 
					# Makefile for the linux kernel signature checking certificates.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
obj-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += system_keyring.o system_certificates.o common.o
 | 
					obj-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += system_keyring.o system_certificates.o
 | 
				
			||||||
obj-$(CONFIG_SYSTEM_BLACKLIST_KEYRING) += blacklist.o common.o
 | 
					obj-$(CONFIG_SYSTEM_BLACKLIST_KEYRING) += blacklist.o
 | 
				
			||||||
obj-$(CONFIG_SYSTEM_REVOCATION_LIST) += revocation_certificates.o
 | 
					obj-$(CONFIG_SYSTEM_REVOCATION_LIST) += revocation_certificates.o
 | 
				
			||||||
ifneq ($(CONFIG_SYSTEM_BLACKLIST_HASH_LIST),)
 | 
					ifneq ($(CONFIG_SYSTEM_BLACKLIST_HASH_LIST),)
 | 
				
			||||||
quiet_cmd_check_blacklist_hashes = CHECK   $(patsubst "%",%,$(2))
 | 
					quiet_cmd_check_blacklist_hashes = CHECK   $(patsubst "%",%,$(2))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,10 +15,9 @@
 | 
				
			||||||
#include <linux/err.h>
 | 
					#include <linux/err.h>
 | 
				
			||||||
#include <linux/seq_file.h>
 | 
					#include <linux/seq_file.h>
 | 
				
			||||||
#include <linux/uidgid.h>
 | 
					#include <linux/uidgid.h>
 | 
				
			||||||
#include <linux/verification.h>
 | 
					#include <keys/asymmetric-type.h>
 | 
				
			||||||
#include <keys/system_keyring.h>
 | 
					#include <keys/system_keyring.h>
 | 
				
			||||||
#include "blacklist.h"
 | 
					#include "blacklist.h"
 | 
				
			||||||
#include "common.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * According to crypto/asymmetric_keys/x509_cert_parser.c:x509_note_pkey_algo(),
 | 
					 * According to crypto/asymmetric_keys/x509_cert_parser.c:x509_note_pkey_algo(),
 | 
				
			||||||
| 
						 | 
					@ -365,8 +364,9 @@ static __init int load_revocation_certificate_list(void)
 | 
				
			||||||
	if (revocation_certificate_list_size)
 | 
						if (revocation_certificate_list_size)
 | 
				
			||||||
		pr_notice("Loading compiled-in revocation X.509 certificates\n");
 | 
							pr_notice("Loading compiled-in revocation X.509 certificates\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return load_certificate_list(revocation_certificate_list, revocation_certificate_list_size,
 | 
						return x509_load_certificate_list(revocation_certificate_list,
 | 
				
			||||||
				     blacklist_keyring);
 | 
										  revocation_certificate_list_size,
 | 
				
			||||||
 | 
										  blacklist_keyring);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
late_initcall(load_revocation_certificate_list);
 | 
					late_initcall(load_revocation_certificate_list);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +0,0 @@
 | 
				
			||||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef _CERT_COMMON_H
 | 
					 | 
				
			||||||
#define _CERT_COMMON_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int load_certificate_list(const u8 cert_list[], const unsigned long list_size,
 | 
					 | 
				
			||||||
			  const struct key *keyring);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,6 @@
 | 
				
			||||||
#include <keys/asymmetric-type.h>
 | 
					#include <keys/asymmetric-type.h>
 | 
				
			||||||
#include <keys/system_keyring.h>
 | 
					#include <keys/system_keyring.h>
 | 
				
			||||||
#include <crypto/pkcs7.h>
 | 
					#include <crypto/pkcs7.h>
 | 
				
			||||||
#include "common.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct key *builtin_trusted_keys;
 | 
					static struct key *builtin_trusted_keys;
 | 
				
			||||||
#ifdef CONFIG_SECONDARY_TRUSTED_KEYRING
 | 
					#ifdef CONFIG_SECONDARY_TRUSTED_KEYRING
 | 
				
			||||||
| 
						 | 
					@ -183,7 +182,8 @@ __init int load_module_cert(struct key *keyring)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pr_notice("Loading compiled-in module X.509 certificates\n");
 | 
						pr_notice("Loading compiled-in module X.509 certificates\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return load_certificate_list(system_certificate_list, module_cert_size, keyring);
 | 
						return x509_load_certificate_list(system_certificate_list,
 | 
				
			||||||
 | 
										  module_cert_size, keyring);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -204,7 +204,7 @@ static __init int load_system_certificate_list(void)
 | 
				
			||||||
	size = system_certificate_list_size - module_cert_size;
 | 
						size = system_certificate_list_size - module_cert_size;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return load_certificate_list(p, size, builtin_trusted_keys);
 | 
						return x509_load_certificate_list(p, size, builtin_trusted_keys);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
late_initcall(load_system_certificate_list);
 | 
					late_initcall(load_system_certificate_list);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,6 +20,7 @@ x509_key_parser-y := \
 | 
				
			||||||
	x509.asn1.o \
 | 
						x509.asn1.o \
 | 
				
			||||||
	x509_akid.asn1.o \
 | 
						x509_akid.asn1.o \
 | 
				
			||||||
	x509_cert_parser.o \
 | 
						x509_cert_parser.o \
 | 
				
			||||||
 | 
						x509_loader.o \
 | 
				
			||||||
	x509_public_key.o
 | 
						x509_public_key.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(obj)/x509_cert_parser.o: \
 | 
					$(obj)/x509_cert_parser.o: \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,11 +2,11 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <linux/kernel.h>
 | 
					#include <linux/kernel.h>
 | 
				
			||||||
#include <linux/key.h>
 | 
					#include <linux/key.h>
 | 
				
			||||||
#include "common.h"
 | 
					#include <keys/asymmetric-type.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int load_certificate_list(const u8 cert_list[],
 | 
					int x509_load_certificate_list(const u8 cert_list[],
 | 
				
			||||||
			  const unsigned long list_size,
 | 
								       const unsigned long list_size,
 | 
				
			||||||
			  const struct key *keyring)
 | 
								       const struct key *keyring)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	key_ref_t key;
 | 
						key_ref_t key;
 | 
				
			||||||
	const u8 *p, *end;
 | 
						const u8 *p, *end;
 | 
				
			||||||
| 
						 | 
					@ -84,6 +84,9 @@ extern struct key *find_asymmetric_key(struct key *keyring,
 | 
				
			||||||
				       const struct asymmetric_key_id *id_2,
 | 
									       const struct asymmetric_key_id *id_2,
 | 
				
			||||||
				       bool partial);
 | 
									       bool partial);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int x509_load_certificate_list(const u8 cert_list[], const unsigned long list_size,
 | 
				
			||||||
 | 
								       const struct key *keyring);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * The payload is at the discretion of the subtype.
 | 
					 * The payload is at the discretion of the subtype.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue