Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp824358pxb; Tue, 9 Feb 2021 13:33:22 -0800 (PST) X-Google-Smtp-Source: ABdhPJw1Cxt0pPPRRTzKdctbbZDSXPKTx0mbhB1sU89FI7ywnMgukgmS3cwd1kkpchsc0PbVp0KM X-Received: by 2002:a17:906:7b8d:: with SMTP id s13mr24365119ejo.479.1612906402316; Tue, 09 Feb 2021 13:33:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612906402; cv=none; d=google.com; s=arc-20160816; b=MHGaBz2mpK93DMm82ymk+yR+G/R00kvYfpKb1l9iW0qQj1d7C1isXULPgn+yb81Hkw +Zh+OhIeRVUyJ4GVNRJM3j4FJ4ZbOFoqFeBLXbGRqUHkRqxGZC2IyHQDOjX2vdm2zfwD HpqRjzo7/r2M2YxqwyaCycXqdAnCFOiJnppvfYNtBwU07F3jRurdLuYZKw49vTZaq0lc AepUHB+Urnn0Bq78eKZ+RpMK2RPDNmS7DikE47fzEUSGDmx00a3L/AzsFyLa7VYIn1i8 oYzbd88ehi+ScsSGMzxa+tzD6Loa2wSkedU6MDjYHPVMrSZNVounGdsMOL2h4lP/Vuwi OKgA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:message-id:date:cc:to:from:subject:ironport-sdr :ironport-sdr; bh=yT9ZxSQjgkDxSApLkOTGke39WLav5vLYo2ViGHzi1+s=; b=NPwfipgmnK5gymtXx/OzRxLk3jN1i4KhDNV+O+eVrFeWl4p3u1ZWr/2YWhu6nkzM2/ 9OsxHSTynCACBiQSs890MuOitBWY5OsCMR8+bV2ycrwcW3dqGHiUi3iNlzPt8u16Zazg 8YOvSRkYbfonItRsiMzRmsih/aygQh/xcZEg/Ta7M+tsywDc1p339a1yrZNtNiJegAmo bEwp+rODmt8HLmux6uB3QvUTByhjYRKD1tP2sEGM6gS1H3ObZFHW9+9G47hwulHod2zc dUZKcQiiljhan56ql4ILx5ODj4LkYrmPWkM8BchRxAQmON+wCb1ApzbJKxMbRfSvTUMQ TxJQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d1si10096703edj.181.2021.02.09.13.32.58; Tue, 09 Feb 2021 13:33:22 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234010AbhBIV2c (ORCPT + 99 others); Tue, 9 Feb 2021 16:28:32 -0500 Received: from mga11.intel.com ([192.55.52.93]:49322 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233202AbhBITGH (ORCPT ); Tue, 9 Feb 2021 14:06:07 -0500 IronPort-SDR: Tgp4A/EPCuWdcwkF762NuL50Df/SUEbmtudDXBboCWH3SZvi/yy/Sch9u3/4sFPl0hLK8C5Jgt 0DYyjQH24DHg== X-IronPort-AV: E=McAfee;i="6000,8403,9890"; a="178433429" X-IronPort-AV: E=Sophos;i="5.81,166,1610438400"; d="scan'208";a="178433429" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2021 11:05:07 -0800 IronPort-SDR: CryAP8+aLNkwQ0BPNrPMQSZO3FeRakfSZp3fnI2qnaZHhRHychXZBVNZiBv3ip600LcUgvr7Rg uZOTOzOaEKww== X-IronPort-AV: E=Sophos;i="5.81,166,1610438400"; d="scan'208";a="396351841" Received: from djiang5-desk3.ch.intel.com ([143.182.136.137]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2021 11:05:06 -0800 Subject: [PATCH] driver core: auxiliary bus: Fix calling stage for auxiliary bus init From: Dave Jiang To: gregkh@linuxfoundation.org Cc: Jacob Pan , Dave Ertman , Dan Williams , rafael@kernel.org, linux-kernel@vger.kernel.org Date: Tue, 09 Feb 2021 12:05:05 -0700 Message-ID: <161289750572.1086235.9903492973331406876.stgit@djiang5-desk3.ch.intel.com> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When the auxiliary device code is built into the kernel, it can be executed before the auxiliary bus is registered. This causes bus->p to be not allocated and triggers a NULL pointer dereference when the auxiliary bus device gets added with bus_add_device(). Change the init of auxiliary bus to subsys_initcall() from module_init() to ensure the bus is registered before devices. Below is the kernel splat for the bug: [ 1.948215] BUG: kernel NULL pointer dereference, address: 0000000000000060 [ 1.950670] #PF: supervisor read access in kernel mode [ 1.950670] #PF: error_code(0x0000) - not-present page [ 1.950670] PGD 0 [ 1.950670] Oops: 0000 1 SMP NOPTI [ 1.950670] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.10.0-intel-nextsvmtest+ #2205 [ 1.950670] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014 [ 1.950670] RIP: 0010:bus_add_device+0x64/0x140 [ 1.950670] Code: 00 49 8b 75 20 48 89 df e8 59 a1 ff ff 41 89 c4 85 c0 75 7b 48 8b 53 50 48 85 d2 75 03 48 8b 13 49 8b 85 a0 00 00 00 48 89 de <48> 8 78 60 48 83 c7 18 e8 ef d9 a9 ff 41 89 c4 85 c0 75 45 48 8b [ 1.950670] RSP: 0000:ff46032ac001baf8 EFLAGS: 00010246 [ 1.950670] RAX: 0000000000000000 RBX: ff4597f7414aa680 RCX: 0000000000000000 [ 1.950670] RDX: ff4597f74142bbc0 RSI: ff4597f7414aa680 RDI: ff4597f7414aa680 [ 1.950670] RBP: ff46032ac001bb10 R08: 0000000000000044 R09: 0000000000000228 [ 1.950670] R10: ff4597f741141b30 R11: ff4597f740182a90 R12: 0000000000000000 [ 1.950670] R13: ffffffffa5e936c0 R14: 0000000000000000 R15: 0000000000000000 [ 1.950670] FS: 0000000000000000(0000) GS:ff4597f7bba00000(0000) knlGS:0000000000000000 [ 1.950670] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.950670] CR2: 0000000000000060 CR3: 000000002140c001 CR4: 0000000000f71ef0 [ 1.950670] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.950670] DR3: 0000000000000000 DR6: 00000000fffe07f0 DR7: 0000000000000400 [ 1.950670] PKRU: 55555554 [ 1.950670] Call Trace: [ 1.950670] device_add+0x3ee/0x850 [ 1.950670] __auxiliary_device_add+0x47/0x60 [ 1.950670] idxd_pci_probe+0xf77/0x1180 [ 1.950670] local_pci_probe+0x4a/0x90 [ 1.950670] pci_device_probe+0xff/0x1b0 [ 1.950670] really_probe+0x1cf/0x440 [ 1.950670] ? rdinit_setup+0x31/0x31 [ 1.950670] driver_probe_device+0xe8/0x150 [ 1.950670] device_driver_attach+0x58/0x60 [ 1.950670] __driver_attach+0x8f/0x150 [ 1.950670] ? device_driver_attach+0x60/0x60 [ 1.950670] ? device_driver_attach+0x60/0x60 [ 1.950670] bus_for_each_dev+0x79/0xc0 [ 1.950670] ? kmem_cache_alloc_trace+0x323/0x430 [ 1.950670] driver_attach+0x1e/0x20 [ 1.950670] bus_add_driver+0x154/0x1f0 [ 1.950670] driver_register+0x70/0xc0 [ 1.950670] __pci_register_driver+0x54/0x60 [ 1.950670] idxd_init_module+0xe2/0xfc [ 1.950670] ? idma64_platform_driver_init+0x19/0x19 [ 1.950670] do_one_initcall+0x4a/0x1e0 [ 1.950670] kernel_init_freeable+0x1fc/0x25c [ 1.950670] ? rest_init+0xba/0xba [ 1.950670] kernel_init+0xe/0x116 [ 1.950670] ret_from_fork+0x1f/0x30 [ 1.950670] Modules linked in: [ 1.950670] CR2: 0000000000000060 [ 1.950670] --[ end trace cd7d1b226d3ca901 ]-- Fixes: 7de3697e9cbd ("Add auxiliary bus support") Reported-by: Jacob Pan Acked-by: Dave Ertman Reviewed-by: Dan Williams Signed-off-by: Dave Jiang --- drivers/base/auxiliary.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/base/auxiliary.c b/drivers/base/auxiliary.c index 8336535f1e11..53f93a506626 100644 --- a/drivers/base/auxiliary.c +++ b/drivers/base/auxiliary.c @@ -270,7 +270,7 @@ static void __exit auxiliary_bus_exit(void) bus_unregister(&auxiliary_bus_type); } -module_init(auxiliary_bus_init); +subsys_initcall(auxiliary_bus_init); module_exit(auxiliary_bus_exit); MODULE_LICENSE("GPL v2");