Received: by 2002:a5d:9c59:0:0:0:0:0 with SMTP id 25csp2331620iof; Wed, 8 Jun 2022 02:41:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx6xHSlMimd0FnIlgYFbuw6nbnc4T7Sz9dfX8wjegft/27bj7FYvWhw9MW/vECDaH67m/kN X-Received: by 2002:a17:903:c3:b0:163:bfde:eec3 with SMTP id x3-20020a17090300c300b00163bfdeeec3mr33913732plc.152.1654681259949; Wed, 08 Jun 2022 02:40:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654681259; cv=none; d=google.com; s=arc-20160816; b=u2TtJHNEovdlxNiG5ezqQr1g5d/NTtE1N14MW7VB+MeGNDsa4CXJTspm/s0/0HlDvZ GAihc/I/DxmQYfJpIewjRwTBK3gS4q+qvt4s2BX2F+d+P9cJHQ9x/4EqFIqzO4e4IO8s bKjBnEQPVcAMrlWd/jAEzwfDiMumnyytwIzeF0jXZRHNQynm7CUzJKJXjwebUWxh8qYf I2/EPs1PBfv6ZJ5vlDmw6Fn3GCfJq+wfmXcQDMY+1H8SQp6DbtsdhGKtn3f346Brns5Y 3KelltGAEM7k2E10WJvZ/mKZKDx4/aPOFMmQm1O9Dk3WjQ9vEzdU4l9T186tG7yxCohJ VSoA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=vNSCvvRLYA+v/8M5QJOY4eUwin3pX0+ivhP8qtUm16o=; b=aZe5nPhZbwPrKAUWS73/OZlc2nsBNVAcsdRiQx20bgxWYIYYzHptY3nlKjB2CaztmL op0AFTwEeK8MPxZsX2W0CISjV8nSpyjsmi9F/p5UVT/BylTO/eZHl6m58LaYv5+tN3bJ SBeGP7J+zUe4gCpDsoG7MJ1bQ9QYzicYhir3rU/oIwtMofpFP9b/iejVCWr65Osjh0fc Y0aAyVkGDVMCww83IhWS8VuC2muA/9WBUUWrEpCuFs1+MsPnbiQfglkwV4SOnkbzW+Zp xP8KAe6e/jeZ2aA8Ze0uV10ErgZEk1NE5DRGqBFER2YQTiOb1dCGLmlYoparNmijbKoI 7HLw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id d2-20020a636802000000b003fd7b18529bsi15470291pgc.364.2022.06.08.02.40.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jun 2022 02:40:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id B1C9C1CE784; Wed, 8 Jun 2022 02:13:05 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234622AbiFHJLO (ORCPT + 99 others); Wed, 8 Jun 2022 05:11:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58910 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234286AbiFHJJu (ORCPT ); Wed, 8 Jun 2022 05:09:50 -0400 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B02D1E0C1D for ; Wed, 8 Jun 2022 01:30:13 -0700 (PDT) Received: from ptz.office.stw.pengutronix.de ([2a0a:edc0:0:900:1d::77] helo=[127.0.0.1]) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1nyr4d-0002wQ-2V; Wed, 08 Jun 2022 10:29:55 +0200 Message-ID: Date: Wed, 8 Jun 2022 10:29:49 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Subject: Re: [PATCH] security:trusted_tpm2: Fix memory leak in tpm2_key_encode() Content-Language: en-US To: Jianglei Nie , jejb@linux.ibm.com, jarkko@kernel.org, zohar@linux.ibm.com, dhowells@redhat.com, jmorris@namei.org, serge@hallyn.com Cc: linux-integrity@vger.kernel.org, keyrings@vger.kernel.org, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org References: <20220608025938.447908-1-niejianglei2021@163.com> From: Ahmad Fatoum In-Reply-To: <20220608025938.447908-1-niejianglei2021@163.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-SA-Exim-Connect-IP: 2a0a:edc0:0:900:1d::77 X-SA-Exim-Mail-From: a.fatoum@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-3.1 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A, RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello Jianglei, On 08.06.22 04:59, Jianglei Nie wrote: > tpm2_key_encode() allocates a memory chunk from scratch with kmalloc(), > but it is never freed, which leads to a memory leak. Free the memory > chunk with kfree() in the return path. Repeating my question in your implicit v1: Are you sure, scratch need not be freed in the successful return case? asn1_encode_sequence() copies bytes out of scratch into payload->blob, so it looks like the buffer is unused after function return. Cheers, Ahmad > > Signed-off-by: Jianglei Nie > --- > security/keys/trusted-keys/trusted_tpm2.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/security/keys/trusted-keys/trusted_tpm2.c b/security/keys/trusted-keys/trusted_tpm2.c > index 0165da386289..dc9efd6c8b14 100644 > --- a/security/keys/trusted-keys/trusted_tpm2.c > +++ b/security/keys/trusted-keys/trusted_tpm2.c > @@ -57,8 +57,10 @@ static int tpm2_key_encode(struct trusted_key_payload *payload, > unsigned char bool[3], *w = bool; > /* tag 0 is emptyAuth */ > w = asn1_encode_boolean(w, w + sizeof(bool), true); > - if (WARN(IS_ERR(w), "BUG: Boolean failed to encode")) > + if (WARN(IS_ERR(w), "BUG: Boolean failed to encode")) { > + kfree(scratch); > return PTR_ERR(w); > + } > work = asn1_encode_tag(work, end_work, 0, bool, w - bool); > } > > @@ -69,8 +71,10 @@ static int tpm2_key_encode(struct trusted_key_payload *payload, > * trigger, so if it does there's something nefarious going on > */ > if (WARN(work - scratch + pub_len + priv_len + 14 > SCRATCH_SIZE, > - "BUG: scratch buffer is too small")) > + "BUG: scratch buffer is too small")) { > + kfree(scratch); > return -EINVAL; > + } > > work = asn1_encode_integer(work, end_work, options->keyhandle); > work = asn1_encode_octet_string(work, end_work, pub, pub_len); > @@ -79,8 +83,10 @@ static int tpm2_key_encode(struct trusted_key_payload *payload, > work1 = payload->blob; > work1 = asn1_encode_sequence(work1, work1 + sizeof(payload->blob), > scratch, work - scratch); > - if (WARN(IS_ERR(work1), "BUG: ASN.1 encoder failed")) > + if (WARN(IS_ERR(work1), "BUG: ASN.1 encoder failed")) { > + kfree(scratch); > return PTR_ERR(work1); > + } > > return work1 - payload->blob; > } -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |