diff --git a/security/keys/key.c b/security/keys/key.c
index 8fb7c7bd465769cb5dca49e6d6f1ad011c75de63..6595b2dd89fe4e4adb7890e20d476f77ee4cd015 100644
--- a/security/keys/key.c
+++ b/security/keys/key.c
@@ -580,7 +580,7 @@ int key_reject_and_link(struct key *key,
 
 	mutex_unlock(&key_construction_mutex);
 
-	if (keyring)
+	if (keyring && link_ret == 0)
 		__key_link_end(keyring, key->type, prealloc);
 
 	/* wake up anyone waiting for a key to be constructed */