From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [2/3] rio500: fix memeory leak in close after disconnect From: Oliver Neukum Message-Id: <20190430142326.25815-2-oneukum@suse.com> Date: Tue, 30 Apr 2019 16:23:25 +0200 To: gregKH@linuxfoundation.org, miquel@df.uba.ar, linux-usb@vger.kernel.org Cc: Oliver Neukum List-ID: SWYgYSBkaXNjb25uZWN0ZWQgZGV2aWNlIGlzIGNsb3NlZCwgcmlvX2Nsb3NlKCkgbXVzdCBmcmVl CnRoZSBidWZmZXJzLgoKU2lnbmVkLW9mZi1ieTogT2xpdmVyIE5ldWt1bSA8b25ldWt1bUBzdXNl LmNvbT4KLS0tCiBkcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jIHwgMTcgKysrKysrKysrKysrKysr LS0KIDEgZmlsZSBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3Jp bzUwMC5jCmluZGV4IGE0YjZmYmVhOTc1Zi4uMjBjM2ViMGFmN2FkIDEwMDY0NAotLS0gYS9kcml2 ZXJzL3VzYi9taXNjL3JpbzUwMC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKQEAg LTg2LDkgKzg2LDIyIEBAIHN0YXRpYyBpbnQgY2xvc2VfcmlvKHN0cnVjdCBpbm9kZSAqaW5vZGUs IHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9ICZyaW9f aW5zdGFuY2U7CiAKLQlyaW8tPmlzb3BlbiA9IDA7CisJLyogYWdhaW5zdCBkaXNjb25uZWN0KCkg Ki8KKwltdXRleF9sb2NrKCZyaW81MDBfbXV0ZXgpOworCW11dGV4X2xvY2soJihyaW8tPmxvY2sp KTsKIAotCWRldl9pbmZvKCZyaW8tPnJpb19kZXYtPmRldiwgIlJpbyBjbG9zZWQuXG4iKTsKKwly aW8tPmlzb3BlbiA9IDA7CisJaWYgKCFyaW8tPnByZXNlbnQpIHsKKwkJLyogY2xlYW51cCBoYXMg YmVlbiBkZWxheWVkICovCisJCWtmcmVlKHJpby0+aWJ1Zik7CisJCWtmcmVlKHJpby0+b2J1Zik7 CisJCXJpby0+aWJ1ZiA9IE5VTEw7CisJCXJpby0+b2J1ZiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJ ZGV2X2luZm8oJnJpby0+cmlvX2Rldi0+ZGV2LCAiUmlvIGNsb3NlZC5cbiIpOworCX0KKwltdXRl eF91bmxvY2soJihyaW8tPmxvY2spKTsKKwltdXRleF91bmxvY2soJnJpbzUwMF9tdXRleCk7CiAJ cmV0dXJuIDA7CiB9CiAK 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=-8.9 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,USER_AGENT_GIT autolearn=ham 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 3FAEBC43219 for ; Tue, 30 Apr 2019 14:23:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1AF7520835 for ; Tue, 30 Apr 2019 14:23:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726915AbfD3OXu (ORCPT ); Tue, 30 Apr 2019 10:23:50 -0400 Received: from mx2.suse.de ([195.135.220.15]:49350 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726538AbfD3OXt (ORCPT ); Tue, 30 Apr 2019 10:23:49 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 99B88AD81; Tue, 30 Apr 2019 14:23:48 +0000 (UTC) From: Oliver Neukum To: gregKH@linuxfoundation.org, miquel@df.uba.ar, linux-usb@vger.kernel.org Cc: Oliver Neukum Subject: [PATCH 2/3] rio500: fix memeory leak in close after disconnect Date: Tue, 30 Apr 2019 16:23:25 +0200 Message-Id: <20190430142326.25815-2-oneukum@suse.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20190430142326.25815-1-oneukum@suse.com> References: <20190430142326.25815-1-oneukum@suse.com> Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Message-ID: <20190430142325.4J5QNzoW_7lpe30dk6jewDMVvk4bmxoH_hF49V4wrIc@z> If a disconnected device is closed, rio_close() must free the buffers. Signed-off-by: Oliver Neukum --- drivers/usb/misc/rio500.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/usb/misc/rio500.c b/drivers/usb/misc/rio500.c index a4b6fbea975f..20c3eb0af7ad 100644 --- a/drivers/usb/misc/rio500.c +++ b/drivers/usb/misc/rio500.c @@ -86,9 +86,22 @@ static int close_rio(struct inode *inode, struct file *file) { struct rio_usb_data *rio = &rio_instance; - rio->isopen = 0; + /* against disconnect() */ + mutex_lock(&rio500_mutex); + mutex_lock(&(rio->lock)); - dev_info(&rio->rio_dev->dev, "Rio closed.\n"); + rio->isopen = 0; + if (!rio->present) { + /* cleanup has been delayed */ + kfree(rio->ibuf); + kfree(rio->obuf); + rio->ibuf = NULL; + rio->obuf = NULL; + } else { + dev_info(&rio->rio_dev->dev, "Rio closed.\n"); + } + mutex_unlock(&(rio->lock)); + mutex_unlock(&rio500_mutex); return 0; } -- 2.16.4