From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 52047C3A589 for ; Tue, 20 Aug 2019 13:45:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1A2D522DCC for ; Tue, 20 Aug 2019 13:45:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1566308732; bh=V581wTsLKMtFtMR2oTBYW0l+2Swk69Zfs3/wGLPhHn4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=FNBnBxV5SemeUfMXcbchIvxH2WGU8aHkJjPWKbqwIXAU5gUD9Vft7IlHSp1V8+EHS 8cB1aDYhbNRC048ra5Oblaoutjn8l85y8eEOf5tpfTavDHhC+5tiUqD8VyjDBhR/C2 Bs/WKvS2QcuWvnit0hhJxJcijxjVNrg2frmy6ZDE= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730691AbfHTNmj (ORCPT ); Tue, 20 Aug 2019 09:42:39 -0400 Received: from mail.kernel.org ([198.145.29.99]:38068 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730686AbfHTNmj (ORCPT ); Tue, 20 Aug 2019 09:42:39 -0400 Received: from sasha-vm.mshome.net (unknown [12.236.144.82]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A9ECF22DBF; Tue, 20 Aug 2019 13:42:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1566308558; bh=V581wTsLKMtFtMR2oTBYW0l+2Swk69Zfs3/wGLPhHn4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wPYmgq4H86f4ELuSVX379qd4Ar4UbF02x6L/gG4mI4CQ3EVZbYUgPoFgbEjiJDLYJ umeBnCLWdrIsNHXnNtFSE7kfieCk3cOYsG7VxT7uR/RTEZdpmuC7MAiAQ3n1gc6/Wx vYcSn5gkJBJXzIfv5X7cnhdAduAnktb3eXm1eYcI= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Wenwen Wang , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Boris Ostrovsky , Jens Axboe , Sasha Levin , linux-block@vger.kernel.org Subject: [PATCH AUTOSEL 4.19 20/27] xen/blkback: fix memory leaks Date: Tue, 20 Aug 2019 09:42:06 -0400 Message-Id: <20190820134213.11279-20-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190820134213.11279-1-sashal@kernel.org> References: <20190820134213.11279-1-sashal@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org From: Wenwen Wang [ Upstream commit ae78ca3cf3d9e9f914bfcd0bc5c389ff18b9c2e0 ] In read_per_ring_refs(), after 'req' and related memory regions are allocated, xen_blkif_map() is invoked to map the shared frame, irq, and etc. However, if this mapping process fails, no cleanup is performed, leading to memory leaks. To fix this issue, invoke the cleanup before returning the error. Acked-by: Roger Pau Monné Reviewed-by: Boris Ostrovsky Signed-off-by: Wenwen Wang Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- drivers/block/xen-blkback/xenbus.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c index a4bc74e72c394..55869b362fdfb 100644 --- a/drivers/block/xen-blkback/xenbus.c +++ b/drivers/block/xen-blkback/xenbus.c @@ -974,6 +974,7 @@ static int read_per_ring_refs(struct xen_blkif_ring *ring, const char *dir) } blkif->nr_ring_pages = nr_grefs; + err = -ENOMEM; for (i = 0; i < nr_grefs * XEN_BLKIF_REQS_PER_PAGE; i++) { req = kzalloc(sizeof(*req), GFP_KERNEL); if (!req) @@ -996,7 +997,7 @@ static int read_per_ring_refs(struct xen_blkif_ring *ring, const char *dir) err = xen_blkif_map(ring, ring_ref, nr_grefs, evtchn); if (err) { xenbus_dev_fatal(dev, err, "mapping ring-ref port %u", evtchn); - return err; + goto fail; } return 0; @@ -1016,8 +1017,7 @@ static int read_per_ring_refs(struct xen_blkif_ring *ring, const char *dir) } kfree(req); } - return -ENOMEM; - + return err; } static int connect_ring(struct backend_info *be) -- 2.20.1