Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934742AbbHLJWq (ORCPT ); Wed, 12 Aug 2015 05:22:46 -0400 Received: from youngberry.canonical.com ([91.189.89.112]:60793 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934423AbbHLI6H (ORCPT ); Wed, 12 Aug 2015 04:58:07 -0400 From: Luis Henriques To: linux-kernel@vger.kernel.org, stable@vger.kernel.org, kernel-team@lists.ubuntu.com Cc: Colin Ian King , David Howells , James Morris , =?UTF-8?q?Moritz=20M=C3=BChlenhoff?= , Luis Henriques Subject: [PATCH 3.16.y-ckt 069/118] KEYS: ensure we free the assoc array edit if edit is valid Date: Wed, 12 Aug 2015 09:56:11 +0100 Message-Id: <1439369820-27005-70-git-send-email-luis.henriques@canonical.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1439369820-27005-1-git-send-email-luis.henriques@canonical.com> References: <1439369820-27005-1-git-send-email-luis.henriques@canonical.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Extended-Stable: 3.16 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1960 Lines: 53 3.16.7-ckt16 -stable review patch. If anyone has any objections, please let me know. ------------------ From: Colin Ian King commit ca4da5dd1f99fe9c59f1709fb43e818b18ad20e0 upstream. __key_link_end is not freeing the associated array edit structure and this leads to a 512 byte memory leak each time an identical existing key is added with add_key(). The reason the add_key() system call returns okay is that key_create_or_update() calls __key_link_begin() before checking to see whether it can update a key directly rather than adding/replacing - which it turns out it can. Thus __key_link() is not called through __key_instantiate_and_link() and __key_link_end() must cancel the edit. CVE-2015-1333 Signed-off-by: Colin Ian King Signed-off-by: David Howells Signed-off-by: James Morris Cc: Moritz Mühlenhoff Signed-off-by: Luis Henriques --- security/keys/keyring.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/security/keys/keyring.c b/security/keys/keyring.c index 9cf2575f0d97..860345cb05f1 100644 --- a/security/keys/keyring.c +++ b/security/keys/keyring.c @@ -1151,9 +1151,11 @@ void __key_link_end(struct key *keyring, if (index_key->type == &key_type_keyring) up_write(&keyring_serialise_link_sem); - if (edit && !edit->dead_leaf) { - key_payload_reserve(keyring, - keyring->datalen - KEYQUOTA_LINK_BYTES); + if (edit) { + if (!edit->dead_leaf) { + key_payload_reserve(keyring, + keyring->datalen - KEYQUOTA_LINK_BYTES); + } assoc_array_cancel_edit(edit); } up_write(&keyring->sem); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/