Received: by 2002:a25:5b86:0:0:0:0:0 with SMTP id p128csp339036ybb; Thu, 28 Mar 2019 03:41:43 -0700 (PDT) X-Google-Smtp-Source: APXvYqylm3p2/f4D6Dq/nOd8SpDy2DruQRTG6OUj5o4KM6FEzlr1gPrI/sEVdQtlVwV4cEOz9PCe X-Received: by 2002:a63:707:: with SMTP id 7mr17927791pgh.390.1553769703588; Thu, 28 Mar 2019 03:41:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553769703; cv=none; d=google.com; s=arc-20160816; b=hCUiKJliZka7pgqVJIegMF5KL7dq5WwrIvhVZZ4WVD7rXcBxiFw1vv0xP1MkbSx8we pDUigYogZJtb+O4aZUPURj07bGuQb8oMLodYao2OLU1NUg7Skt507MDKI7mGtoxp2x1h HRmmtVAwiUG0pQ7J9QcIZgm4QP+1m6Z3V25Qb7P2noQSkBGyYNDYAyIXrEfSWoCY6zV0 XhJdLIk0BTQA2PMh9NRlDsO7VPHo/I8070SF1/e6qEveD+doR0XmZrQdctKpH4LJakYy oB/8lDIfJxYZM2uXiMhX1SlCjxSMHMsUMcqWFfcXLRpw0EPhHKh8CZ11faYbvZr5D+/T +LxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:to:subject:dmarc-filter:dkim-signature :dkim-signature; bh=FgAYyqG4sAsD8fC2x6wisksI8DMc5FbBlh/gGauSB+0=; b=CbvMqwIXhhiu3wnDS5hvHwLAhbTiwqaJTqrlbJcC02+z6NdTZw/Ky330q+4AG4S8zr AJg2kLUDc67UDKURhgDaY5TMotHr15ZH/MV4p13vel6XgR0+tH8cXBai1+is9iHoGBFV pOeTSZrQlN+iaXqfx9E5jlgy5L895YmHh8SfGZs/WWT0n9FyRcteSFbtmcMAUZC4mfjY KCZ1NaXPbTjXku40y/kiuiO6WNy+4FaThQauQQmGE3hTor5josDRUKCN7dfRMT14aJe9 8e099TbCGHASHaH/WelfcL7+kMOD5dHvKE+rXfiNTvo3dcm1MauceUVoB5/kJS7Wb+Fm JiPA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b="mIs/fIOB"; dkim=pass header.i=@codeaurora.org header.s=default header.b=frBkZH4v; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r17si19868901pgv.328.2019.03.28.03.41.27; Thu, 28 Mar 2019 03:41:43 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b="mIs/fIOB"; dkim=pass header.i=@codeaurora.org header.s=default header.b=frBkZH4v; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726394AbfC1KjN (ORCPT + 99 others); Thu, 28 Mar 2019 06:39:13 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:45524 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725815AbfC1KjM (ORCPT ); Thu, 28 Mar 2019 06:39:12 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 9F14A61AC9; Thu, 28 Mar 2019 10:38:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1553769551; bh=I0xBig3THQpYLXzVCwGSwa0RjxmkCishKfa4gu/oidI=; h=Subject:To:References:From:Date:In-Reply-To:From; b=mIs/fIOBB/8Zam2pndPwJiqoHlXqyA+NHKUGgYgFhQVKDc5jrlpIFwzWzW+YFrdDq QQ2ZKm2/RWqmYrcFiQv22KZnTzDn22/7atp6mJYH1u3B7nuEFLwrRl6BcRHbqc2bVP p3DO3v2ziRiB2YX9LAIQJRzvYglGLcni4mIuGZZs= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_INVALID,DKIM_SIGNED autolearn=no autolearn_force=no version=3.4.0 Received: from [10.204.79.83] (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: mojha@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 4658861AAE; Thu, 28 Mar 2019 10:38:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1553769529; bh=I0xBig3THQpYLXzVCwGSwa0RjxmkCishKfa4gu/oidI=; h=Subject:To:References:From:Date:In-Reply-To:From; b=frBkZH4vKTksm6/ryOSSEQupr/YG2J+m35cdiClZyaugKWf7h0/0BI3429y3u/v4H J93KNSGHGusiaAQqc/XLvBf8J5WEZuTTNZMBC9bP32bpgWpSEy4qkaKK+BoMQADPhG aadIrlGqx8R65Z0uViDLD2+Mcj65QsjBRRQ2uu8E= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 4658861AAE Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=mojha@codeaurora.org Subject: Re: Misplaced driver_sysfs_remove in really_probe? To: Jiri Slaby , Greg KH , rafael@kernel.org, Linux kernel mailing list References: <582bf3ba-3733-eb38-cb9c-5b0d329fb068@suse.cz> From: Mukesh Ojha Message-ID: Date: Thu, 28 Mar 2019 16:08:44 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <582bf3ba-3733-eb38-cb9c-5b0d329fb068@suse.cz> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 3/28/2019 3:36 PM, Jiri Slaby wrote: > Hi, > > since commit 1901fb2604fbcd53201f38725182ea807581159e > Author: Kay Sievers > Date: Sat Oct 7 21:55:55 2006 +0200 > > Driver core: fix "driver" symlink timing > > driver_sysfs_remove seems to be misplaced in the fail path of > really_probe. When driver_sysfs_add fails (or anything which is > currently above it in dd.c -- be it pinctrl_bind_pins or > dev->bus->dma_configure), driver_sysfs_remove is called. Given > dev->driver is set, attempt to remove sysfs device and driver links is > performed, but it is supposed to fail, as the links do not exist yet. > > I am dealing with a Syzkaller WARNING from SLE15-SP1 (4.12) which > corresponds to the described scenario. Perhaps Syzkaller fault-injected > a kzalloc failure to pinctrl_bind_pins as I cannot reproduce the report > at all: >> WARNING: CPU: 1 PID: 2091 at ../fs/kernfs/dir.c:1481 > kernfs_remove_by_name_ns+0xfa/0x120 fs/kernfs/dir.c:1480 >> Supported: No, Unreleased kernel >> CPU: 1 PID: 2091 Comm: systemd-udevd Not tainted 4.12.14-396-default > #1 SLE15-SP1 (unreleased) >> Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS > rel-1.12.0-0-ga698c89-prebuilt.qemu.org 04/01/2014 >> task: ffff880053794fc0 task.stack: ffff880040ea0000 >> RIP: 0010:kernfs_remove_by_name_ns+0xfa/0x120 fs/kernfs/dir.c:1480 >> RSP: 0018:ffff880040ea7488 EFLAGS: 00010282 >> RAX: 000000000000002d RBX: 0000000000000000 RCX: 0000000000000000 >> RDX: 000000000000002d RSI: 1ffff100081d4e48 RDI: ffffed00081d4e85 >> RBP: ffffffffa772a380 R08: 0000000000000000 R09: 0000000000000000 >> R10: ffffffffaa1872c4 R11: 0000000000000000 R12: 0000000000000000 >> R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000037 >> FS: 00007f0d24dc0f80(0000) GS:ffff88005e080000(0000) > knlGS:0000000000000000 >> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 >> CR2: 000000000045c061 CR3: 000000003b878006 CR4: 0000000000060ee0 >> Call Trace: >> driver_sysfs_remove+0xb0/0x110 drivers/base/dd.c:290 >> really_probe drivers/base/dd.c:433 [inline] >> driver_probe_device+0x2b3/0x1200 drivers/base/dd.c:530 >> __driver_attach+0x1dc/0x280 drivers/base/dd.c:763 >> bus_for_each_dev+0x146/0x1e0 drivers/base/bus.c:316 >> bus_add_driver+0x40f/0x850 drivers/base/bus.c:710 >> driver_register+0x1c9/0x410 drivers/base/driver.c:168 >> __hid_register_driver+0x1e0/0x2d0 drivers/hid/hid-core.c:2974 >> ? 0xffffffffc1510000 >> do_one_initcall+0xb7/0x300 init/main.c:808 >> do_init_module+0x23e/0x641 kernel/module.c:3515 >> load_module+0x47d6/0x60b0 kernel/module.c:3867 >> SYSC_finit_module+0x239/0x2a0 kernel/module.c:3980 >> do_syscall_64+0x26c/0x6e0 arch/x86/entry/common.c:284 >> entry_SYSCALL_64_after_hwframe+0x3d/0xa2 > I believe it survived from 2.6.20 to the current tree. > > Does it look correct to you? This should help IMO and if you agree I > will send a proper patch: > --- a/drivers/base/dd.c > +++ b/drivers/base/dd.c > @@ -496,7 +496,7 @@ static int really_probe(struct device *dev, struct > device_driver *drv) > if (driver_sysfs_add(dev)) { > printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n", > __func__, dev_name(dev)); > - goto probe_failed; > + goto sysfs_failed; > } > > if (dev->pm_domain && dev->pm_domain->activate) { > @@ -546,6 +546,8 @@ static int really_probe(struct device *dev, struct > device_driver *drv) > goto done; > > probe_failed: > + driver_sysfs_remove(dev); > +sysfs_failed: > arch_teardown_dma_ops(dev); > dma_failed: > if (dev->bus) > @@ -554,7 +556,6 @@ static int really_probe(struct device *dev, struct > device_driver *drv) > pinctrl_bind_failed: > device_links_no_driver(dev); > devres_release_all(dev); > - driver_sysfs_remove(dev); > dev->driver = NULL; > dev_set_drvdata(dev, NULL); > if (dev->pm_domain && dev->pm_domain->dismiss) Nice observation. Please send a proper patch. Cheers, Mukesh > > > > > thanks,