From patchwork Fri Aug 25 13:47:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Lamparter X-Patchwork-Id: 9922065 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id DA6256022E for ; Fri, 25 Aug 2017 13:47:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CDB3528174 for ; Fri, 25 Aug 2017 13:47:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C2982281F9; Fri, 25 Aug 2017 13:47:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6E52F2818A for ; Fri, 25 Aug 2017 13:47:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932832AbdHYNrh (ORCPT ); Fri, 25 Aug 2017 09:47:37 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:33870 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932473AbdHYNre (ORCPT ); Fri, 25 Aug 2017 09:47:34 -0400 Received: by mail-wm0-f65.google.com with SMTP id i76so2655880wme.1 for ; Fri, 25 Aug 2017 06:47:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=XcXrTbSQAw5vvf04C6sth8pRnasoZ+bfXvbYsnVI+HQ=; b=vBm+YBPaumcvPZmnHhIYw4IbliGcH2exy1rozxpCb0AlZKcLobk6iZTKSnra2Xzjlc PSr4VkFBxQ7KNJIC+BBrI/xiUkrE9InOVzM/tYNRca5OGVq0MxmBRO52U6JKum25imik jFV4iOB+gNHcCfaP5CTejYRxKSdhJEAvl92KZBONovS3S/xWp0NtFTTrQ/XWuZ0PUX8j SRB4ZmmTGdDazAs9Eta6Czh7aGIgXjLRClEoY6lKBduVcVPW9LwSixvfsJDuyXA6K1Pm ZnYwXeFSZGHpsV+ndcw+4fFA2RmuPdQTGDQFm44rS2vyFuYLaTvPEFOwwO3scrxBWQy3 wcyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=XcXrTbSQAw5vvf04C6sth8pRnasoZ+bfXvbYsnVI+HQ=; b=s3B62mFIGXmmQc3eJEfv6Te3wjTtKHg3jlgM0cH4VZrqqUVA5iZzEVp/BlvPMDIBsW Sop90Ly+ymTnbBwct2LbKr6CIoi/r7t6KYwUFcL9NvzbU+Rw9thfpbeQymWJwgW2sNL7 Xzal4joD+xD5lYz82kmDo3GSTHQTwduC0gwU4wQbValmxAfc5R9cD+yPV+kDv/Xq/msJ 8zpR6LYXD94PEYtsyLOPz1k/vUGs0g0MUjd3VUkI0iqO1sErENTFUpImru6jgJeZJDQQ 7EZnORSEhLveue/vKtMyM0h4xfcQPnVDciEClBjdlir8GyJup3d6lfwc3Ak8hFVKHJrH dHng== X-Gm-Message-State: AHYfb5iF00cGkBIjwFROqY5CEtHEgRGU8ARFWpdkrtlVlih0gBER/NsT BAlaLpTWAWj8kkM7 X-Received: by 10.28.166.73 with SMTP id p70mr1370587wme.181.1503668852584; Fri, 25 Aug 2017 06:47:32 -0700 (PDT) Received: from debian64.daheim (p200300D5FBC232FCD63D7EFFFEBDE96E.dip0.t-ipconnect.de. [2003:d5:fbc2:32fc:d63d:7eff:febd:e96e]) by smtp.gmail.com with ESMTPSA id g133sm2434881wmd.48.2017.08.25.06.47.25 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 25 Aug 2017 06:47:28 -0700 (PDT) Received: from chuck by debian64.daheim with local (Exim 4.89) (envelope-from ) id 1dlExJ-00029y-IV; Fri, 25 Aug 2017 15:47:25 +0200 From: Christian Lamparter To: linux-crypto@vger.kernel.org Cc: Herbert Xu , David Miller Subject: [PATCH 11/12] crypto: crypto4xx: fix crypto4xx_build_pdr, crypto4xx_build_sdr leak Date: Fri, 25 Aug 2017 15:47:24 +0200 Message-Id: X-Mailer: git-send-email 2.14.1 In-Reply-To: <71020bd2e3f4100c3c0668a13fdad9d22c8884a7.1503668705.git.chunkeey@googlemail.com> References: <71020bd2e3f4100c3c0668a13fdad9d22c8884a7.1503668705.git.chunkeey@googlemail.com> In-Reply-To: <5ef8c95cbfd1d4e0c3aa3a4279af82a5d6ebbcc3.1503668705.git.chunkeey@googlemail.com> References: <71020bd2e3f4100c3c0668a13fdad9d22c8884a7.1503668705.git.chunkeey@googlemail.com> <85532949069735593f777489c6efcb6d1b08cdec.1503668705.git.chunkeey@googlemail.com> <7f51944084eef13bebe5f052557533bf6ade4ebc.1503668705.git.chunkeey@googlemail.com> <44b9527904d134982932cb807a3fa6f36093acbf.1503668705.git.chunkeey@googlemail.com> <575e998ebe72ea59e785263e11b2a44fb1c6d910.1503668705.git.chunkeey@googlemail.com> <0521bf298c4b6aeba2d1e1e89aac9929ebffd0d4.1503668705.git.chunkeey@googlemail.com> <668f5f89e62ccb2e410c5a63f35c64efe9bd0686.1503668705.git.chunkeey@googlemail.com> <26b1303367e13a4c0d61cdfbae90dbf588bcc9b5.1503668705.git.chunkeey@googlemail.com> <5ef8c95cbfd1d4e0c3aa3a4279af82a5d6ebbcc3.1503668705.git.chunkeey@googlemail.com> Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If one of the later memory allocations in rypto4xx_build_pdr() fails: dev->pdr (and/or) dev->pdr_uinfo wouldn't be freed. crypto4xx_build_sdr() has the same issue with dev->sdr. Signed-off-by: Christian Lamparter --- drivers/crypto/amcc/crypto4xx_core.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/crypto/amcc/crypto4xx_core.c b/drivers/crypto/amcc/crypto4xx_core.c index c47c84f7492a..817c44703a07 100644 --- a/drivers/crypto/amcc/crypto4xx_core.c +++ b/drivers/crypto/amcc/crypto4xx_core.c @@ -209,7 +209,7 @@ static u32 crypto4xx_build_pdr(struct crypto4xx_device *dev) dev->pdr_pa); return -ENOMEM; } - memset(dev->pdr, 0, sizeof(struct ce_pd) * PPC4XX_NUM_PD); + memset(dev->pdr, 0, sizeof(struct ce_pd) * PPC4XX_NUM_PD); dev->shadow_sa_pool = dma_alloc_coherent(dev->core_dev->device, 256 * PPC4XX_NUM_PD, &dev->shadow_sa_pool_pa, @@ -242,13 +242,15 @@ static u32 crypto4xx_build_pdr(struct crypto4xx_device *dev) static void crypto4xx_destroy_pdr(struct crypto4xx_device *dev) { - if (dev->pdr != NULL) + if (dev->pdr) dma_free_coherent(dev->core_dev->device, sizeof(struct ce_pd) * PPC4XX_NUM_PD, dev->pdr, dev->pdr_pa); + if (dev->shadow_sa_pool) dma_free_coherent(dev->core_dev->device, 256 * PPC4XX_NUM_PD, dev->shadow_sa_pool, dev->shadow_sa_pool_pa); + if (dev->shadow_sr_pool) dma_free_coherent(dev->core_dev->device, sizeof(struct sa_state_record) * PPC4XX_NUM_PD, @@ -417,12 +419,12 @@ static u32 crypto4xx_build_sdr(struct crypto4xx_device *dev) static void crypto4xx_destroy_sdr(struct crypto4xx_device *dev) { - if (dev->sdr != NULL) + if (dev->sdr) dma_free_coherent(dev->core_dev->device, sizeof(struct ce_sd) * PPC4XX_NUM_SD, dev->sdr, dev->sdr_pa); - if (dev->scatter_buffer_va != NULL) + if (dev->scatter_buffer_va) dma_free_coherent(dev->core_dev->device, PPC4XX_SD_BUFFER_SIZE * PPC4XX_NUM_SD, dev->scatter_buffer_va, @@ -1223,7 +1225,7 @@ static int crypto4xx_probe(struct platform_device *ofdev) rc = crypto4xx_build_gdr(core_dev->dev); if (rc) - goto err_build_gdr; + goto err_build_pdr; rc = crypto4xx_build_sdr(core_dev->dev); if (rc) @@ -1266,12 +1268,11 @@ static int crypto4xx_probe(struct platform_device *ofdev) err_request_irq: irq_dispose_mapping(core_dev->irq); tasklet_kill(&core_dev->tasklet); - crypto4xx_destroy_sdr(core_dev->dev); err_build_sdr: + crypto4xx_destroy_sdr(core_dev->dev); crypto4xx_destroy_gdr(core_dev->dev); -err_build_gdr: - crypto4xx_destroy_pdr(core_dev->dev); err_build_pdr: + crypto4xx_destroy_pdr(core_dev->dev); kfree(core_dev->dev); err_alloc_dev: kfree(core_dev);