From 976baecc69fc1f426cbb8ab5a6f2b197a6b4a509 Mon Sep 17 00:00:00 2001 From: David Howells Date: Fri, 30 Apr 2010 14:32:28 +0100 Subject: [PATCH] --- yaml --- r: 192441 b: refs/heads/master c: 553d603c8fce8cf727eb26e4bf6b9549cd4623f1 h: refs/heads/master i: 192439: 6ed312ed542904949190faa945134c0dee263a4a v: v3 --- [refs] | 2 +- trunk/security/keys/keyring.c | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 77d74ce49140..af15f26b49ca 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0ffbe2699cda6afbe08501098dff8a8c2fe6ae09 +refs/heads/master: 553d603c8fce8cf727eb26e4bf6b9549cd4623f1 diff --git a/trunk/security/keys/keyring.c b/trunk/security/keys/keyring.c index 2fb2bc9712ae..29de5ee3457b 100644 --- a/trunk/security/keys/keyring.c +++ b/trunk/security/keys/keyring.c @@ -705,13 +705,14 @@ int __key_link(struct key *keyring, struct key *key) if (keyring->type != &key_type_keyring) goto error; - /* serialise link/link calls to prevent parallel calls causing a - * cycle when applied to two keyring in opposite orders */ - down_write(&keyring_serialise_link_sem); - - /* check that we aren't going to create a cycle adding one keyring to - * another */ + /* do some special keyring->keyring link checks */ if (key->type == &key_type_keyring) { + /* serialise link/link calls to prevent parallel calls causing + * a cycle when applied to two keyring in opposite orders */ + down_write(&keyring_serialise_link_sem); + + /* check that we aren't going to create a cycle adding one + * keyring to another */ ret = keyring_detect_cycle(keyring, key); if (ret < 0) goto error2; @@ -814,7 +815,8 @@ int __key_link(struct key *keyring, struct key *key) done: ret = 0; error2: - up_write(&keyring_serialise_link_sem); + if (key->type == &key_type_keyring) + up_write(&keyring_serialise_link_sem); error: return ret;