diff options
| author | Mat Martineau <mathew.j.martineau@linux.intel.com> | 2016-08-30 11:33:13 -0700 | 
|---|---|---|
| committer | Mat Martineau <mathew.j.martineau@linux.intel.com> | 2017-04-03 10:24:56 -0700 | 
| commit | aaf66c883813f0078e3dafe7d20d1461321ac14f (patch) | |
| tree | 5198162cc55309f8653a0a333c2cbdffc64debad /certs | |
| parent | 469ff8f7d46d75b36de68a0411a2ce80109ad00b (diff) | |
| download | linux-aaf66c883813f0078e3dafe7d20d1461321ac14f.tar.bz2 | |
KEYS: Split role of the keyring pointer for keyring restrict functions
The first argument to the restrict_link_func_t functions was a keyring
pointer. These functions are called by the key subsystem with this
argument set to the destination keyring, but restrict_link_by_signature
expects a pointer to the relevant trusted keyring.
Restrict functions may need something other than a single struct key
pointer to allow or reject key linkage, so the data used to make that
decision (such as the trust keyring) is moved to a new, fourth
argument. The first argument is now always the destination keyring.
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Diffstat (limited to 'certs')
| -rw-r--r-- | certs/system_keyring.c | 18 | 
1 files changed, 11 insertions, 7 deletions
diff --git a/certs/system_keyring.c b/certs/system_keyring.c index 50979d6dcecd..e39cce68dcfa 100644 --- a/certs/system_keyring.c +++ b/certs/system_keyring.c @@ -32,11 +32,13 @@ extern __initconst const unsigned long system_certificate_list_size;   * Restrict the addition of keys into a keyring based on the key-to-be-added   * being vouched for by a key in the built in system keyring.   */ -int restrict_link_by_builtin_trusted(struct key *keyring, +int restrict_link_by_builtin_trusted(struct key *dest_keyring,  				     const struct key_type *type, -				     const union key_payload *payload) +				     const union key_payload *payload, +				     struct key *restriction_key)  { -	return restrict_link_by_signature(builtin_trusted_keys, type, payload); +	return restrict_link_by_signature(dest_keyring, type, payload, +					  builtin_trusted_keys);  }  #ifdef CONFIG_SECONDARY_TRUSTED_KEYRING @@ -49,20 +51,22 @@ int restrict_link_by_builtin_trusted(struct key *keyring,   * keyrings.   */  int restrict_link_by_builtin_and_secondary_trusted( -	struct key *keyring, +	struct key *dest_keyring,  	const struct key_type *type, -	const union key_payload *payload) +	const union key_payload *payload, +	struct key *restrict_key)  {  	/* If we have a secondary trusted keyring, then that contains a link  	 * through to the builtin keyring and the search will follow that link.  	 */  	if (type == &key_type_keyring && -	    keyring == secondary_trusted_keys && +	    dest_keyring == secondary_trusted_keys &&  	    payload == &builtin_trusted_keys->payload)  		/* Allow the builtin keyring to be added to the secondary */  		return 0; -	return restrict_link_by_signature(secondary_trusted_keys, type, payload); +	return restrict_link_by_signature(dest_keyring, type, payload, +					  secondary_trusted_keys);  }  #endif  |