Commit 884bee02 authored by Eric Biggers's avatar Eric Biggers Committed by David Howells

KEYS: fix key refcount leak in keyctl_assume_authority()

In keyctl_assume_authority(), if keyctl_change_reqkey_auth() were to
fail, we would leak the reference to the 'authkey'.  Currently this can
only happen if prepare_creds() fails to allocate memory.  But it still
should be fixed, as it is a more severe bug waiting to happen.

This patch also moves the read of 'authkey->serial' to before the
reference to the authkey is dropped.  Doing the read after dropping the
reference is very fragile because it assumes we still hold another
reference to the key.  (Which we do, in current->cred->request_key_auth,
but there's no reason not to write it in the "obviously correct" way.)

Fixes: d84f4f99 ("CRED: Inaugurate COW credentials")
Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent f7b48cf0
...@@ -1406,11 +1406,9 @@ long keyctl_assume_authority(key_serial_t id) ...@@ -1406,11 +1406,9 @@ long keyctl_assume_authority(key_serial_t id)
} }
ret = keyctl_change_reqkey_auth(authkey); ret = keyctl_change_reqkey_auth(authkey);
if (ret < 0) if (ret == 0)
goto error;
key_put(authkey);
ret = authkey->serial; ret = authkey->serial;
key_put(authkey);
error: error:
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment