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.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,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 9F93BC04EB9 for ; Wed, 5 Dec 2018 09:39:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6746E20879 for ; Wed, 5 Dec 2018 09:39:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="omo4q3LF" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6746E20879 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728552AbeLEJjz (ORCPT ); Wed, 5 Dec 2018 04:39:55 -0500 Received: from mail.kernel.org ([198.145.29.99]:44106 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727616AbeLEJjx (ORCPT ); Wed, 5 Dec 2018 04:39:53 -0500 Received: from sasha-vm.mshome.net (unknown [213.57.143.11]) (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 BF9682084C; Wed, 5 Dec 2018 09:39:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1544002792; bh=y4DE3IR68f42m4RDyPhOYQAemIUZk9HAykC6mgYmevw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=omo4q3LFT+qgSGacwmSlltWXJUSOuo5+Tl1W4f06SAYoWlt8xcPI7tNResCloh+XB Gp5RQ8ItGA+JzwvH4O72lOpqGNYR06Ufs6NN5JZUR4biqOTujos7ddnUgviQ5kG2M8 RzEPWGjn2rIC2kpzywInJQ5Pk2KoSEnT3lGyqQ10= From: Sasha Levin To: stable@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Aaro Koskinen , Felipe Balbi , Sasha Levin , linux-usb@vger.kernel.org Subject: [PATCH AUTOSEL 4.19 069/123] USB: omap_udc: fix crashes on probe error and module removal Date: Wed, 5 Dec 2018 04:35:01 -0500 Message-Id: <20181205093555.5386-69-sashal@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181205093555.5386-1-sashal@kernel.org> References: <20181205093555.5386-1-sashal@kernel.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Aaro Koskinen [ Upstream commit 99f700366fcea1aa2fa3c49c99f371670c3c62f8 ] We currently crash if usb_add_gadget_udc_release() fails, since the udc->done is not initialized until in the remove function. Furthermore, on module removal the udc data is accessed although the release function is already triggered by usb_del_gadget_udc() early in the function. Fix by rewriting the release and remove functions, basically moving all the cleanup into the release function, and doing the completion only in the module removal case. The patch fixes omap_udc module probe with a failing gadged, and also allows the removal of omap_udc. Tested by running "modprobe omap_udc; modprobe -r omap_udc" in a loop. Signed-off-by: Aaro Koskinen Signed-off-by: Felipe Balbi Signed-off-by: Sasha Levin --- drivers/usb/gadget/udc/omap_udc.c | 50 ++++++++++++------------------- 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/drivers/usb/gadget/udc/omap_udc.c b/drivers/usb/gadget/udc/omap_udc.c index 1c77218c82af..240ccba44592 100644 --- a/drivers/usb/gadget/udc/omap_udc.c +++ b/drivers/usb/gadget/udc/omap_udc.c @@ -2593,9 +2593,22 @@ omap_ep_setup(char *name, u8 addr, u8 type, static void omap_udc_release(struct device *dev) { - complete(udc->done); + pullup_disable(udc); + if (!IS_ERR_OR_NULL(udc->transceiver)) { + usb_put_phy(udc->transceiver); + udc->transceiver = NULL; + } + omap_writew(0, UDC_SYSCON1); + remove_proc_file(); + if (udc->dc_clk) { + if (udc->clk_requested) + omap_udc_enable_clock(0); + clk_put(udc->hhc_clk); + clk_put(udc->dc_clk); + } + if (udc->done) + complete(udc->done); kfree(udc); - udc = NULL; } static int @@ -2900,12 +2913,8 @@ static int omap_udc_probe(struct platform_device *pdev) } create_proc_file(); - status = usb_add_gadget_udc_release(&pdev->dev, &udc->gadget, - omap_udc_release); - if (!status) - return 0; - - remove_proc_file(); + return usb_add_gadget_udc_release(&pdev->dev, &udc->gadget, + omap_udc_release); cleanup1: kfree(udc); @@ -2932,36 +2941,15 @@ static int omap_udc_remove(struct platform_device *pdev) { DECLARE_COMPLETION_ONSTACK(done); - if (!udc) - return -ENODEV; - - usb_del_gadget_udc(&udc->gadget); - if (udc->driver) - return -EBUSY; - udc->done = &done; - pullup_disable(udc); - if (!IS_ERR_OR_NULL(udc->transceiver)) { - usb_put_phy(udc->transceiver); - udc->transceiver = NULL; - } - omap_writew(0, UDC_SYSCON1); - - remove_proc_file(); + usb_del_gadget_udc(&udc->gadget); - if (udc->dc_clk) { - if (udc->clk_requested) - omap_udc_enable_clock(0); - clk_put(udc->hhc_clk); - clk_put(udc->dc_clk); - } + wait_for_completion(&done); release_mem_region(pdev->resource[0].start, pdev->resource[0].end - pdev->resource[0].start + 1); - wait_for_completion(&done); - return 0; } -- 2.17.1 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: [AUTOSEL,4.19,069/123] USB: omap_udc: fix crashes on probe error and module removal From: Sasha Levin Message-Id: <20181205093555.5386-69-sashal@kernel.org> Date: Wed, 5 Dec 2018 04:35:01 -0500 To: stable@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Aaro Koskinen , Felipe Balbi , Sasha Levin , linux-usb@vger.kernel.org List-ID: RnJvbTogQWFybyBLb3NraW5lbiA8YWFyby5rb3NraW5lbkBpa2kuZmk+CgpbIFVwc3RyZWFtIGNv bW1pdCA5OWY3MDAzNjZmY2VhMWFhMmZhM2M0OWM5OWYzNzE2NzBjM2M2MmY4IF0KCldlIGN1cnJl bnRseSBjcmFzaCBpZiB1c2JfYWRkX2dhZGdldF91ZGNfcmVsZWFzZSgpIGZhaWxzLCBzaW5jZSB0 aGUKdWRjLT5kb25lIGlzIG5vdCBpbml0aWFsaXplZCB1bnRpbCBpbiB0aGUgcmVtb3ZlIGZ1bmN0 aW9uLgpGdXJ0aGVybW9yZSwgb24gbW9kdWxlIHJlbW92YWwgdGhlIHVkYyBkYXRhIGlzIGFjY2Vz c2VkIGFsdGhvdWdoCnRoZSByZWxlYXNlIGZ1bmN0aW9uIGlzIGFscmVhZHkgdHJpZ2dlcmVkIGJ5 IHVzYl9kZWxfZ2FkZ2V0X3VkYygpCmVhcmx5IGluIHRoZSBmdW5jdGlvbi4KCkZpeCBieSByZXdy aXRpbmcgdGhlIHJlbGVhc2UgYW5kIHJlbW92ZSBmdW5jdGlvbnMsIGJhc2ljYWxseSBtb3ZpbmcK YWxsIHRoZSBjbGVhbnVwIGludG8gdGhlIHJlbGVhc2UgZnVuY3Rpb24sIGFuZCBkb2luZyB0aGUg Y29tcGxldGlvbgpvbmx5IGluIHRoZSBtb2R1bGUgcmVtb3ZhbCBjYXNlLgoKVGhlIHBhdGNoIGZp eGVzIG9tYXBfdWRjIG1vZHVsZSBwcm9iZSB3aXRoIGEgZmFpbGluZyBnYWRnZWQsIGFuZCBhbHNv CmFsbG93cyB0aGUgcmVtb3ZhbCBvZiBvbWFwX3VkYy4gVGVzdGVkIGJ5IHJ1bm5pbmcgIm1vZHBy b2JlIG9tYXBfdWRjOwptb2Rwcm9iZSAtciBvbWFwX3VkYyIgaW4gYSBsb29wLgoKU2lnbmVkLW9m Zi1ieTogQWFybyBLb3NraW5lbiA8YWFyby5rb3NraW5lbkBpa2kuZmk+ClNpZ25lZC1vZmYtYnk6 IEZlbGlwZSBCYWxiaSA8ZmVsaXBlLmJhbGJpQGxpbnV4LmludGVsLmNvbT4KU2lnbmVkLW9mZi1i eTogU2FzaGEgTGV2aW4gPHNhc2hhbEBrZXJuZWwub3JnPgotLS0KIGRyaXZlcnMvdXNiL2dhZGdl dC91ZGMvb21hcF91ZGMuYyB8IDUwICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KIDEg ZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL29tYXBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRn ZXQvdWRjL29tYXBfdWRjLmMKaW5kZXggMWM3NzIxOGM4MmFmLi4yNDBjY2JhNDQ1OTIgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvb21hcF91ZGMuYworKysgYi9kcml2ZXJzL3Vz Yi9nYWRnZXQvdWRjL29tYXBfdWRjLmMKQEAgLTI1OTMsOSArMjU5MywyMiBAQCBvbWFwX2VwX3Nl dHVwKGNoYXIgKm5hbWUsIHU4IGFkZHIsIHU4IHR5cGUsCiAKIHN0YXRpYyB2b2lkIG9tYXBfdWRj X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCWNvbXBsZXRlKHVkYy0+ZG9uZSk7CisJ cHVsbHVwX2Rpc2FibGUodWRjKTsKKwlpZiAoIUlTX0VSUl9PUl9OVUxMKHVkYy0+dHJhbnNjZWl2 ZXIpKSB7CisJCXVzYl9wdXRfcGh5KHVkYy0+dHJhbnNjZWl2ZXIpOworCQl1ZGMtPnRyYW5zY2Vp dmVyID0gTlVMTDsKKwl9CisJb21hcF93cml0ZXcoMCwgVURDX1NZU0NPTjEpOworCXJlbW92ZV9w cm9jX2ZpbGUoKTsKKwlpZiAodWRjLT5kY19jbGspIHsKKwkJaWYgKHVkYy0+Y2xrX3JlcXVlc3Rl ZCkKKwkJCW9tYXBfdWRjX2VuYWJsZV9jbG9jaygwKTsKKwkJY2xrX3B1dCh1ZGMtPmhoY19jbGsp OworCQljbGtfcHV0KHVkYy0+ZGNfY2xrKTsKKwl9CisJaWYgKHVkYy0+ZG9uZSkKKwkJY29tcGxl dGUodWRjLT5kb25lKTsKIAlrZnJlZSh1ZGMpOwotCXVkYyA9IE5VTEw7CiB9CiAKIHN0YXRpYyBp bnQKQEAgLTI5MDAsMTIgKzI5MTMsOCBAQCBzdGF0aWMgaW50IG9tYXBfdWRjX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJfQogCiAJY3JlYXRlX3Byb2NfZmlsZSgpOwotCXN0 YXR1cyA9IHVzYl9hZGRfZ2FkZ2V0X3VkY19yZWxlYXNlKCZwZGV2LT5kZXYsICZ1ZGMtPmdhZGdl dCwKLQkJCW9tYXBfdWRjX3JlbGVhc2UpOwotCWlmICghc3RhdHVzKQotCQlyZXR1cm4gMDsKLQot CXJlbW92ZV9wcm9jX2ZpbGUoKTsKKwlyZXR1cm4gdXNiX2FkZF9nYWRnZXRfdWRjX3JlbGVhc2Uo JnBkZXYtPmRldiwgJnVkYy0+Z2FkZ2V0LAorCQkJCQkgIG9tYXBfdWRjX3JlbGVhc2UpOwogCiBj bGVhbnVwMToKIAlrZnJlZSh1ZGMpOwpAQCAtMjkzMiwzNiArMjk0MSwxNSBAQCBzdGF0aWMgaW50 IG9tYXBfdWRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCURFQ0xB UkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOwogCi0JaWYgKCF1ZGMpCi0JCXJldHVybiAtRU5P REVWOwotCi0JdXNiX2RlbF9nYWRnZXRfdWRjKCZ1ZGMtPmdhZGdldCk7Ci0JaWYgKHVkYy0+ZHJp dmVyKQotCQlyZXR1cm4gLUVCVVNZOwotCiAJdWRjLT5kb25lID0gJmRvbmU7CiAKLQlwdWxsdXBf ZGlzYWJsZSh1ZGMpOwotCWlmICghSVNfRVJSX09SX05VTEwodWRjLT50cmFuc2NlaXZlcikpIHsK LQkJdXNiX3B1dF9waHkodWRjLT50cmFuc2NlaXZlcik7Ci0JCXVkYy0+dHJhbnNjZWl2ZXIgPSBO VUxMOwotCX0KLQlvbWFwX3dyaXRldygwLCBVRENfU1lTQ09OMSk7Ci0KLQlyZW1vdmVfcHJvY19m aWxlKCk7CisJdXNiX2RlbF9nYWRnZXRfdWRjKCZ1ZGMtPmdhZGdldCk7CiAKLQlpZiAodWRjLT5k Y19jbGspIHsKLQkJaWYgKHVkYy0+Y2xrX3JlcXVlc3RlZCkKLQkJCW9tYXBfdWRjX2VuYWJsZV9j bG9jaygwKTsKLQkJY2xrX3B1dCh1ZGMtPmhoY19jbGspOwotCQljbGtfcHV0KHVkYy0+ZGNfY2xr KTsKLQl9CisJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7CiAKIAlyZWxlYXNlX21lbV9yZWdp b24ocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCiAJCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBw ZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEpOwogCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmZG9u ZSk7Ci0KIAlyZXR1cm4gMDsKIH0KIAo=