aboutsummaryrefslogtreecommitdiffstats
path: root/certs
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2016-04-06 11:14:24 -0400
committerDavid Howells <dhowells@redhat.com>2016-04-06 11:14:24 -0400
commitbda850cd214e90b1be0cc25bc48c4f6ac53eb543 (patch)
treeacb936239ac766592c557295aec265ec9a2d04fb /certs
parente68503bd6836ba765dc8e0ee77ea675fedc07e41 (diff)
PKCS#7: Make trust determination dependent on contents of trust keyring
Make the determination of the trustworthiness of a key dependent on whether a key that can verify it is present in the supplied ring of trusted keys rather than whether or not the verifying key has KEY_FLAG_TRUSTED set. verify_pkcs7_signature() will return -ENOKEY if the PKCS#7 message trust chain cannot be verified. Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'certs')
-rw-r--r--certs/system_keyring.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/certs/system_keyring.c b/certs/system_keyring.c
index a83bffedc0aa..dc18869ff680 100644
--- a/certs/system_keyring.c
+++ b/certs/system_keyring.c
@@ -121,7 +121,6 @@ late_initcall(load_system_certificate_list);
121int verify_pkcs7_signature(const void *data, size_t len, 121int verify_pkcs7_signature(const void *data, size_t len,
122 const void *raw_pkcs7, size_t pkcs7_len, 122 const void *raw_pkcs7, size_t pkcs7_len,
123 struct key *trusted_keys, 123 struct key *trusted_keys,
124 int untrusted_error,
125 enum key_being_used_for usage, 124 enum key_being_used_for usage,
126 int (*view_content)(void *ctx, 125 int (*view_content)(void *ctx,
127 const void *data, size_t len, 126 const void *data, size_t len,
@@ -129,7 +128,6 @@ int verify_pkcs7_signature(const void *data, size_t len,
129 void *ctx) 128 void *ctx)
130{ 129{
131 struct pkcs7_message *pkcs7; 130 struct pkcs7_message *pkcs7;
132 bool trusted;
133 int ret; 131 int ret;
134 132
135 pkcs7 = pkcs7_parse_message(raw_pkcs7, pkcs7_len); 133 pkcs7 = pkcs7_parse_message(raw_pkcs7, pkcs7_len);
@@ -149,13 +147,10 @@ int verify_pkcs7_signature(const void *data, size_t len,
149 147
150 if (!trusted_keys) 148 if (!trusted_keys)
151 trusted_keys = system_trusted_keyring; 149 trusted_keys = system_trusted_keyring;
152 ret = pkcs7_validate_trust(pkcs7, trusted_keys, &trusted); 150 ret = pkcs7_validate_trust(pkcs7, trusted_keys);
153 if (ret < 0) 151 if (ret < 0) {
154 goto error; 152 if (ret == -ENOKEY)
155 153 pr_err("PKCS#7 signature not signed with a trusted key\n");
156 if (!trusted && untrusted_error) {
157 pr_err("PKCS#7 signature not signed with a trusted key\n");
158 ret = untrusted_error;
159 goto error; 154 goto error;
160 } 155 }
161 156