* [PATCH] KEYS: encrypted: fix dereference of NULL user_key_payload
@ 2017-10-23 23:45 Eric Biggers
2017-10-24 7:52 ` Greg KH
0 siblings, 1 reply; 4+ messages in thread
From: Eric Biggers @ 2017-10-23 23:45 UTC (permalink / raw)
To: stable; +Cc: Eric Biggers, Mimi Zohar, David Safford, David Howells
From: Eric Biggers <ebiggers@google.com>
commit 13923d0865ca96312197962522e88bc0aedccd74 upstream. Please apply
to stable for 4.4 through 4.10.
A key of type "encrypted" references a "master key" which is used to
encrypt and decrypt the encrypted key's payload. However, when we
accessed the master key's payload, we failed to handle the case where
the master key has been revoked, which sets the payload pointer to NULL.
Note that request_key() *does* skip revoked keys, but there is still a
window where the key can be revoked before we acquire its semaphore.
Fix it by checking for a NULL payload, treating it like a key which was
already revoked at the time it was requested.
This was an issue for master keys of type "user" only. Master keys can
also be of type "trusted", but those cannot be revoked.
Fixes: 7e70cb497850 ("keys: add new key-type encrypted")
Reviewed-by: James Morris <james.l.morris@oracle.com>
Cc: <stable@vger.kernel.org> [v2.6.38+]
Cc: Mimi Zohar <zohar@linux.vnet.ibm.com>
Cc: David Safford <safford@us.ibm.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: David Howells <dhowells@redhat.com>
---
security/keys/encrypted-keys/encrypted.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/security/keys/encrypted-keys/encrypted.c b/security/keys/encrypted-keys/encrypted.c
index 31898856682e..dbd75de136d7 100644
--- a/security/keys/encrypted-keys/encrypted.c
+++ b/security/keys/encrypted-keys/encrypted.c
@@ -315,6 +315,13 @@ static struct key *request_user_key(const char *master_desc, const u8 **master_k
down_read(&ukey->sem);
upayload = user_key_payload(ukey);
+ if (!upayload) {
+ /* key was revoked before we acquired its semaphore */
+ up_read(&ukey->sem);
+ key_put(ukey);
+ ukey = ERR_PTR(-EKEYREVOKED);
+ goto error;
+ }
*master_key = upayload->data;
*master_keylen = upayload->datalen;
error:
--
2.15.0.rc0.271.g36b669edcc-goog
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH] KEYS: encrypted: fix dereference of NULL user_key_payload
@ 2017-10-23 23:49 Eric Biggers
2017-10-24 7:52 ` Greg KH
0 siblings, 1 reply; 4+ messages in thread
From: Eric Biggers @ 2017-10-23 23:49 UTC (permalink / raw)
To: stable; +Cc: Eric Biggers, Mimi Zohar, David Safford, David Howells
From: Eric Biggers <ebiggers@google.com>
commit 13923d0865ca96312197962522e88bc0aedccd74 upstream. Please apply
to stable for 4.3 and earlier.
A key of type "encrypted" references a "master key" which is used to
encrypt and decrypt the encrypted key's payload. However, when we
accessed the master key's payload, we failed to handle the case where
the master key has been revoked, which sets the payload pointer to NULL.
Note that request_key() *does* skip revoked keys, but there is still a
window where the key can be revoked before we acquire its semaphore.
Fix it by checking for a NULL payload, treating it like a key which was
already revoked at the time it was requested.
This was an issue for master keys of type "user" only. Master keys can
also be of type "trusted", but those cannot be revoked.
Fixes: 7e70cb497850 ("keys: add new key-type encrypted")
Reviewed-by: James Morris <james.l.morris@oracle.com>
Cc: <stable@vger.kernel.org> [v2.6.38+]
Cc: Mimi Zohar <zohar@linux.vnet.ibm.com>
Cc: David Safford <safford@us.ibm.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: David Howells <dhowells@redhat.com>
---
security/keys/encrypted-keys/encrypted.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/security/keys/encrypted-keys/encrypted.c b/security/keys/encrypted-keys/encrypted.c
index 8e1c0099bb66..89d5695c51cd 100644
--- a/security/keys/encrypted-keys/encrypted.c
+++ b/security/keys/encrypted-keys/encrypted.c
@@ -315,6 +315,13 @@ static struct key *request_user_key(const char *master_desc, u8 **master_key,
down_read(&ukey->sem);
upayload = ukey->payload.data;
+ if (!upayload) {
+ /* key was revoked before we acquired its semaphore */
+ up_read(&ukey->sem);
+ key_put(ukey);
+ ukey = ERR_PTR(-EKEYREVOKED);
+ goto error;
+ }
*master_key = upayload->data;
*master_keylen = upayload->datalen;
error:
--
2.15.0.rc0.271.g36b669edcc-goog
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] KEYS: encrypted: fix dereference of NULL user_key_payload
2017-10-23 23:45 [PATCH] KEYS: encrypted: fix dereference of NULL user_key_payload Eric Biggers
@ 2017-10-24 7:52 ` Greg KH
0 siblings, 0 replies; 4+ messages in thread
From: Greg KH @ 2017-10-24 7:52 UTC (permalink / raw)
To: Eric Biggers
Cc: stable, Eric Biggers, Mimi Zohar, David Safford, David Howells
On Mon, Oct 23, 2017 at 04:45:28PM -0700, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> commit 13923d0865ca96312197962522e88bc0aedccd74 upstream. Please apply
> to stable for 4.4 through 4.10.
Now applied, thanks for the backport.
greg k-h
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] KEYS: encrypted: fix dereference of NULL user_key_payload
2017-10-23 23:49 Eric Biggers
@ 2017-10-24 7:52 ` Greg KH
0 siblings, 0 replies; 4+ messages in thread
From: Greg KH @ 2017-10-24 7:52 UTC (permalink / raw)
To: Eric Biggers
Cc: stable, Eric Biggers, Mimi Zohar, David Safford, David Howells
On Mon, Oct 23, 2017 at 04:49:19PM -0700, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> commit 13923d0865ca96312197962522e88bc0aedccd74 upstream. Please apply
> to stable for 4.3 and earlier.
Now applied to 3.18, thanks for the backport.
greg k-h
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-10-24 8:42 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-23 23:45 [PATCH] KEYS: encrypted: fix dereference of NULL user_key_payload Eric Biggers
2017-10-24 7:52 ` Greg KH
-- strict thread matches above, loose matches on Subject: below --
2017-10-23 23:49 Eric Biggers
2017-10-24 7:52 ` Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).