forked from rpms/kernel
		
	Temp fix for blacklist rework until I figure out how I want to fix for upstream
This commit is contained in:
		
							parent
							
								
									05e55297ee
								
							
						
					
					
						commit
						b88f18484e
					
				| @ -51,17 +51,36 @@ index 787eeead2f57..4d9123ed5c07 100644 | |||||||
|   * |   * | ||||||
|   * Restrict the addition of keys into a keyring based on the key-to-be-added |   * Restrict the addition of keys into a keyring based on the key-to-be-added | ||||||
| diff --git a/include/keys/system_keyring.h b/include/keys/system_keyring.h
 | diff --git a/include/keys/system_keyring.h b/include/keys/system_keyring.h
 | ||||||
| index 5bc291a3d261..56ff5715ab67 100644
 | index 359c2f9..e7160a6 100644
 | ||||||
| --- a/include/keys/system_keyring.h
 | --- a/include/keys/system_keyring.h
 | ||||||
| +++ b/include/keys/system_keyring.h
 | +++ b/include/keys/system_keyring.h
 | ||||||
| @@ -36,6 +36,7 @@ extern int restrict_link_by_builtin_and_secondary_trusted(
 | @@ -39,14 +39,26 @@ extern int restrict_link_by_builtin_and_secondary_trusted(
 | ||||||
|  |  extern int mark_hash_blacklisted(const char *hash); | ||||||
|  |  extern int is_hash_blacklisted(const u8 *hash, size_t hash_len, | ||||||
|  |  			       const char *type); | ||||||
|  | +extern struct key *blacklist_keyring;
 | ||||||
|  | +
 | ||||||
|  | +static inline struct key *get_blacklist_keyring(void)
 | ||||||
|  | +{
 | ||||||
|  | +	return blacklist_keyring;
 | ||||||
|  | +}
 | ||||||
|  |  #else | ||||||
|  |  static inline int is_hash_blacklisted(const u8 *hash, size_t hash_len, | ||||||
|  |  				      const char *type) | ||||||
|  |  { | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|  | +static inline struct key *get_blacklist_keyring(void)
 | ||||||
|  | +{
 | ||||||
|  | +	return NULL;
 | ||||||
|  | +}
 | ||||||
|  #endif |  #endif | ||||||
| +extern struct key *get_system_keyring(void);
 |  | ||||||
| 
 | 
 | ||||||
|  | +extern struct key *get_system_keyring(void);
 | ||||||
|  | +
 | ||||||
|  #ifdef CONFIG_IMA_BLACKLIST_KEYRING |  #ifdef CONFIG_IMA_BLACKLIST_KEYRING | ||||||
|  extern struct key *ima_blacklist_keyring; |  extern struct key *ima_blacklist_keyring; | ||||||
|  | 
 | ||||||
| diff --git a/init/Kconfig b/init/Kconfig
 | diff --git a/init/Kconfig b/init/Kconfig
 | ||||||
| index 461ad575a608..93646fd7b1c8 100644
 | index 461ad575a608..93646fd7b1c8 100644
 | ||||||
| --- a/init/Kconfig
 | --- a/init/Kconfig
 | ||||||
| @ -108,7 +127,7 @@ new file mode 100644 | |||||||
| index 000000000000..fe4a6f2bf10a
 | index 000000000000..fe4a6f2bf10a
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/kernel/modsign_uefi.c
 | +++ b/kernel/modsign_uefi.c
 | ||||||
| @@ -0,0 +1,99 @@
 | @@ -0,0 +1,101 @@
 | ||||||
| +#include <linux/kernel.h>
 | +#include <linux/kernel.h>
 | ||||||
| +#include <linux/sched.h>
 | +#include <linux/sched.h>
 | ||||||
| +#include <linux/cred.h>
 | +#include <linux/cred.h>
 | ||||||
| @ -160,6 +179,7 @@ index 000000000000..fe4a6f2bf10a | |||||||
| +	unsigned long dbsize = 0, dbxsize = 0, moksize = 0;
 | +	unsigned long dbsize = 0, dbxsize = 0, moksize = 0;
 | ||||||
| +	int rc = 0;
 | +	int rc = 0;
 | ||||||
| +	struct key *keyring = NULL;
 | +	struct key *keyring = NULL;
 | ||||||
|  | +	struct key *blacklist = NULL;
 | ||||||
| +
 | +
 | ||||||
| +	/* Check if SB is enabled and just return if not */
 | +	/* Check if SB is enabled and just return if not */
 | ||||||
| +	if (!efi_enabled(EFI_SECURE_BOOT))
 | +	if (!efi_enabled(EFI_SECURE_BOOT))
 | ||||||
| @ -194,12 +214,13 @@ index 000000000000..fe4a6f2bf10a | |||||||
| +		kfree(mok);
 | +		kfree(mok);
 | ||||||
| +	}
 | +	}
 | ||||||
| +
 | +
 | ||||||
|  | +	blacklist = get_blacklist_keyring();
 | ||||||
| +	dbx = get_cert_list(L"dbx", &secure_var, &dbxsize);
 | +	dbx = get_cert_list(L"dbx", &secure_var, &dbxsize);
 | ||||||
| +	if (!dbx) {
 | +	if (!dbx) {
 | ||||||
| +		pr_info("MODSIGN: Couldn't get UEFI dbx list\n");
 | +		pr_info("MODSIGN: Couldn't get UEFI dbx list\n");
 | ||||||
| +	} else {
 | +	} else {
 | ||||||
| +		rc = parse_efi_signature_list(dbx, dbxsize,
 | +		rc = parse_efi_signature_list(dbx, dbxsize,
 | ||||||
| +			system_blacklist_keyring);
 | +			blacklist);
 | ||||||
| +		if (rc)
 | +		if (rc)
 | ||||||
| +			pr_err("Couldn't parse dbx signatures: %d\n", rc);
 | +			pr_err("Couldn't parse dbx signatures: %d\n", rc);
 | ||||||
| +		kfree(dbx);
 | +		kfree(dbx);
 | ||||||
| @ -210,4 +231,16 @@ index 000000000000..fe4a6f2bf10a | |||||||
| +late_initcall(load_uefi_certs);
 | +late_initcall(load_uefi_certs);
 | ||||||
| -- 
 | -- 
 | ||||||
| 2.9.3 | 2.9.3 | ||||||
|  | diff --git a/certs/blacklist.c b/certs/blacklist.c
 | ||||||
|  | index 3eddce0..bd9324c 100644
 | ||||||
|  | --- a/certs/blacklist.c
 | ||||||
|  | +++ b/certs/blacklist.c
 | ||||||
|  | @@ -21,7 +21,7 @@
 | ||||||
|  |  #include <keys/system_keyring.h> | ||||||
|  |  #include "blacklist.h" | ||||||
| 
 | 
 | ||||||
|  | -static struct key *blacklist_keyring;
 | ||||||
|  | +struct key *blacklist_keyring;
 | ||||||
|  | 
 | ||||||
|  |  /* | ||||||
|  |   * The description must be a type prefix, a colon and then an even number of | ||||||
|  | |||||||
| @ -48,8 +48,8 @@ index fe4a6f2bf10a..a41da14b1ffd 100644 | |||||||
| -	int rc = 0;
 | -	int rc = 0;
 | ||||||
| +	int ignore_db, rc = 0;
 | +	int ignore_db, rc = 0;
 | ||||||
|  	struct key *keyring = NULL; |  	struct key *keyring = NULL; | ||||||
|  |  	struct key *blacklist = NULL; | ||||||
|   |   | ||||||
|  	/* Check if SB is enabled and just return if not */ |  | ||||||
| @@ -60,17 +77,22 @@ static int __init load_uefi_certs(void)
 | @@ -60,17 +77,22 @@ static int __init load_uefi_certs(void)
 | ||||||
|  		return -EINVAL; |  		return -EINVAL; | ||||||
|  	} |  	} | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user