From patchwork Mon Jan 18 07:44:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gao Pan X-Patchwork-Id: 8053401 Return-Path: X-Original-To: patchwork-linux-spi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 060F59F859 for ; Mon, 18 Jan 2016 08:19:13 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 2387720221 for ; Mon, 18 Jan 2016 08:19:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3D2A6201FE for ; Mon, 18 Jan 2016 08:19:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752951AbcARITK (ORCPT ); Mon, 18 Jan 2016 03:19:10 -0500 Received: from mail-db3on0075.outbound.protection.outlook.com ([157.55.234.75]:27340 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751657AbcARITJ (ORCPT ); Mon, 18 Jan 2016 03:19:09 -0500 X-Greylist: delayed 1993 seconds by postgrey-1.27 at vger.kernel.org; Mon, 18 Jan 2016 03:19:08 EST Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=pandy.gao@nxp.com; Received: from b54642-OptiPlex-3020.ap.freescale.net (199.59.226.141) by HE1PR0401MB1788.eurprd04.prod.outlook.com (10.169.118.154) with Microsoft SMTP Server (TLS) id 15.1.365.19; Mon, 18 Jan 2016 07:45:46 +0000 From: Gao Pan To: CC: , , , Subject: [Patch v1] spi: imx: fix spi resource leak with dma transfer Date: Mon, 18 Jan 2016 15:44:01 +0800 Message-ID: <1453103041-23197-1-git-send-email-pandy.gao@nxp.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 X-Originating-IP: [199.59.226.141] X-ClientProxiedBy: KL1PR06CA0011.apcprd06.prod.outlook.com (25.165.15.149) To HE1PR0401MB1788.eurprd04.prod.outlook.com (25.169.118.154) X-Microsoft-Exchange-Diagnostics: 1; HE1PR0401MB1788; 2:h1DpXUznqSLjy3lY+RQCM6NmC7KY3xaLfJl16x2ErxpRPbg/oaCW8PLvtMZc5OW/iuQx4K1KTlYecNlxXOolRZTVWcTx8Wc6Mu3XcSNqabW5bpEZ+ucgOXoDspWRZtHXn+p3tXsa5frz37rdSo1wgA==; 3:GJWmqIiiRS4zCFxHC1doiE8I4q95Vp9WSWTWqOnIgTqt5j7Sx3FNeLTgHq7vJjolpjWOqCC96Es0yc2CBvuqKUQ2MSeQ2sLX9gAoaTpFdjZXE22ea2DKJr527I+RhSFR; 25:o4wPuEeKjPnMvOB9SYI4jAm5YXqV2CJEQXGvRhQxTfpyBL7RmxQ/oXCUQpKIuGugHNeb8bBFzamuKUGubtXAg5ePTG0zTliF6467gYe5q09mADcGBO8o1xc6i2jEgy7KP4HDQpQOfZXKk74jU5wLR49plElFU1sXx6YPHKmiFREz7rhlQSGDo1oztjjMpH1Bhml3be9NnU9p0fXOPRs1OyG5cFwdpFcX634A6j2gB+HjJIZL87llO1LShts6dlel X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0401MB1788; X-MS-Office365-Filtering-Correlation-Id: f75efe57-0e76-4b12-17ba-08d31fdb6414 X-Microsoft-Exchange-Diagnostics: 1; HE1PR0401MB1788; 20:uguQX0OE/MP09gndlb2/lev618DvM2XqNhKq3K/gu3YQ8xJn8pd9DFODMfUOlMz73jiqR1NcyyL7sBB2yI4nBc5sV1+qOYD6Uq61BWfcGmHVi9XzpeKwJuW/aHffbYGmkLSj16Ch3DP3a91ft5d1jrOmG/dY+2OI7vCVXCGG3qLaiMRgV5n+eIcCmn4JRxBPLmQot3qfqnhOA3oP68ZhFN/qIxG8HrAO5XWL3zz9Qzh26U2b813CJCGifrtBnjPqq/QAJXgqO86Y2bQhIjTVWaj8z9Gsz9mvdrdrLPh4AlF9TtWe/XKUvB/gZpdPdkXdH5wKMfi3Q/KILgCoAeBlcqUgFFY0yTBlt+ZoLH7URw8C04+X3j7KvO6Xt4Kt0vKgV2WjswvdDTwhB+Jw0i6aDCcR+3Urgm0A4KBOV8R5RrgC7nUSJQ6iE5Ng/fjN3f9tZghew9ub3Z0xqLGngz+G4wxp1gYrXxaEDfh6rlAOAnOiolsQsfpHcmc2C+4FJoNS X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(8121501046)(520078)(10201501046)(3002001); SRVR:HE1PR0401MB1788; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0401MB1788; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0401MB1788; 4:NlVh6s0p0pVSPUd4fDG6D2N4hTK3+F2knvt8JrDlriDJEDWPdya8ypKlJZIJ0DlDsoOa2tCM96LXUCFxH6o5a2ZxaqyBEr3JGh64ro1KfGnYqNWGsQONQz1vtQRiIuhgK2iS+HNZTeR+SlswzTNeXMuE12DBd357587EnWjQyaoIlg1oXom4whFZrnLObL/IEEIef8UO5F9mOvr1twD1XUhe8hGWYGS8qKBnf3wbdkwuphr4xlP2H3fuxbQukvhxvpQNylmMa8QDnp7QUSjcO8Ntz4SQ1aZqmP+U8GrF/iUZsUkoPttIQ43+kQPcJzQog742Z2nD0LTO00xHJFdxkfFKB/e1fag4TyFVsmfkjLTycAiP/xGlev8IS1uGMgH4Sce7twLkp96T9rQDL4JgtCJVUUkcw6enM9sZZxeWVywblCllkawRZxK0vgCG2e/6s+gJdbS/uododpnbpOCQLg== X-Forefront-PRVS: 08252193F3 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(979002)(6009001)(199003)(189002)(217423001)(229853001)(36756003)(5001960100002)(50226001)(81156007)(122386002)(97736004)(4326007)(19580405001)(110136002)(1096002)(3846002)(2351001)(586003)(47776003)(5008740100001)(48376002)(19580395003)(50466002)(5003940100001)(6116002)(77096005)(92566002)(40100003)(33646002)(105586002)(5004730100002)(189998001)(87976001)(50986999)(106356001)(2906002)(86362001)(66066001)(101416001)(42186005)(7099028)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0401MB1788; H:b54642-OptiPlex-3020.ap.freescale.net; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0401MB1788; 23:AIFntkT6/ZliIxpOvXGwmTTt26yHB2lVvGGnFrB?= =?us-ascii?Q?1UyzUhzHCS3ttIbxTLoVkGvF8bWINro6jCZYBlBC2jpyfN0Lk5Lnidkh+Bcd?= =?us-ascii?Q?CgBXP0GPdzlLkP6l8fNdaOSbFpwLtwLK7ai7yn0mI3UL/y6ab5KuYIDaQaTC?= =?us-ascii?Q?pzGNHBPzdsTGAbPlyBCB78SQvPhRDVWLjJeFKVPOomIX6DXcUgyvFy0vCMW9?= =?us-ascii?Q?TxrgjCHQfnp+6guI4oofXEQxnRcdtAIDPyvG6gKzSmMG1MpYDgssRdY4rJh9?= =?us-ascii?Q?gnOr8mJflo0nY0RLUc5D6JC1jxVUHArSRj1CF/at2uFmDGW75f1uJE9sMwOp?= =?us-ascii?Q?50Hj8veRb4zMWfQUnnafKHWNrcYpF6t5Z+p4VQnE/NtVww3QWS7kBSzQ9jpn?= =?us-ascii?Q?BvD4CFSXf0C6gKrHi+GL4yp3Ar8x1ioelmzw4vTPNoHI7PF2qXCQZWVc0ZYs?= =?us-ascii?Q?qV8nvX0BUb+ImmOEcHt8jsJeTSZRwTiOIi3xuTNP4UixWf9UyzD6VlxQgrGS?= =?us-ascii?Q?Qvvr8z3QWnplbN8rcvy3X2YJglpGINTXT9fbN78rqBfyhleIH/qKKQ0CguCU?= =?us-ascii?Q?bteSDJ8gULTEoRlW8ih/9Q7M0VaCvF2Kcz5CwpiMmdcMut9bKOg/SyAg35br?= =?us-ascii?Q?yq4rUSjhmjWFhLYm8cl3d78CmuzamQZsNn16GJuJNYwvT/tY4tXB+n8Yb/Sk?= =?us-ascii?Q?YCobnbqZjH+dfI+c96SGxwY1wszcZ73LHQs6gDa8zyP7hbIr1YY1RlSla6cU?= =?us-ascii?Q?qu+fvJWYXA3V92ql70qRGomv3CuKKkc6ORxSJRsHZYSp79wXsWcbAWiXW8oX?= =?us-ascii?Q?CPKz9nMXyBA+w+UJxJgaJkNXxDIqq3oktZYgxa80FNpgIuAEKoQyAqpepIqr?= =?us-ascii?Q?2bCR6tszniWjXivURX7UP7sLbRsZbt7wFLWqIzNUe3f1SLmOH8wSUDdyzHSi?= =?us-ascii?Q?nPHjTgGiKtwA1xhafUnk56mE5XRwuRV7fN9j1XdLe/hO7+S7ZyImFl6J+YRT?= =?us-ascii?Q?cXm5ETV263tdIHSj+INnAx1DnQmg7+Vhaf9eRhS+sHcdZbP7qWDQ3qwFpgDF?= =?us-ascii?Q?NnRLe4SmYyTxBHR2KQFoCpLJ3c/9lNTy3OogyKgF3wgfXY0TtUE7gfC4Iiyt?= =?us-ascii?Q?A7ZScJTQevtuE1b3U52ipUm/J7RI+z6vvjC/j+Gz+ZecbbQF8EvRvSw=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0401MB1788; 5:hGiOpQJyLtIpU7xAlozLSzOoJTlWvJ/M3/Hs8PPsmWNNvcW9zNZJ7ihzvU1YLZcE/4PUBwAmqtyDYveezLXIwrIk/Zm5YMSxi7r61XsUGWsYOcFDWFAlv5D1+tEChKLl+4e4q0tvduhw3ayX5n69Qw==; 24:Ckm0mv7CBzU/Yik0+g8S2VObjrn5TZmwjmCo7Pmejf4zG3rTamDrLhn2E7N3gJ3MeaUs170gNJMwEEADQwO2KJpjggz6yqwNCFvxgbHtc+g= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2016 07:45:46.5925 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0401MB1788 Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In spi_imx_dma_transfer(), when desc_rx = dmaengine_prep_slave_sg() fails, the context goes to label no_dma and then return. However, the memory allocated for desc_tx has not been freed yet, which leads to resource leak. Signed-off-by: Gao Pan Reviewed-by: Fugang Duan --- drivers/spi/spi-imx.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index d98c33c..6a4ff27 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c @@ -929,7 +929,7 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx, tx->sgl, tx->nents, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!desc_tx) - goto no_dma; + goto tx_nodma; desc_tx->callback = spi_imx_dma_tx_callback; desc_tx->callback_param = (void *)spi_imx; @@ -941,7 +941,7 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx, rx->sgl, rx->nents, DMA_DEV_TO_MEM, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!desc_rx) - goto no_dma; + goto rx_nodma; desc_rx->callback = spi_imx_dma_rx_callback; desc_rx->callback_param = (void *)spi_imx; @@ -1008,7 +1008,9 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx, return ret; -no_dma: +rx_nodma: + dmaengine_terminate_all(master->dma_tx); +tx_nodma: pr_warn_once("%s %s: DMA not available, falling back to PIO\n", dev_driver_string(&master->dev), dev_name(&master->dev));