Received: by 2002:ac0:8bc7:0:0:0:0:0 with SMTP id o7csp69189ima; Wed, 6 Feb 2019 21:14:16 -0800 (PST) X-Google-Smtp-Source: AHgI3IY6GgpjvRR+h/QmBGGiNotvuWncE54uGLw0HPOrqT+CiZFny/kIU+KYM7PxXYp5WsjP2TxA X-Received: by 2002:a62:9657:: with SMTP id c84mr14676944pfe.77.1549516456486; Wed, 06 Feb 2019 21:14:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549516456; cv=none; d=google.com; s=arc-20160816; b=hViDgB2Ph3ZOP0nnvEMqYIew82iskFIiBI82Sss4l2WZwQVrWl64KJXRYUb3kiqcTr Ywsi8/soJrhqvX1cU1qcq/cys93drOf/VeOjdfYLvpqzggN40gzloWPpzD+YbaSd268x 2OSOY9O599yG07Z0QZ4d5nwTkLkuRbtsmvoL8ioUeR5jFp7pctLLX0WFOpc1IkNOKB5q YeLXKP9ocOsqd1U1EPELavJ1Ag+CT3fW2oeKRNOVomiL0r+BVd2G/VdhOqvhL8sLhtxG nxTpqdOUjQyUIVjY+JvzStCu28CLZwihPB8ojp3qQH8P0nOcxueHmCRHSZaMMvPzvBJn qBww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=CtpIN6K6IIawtC+8r9TEhLUPk3h7uPJ/QqHwsa9m2vM=; b=deiF+r4kLtAEOGjgqFC5U4aUA/jjzpi7s9JlwMaLU0dhKhDNWBr/DIWDQqlsryGVt7 Fo/PpANWJIrqu728ESovs+wiZq7nSAZNtwTHnQhqT/WQDGSJIpqEpfyAv8xbxuMVvd1J uBk+M9PlXSWP6pUAmvPJCptS3Px4GDABA/BB0Z2YjMNioEtyGi+8v3qc5ih34sr+HaSg iicyRLVeZpP+qtGzbTKWgJ/FXPtavXEvgkvDTDh8v9NXQjOLdvE/sQXTvZr2ZiQQjAEn +FNK6rSNFJiFcyKp7C9YiN8n+966m9dUgtQ8jtVLja2m7qbxzSzY/gn8E0xh+/XMlnl1 9iUg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=ptpnus77; 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 c6si7729816plr.414.2019.02.06.21.13.58; Wed, 06 Feb 2019 21:14:16 -0800 (PST) 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=fail header.i=@gmail.com header.s=20161025 header.b=ptpnus77; 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 S1726499AbfBGFNy (ORCPT + 99 others); Thu, 7 Feb 2019 00:13:54 -0500 Received: from mail-pf1-f195.google.com ([209.85.210.195]:40756 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725910AbfBGFNy (ORCPT ); Thu, 7 Feb 2019 00:13:54 -0500 Received: by mail-pf1-f195.google.com with SMTP id i12so4252955pfo.7 for ; Wed, 06 Feb 2019 21:13:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=CtpIN6K6IIawtC+8r9TEhLUPk3h7uPJ/QqHwsa9m2vM=; b=ptpnus77A6dmFoclgOAifM1nMBTSMPkAhLqEgHhIE7yY6Exo/+gfk17NwGDMVoT6J1 UiKz3ffQK9rab8DGb45Xp44pA+PLmd7DGFGfrHyO4FRt84KaY5QCahSUh0KmHzOdH3NZ 28q0/A2WRH4ibh75z0sjJj6A6ByrW7AwNEd8fLGJN+bfdkfgSNi7xMH8L9uE+N/qIBuj 0RJgWjW+SSg3lKXEQWPZMbYPzQ1vPgwWsYzzynFnoHNxbCz9CXMgc4qNECHe8ugNJWjn e5A0rOHrBNf13LfVacZKx2NKcMGZ0wxDoh34y0TssbJczBIQ3btGaLkUiTgtavc88zJw q02Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=CtpIN6K6IIawtC+8r9TEhLUPk3h7uPJ/QqHwsa9m2vM=; b=uLVlVSg32WNQZjTc1+2ZeuP+KB8i6q54CMaAsg1IG1tbnBaJGZr26EyQevVKt0PTJe kCFh1N2+dBzea/2PgobFLC0BVZ79/+zAj45sPNmAdlRUd+2+HyIYJzpr1kc1BkRPGvNY i3CbaAefNAaNRM/HGd7VyesW9sjqJmyJVge5bbCLKxAfL37lFFqEKji6rqU0kYDifec1 ykejdvNvbhRi9LJaVbAZzCAYvUJbDZ5XkUMHXqRAzCxUXXGL1aTGOs4XyKUhBeEWangl uGID7qEdNEFf+QlM8rKLlriYTx3y7VIRRosxojIXpg0uhzlJ83ddDbNXIBCk1JXxQMNI fhxA== X-Gm-Message-State: AHQUAuZP9VtfUl7vlisTiUZF60qBkrB9T4kQfC1QzY2SH6+Wb2nSkp9j KssprdeN2JJtG+tQHFWBTv64tn9Z X-Received: by 2002:a65:63d3:: with SMTP id n19mr13337373pgv.179.1549516433457; Wed, 06 Feb 2019 21:13:53 -0800 (PST) Received: from localhost ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id 15sm12265039pfr.55.2019.02.06.21.13.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 06 Feb 2019 21:13:52 -0800 (PST) From: Guenter Roeck To: Jens Axboe Cc: linux-kernel@vger.kernel.org, Guenter Roeck Subject: [PATCH] cdrom: Fix race condition in cdrom_sysctl_register Date: Wed, 6 Feb 2019 21:13:49 -0800 Message-Id: <1549516429-6542-1-git-send-email-linux@roeck-us.net> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following traceback is sometimes seen when booting an image in qemu: [ 54.608293] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 54.611085] Fusion MPT base driver 3.04.20 [ 54.611877] Copyright (c) 1999-2008 LSI Corporation [ 54.616234] Fusion MPT SAS Host driver 3.04.20 [ 54.635139] sysctl duplicate entry: /dev/cdrom//info [ 54.639578] CPU: 0 PID: 266 Comm: kworker/u4:5 Not tainted 5.0.0-rc5 #1 [ 54.639578] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 [ 54.641273] Workqueue: events_unbound async_run_entry_fn [ 54.641273] Call Trace: [ 54.641273] dump_stack+0x67/0x90 [ 54.641273] __register_sysctl_table+0x50b/0x570 [ 54.641273] ? rcu_read_lock_sched_held+0x6f/0x80 [ 54.641273] ? kmem_cache_alloc_trace+0x1c7/0x1f0 [ 54.646814] __register_sysctl_paths+0x1c8/0x1f0 [ 54.646814] cdrom_sysctl_register.part.7+0xc/0x5f [ 54.646814] register_cdrom.cold.24+0x2a/0x33 [ 54.646814] sr_probe+0x4bd/0x580 [ 54.646814] ? __driver_attach+0xd0/0xd0 [ 54.646814] really_probe+0xd6/0x260 [ 54.646814] ? __driver_attach+0xd0/0xd0 [ 54.646814] driver_probe_device+0x4a/0xb0 [ 54.646814] ? __driver_attach+0xd0/0xd0 [ 54.646814] bus_for_each_drv+0x73/0xc0 [ 54.646814] __device_attach+0xd6/0x130 [ 54.646814] bus_probe_device+0x9a/0xb0 [ 54.646814] device_add+0x40c/0x670 [ 54.646814] ? __pm_runtime_resume+0x4f/0x80 [ 54.646814] scsi_sysfs_add_sdev+0x81/0x290 [ 54.646814] scsi_probe_and_add_lun+0x888/0xc00 [ 54.646814] ? scsi_autopm_get_host+0x21/0x40 [ 54.646814] __scsi_add_device+0x116/0x130 [ 54.646814] ata_scsi_scan_host+0x93/0x1c0 [ 54.646814] async_run_entry_fn+0x34/0x100 [ 54.646814] process_one_work+0x237/0x5e0 [ 54.646814] worker_thread+0x37/0x380 [ 54.646814] ? rescuer_thread+0x360/0x360 [ 54.646814] kthread+0x118/0x130 [ 54.646814] ? kthread_create_on_node+0x60/0x60 [ 54.646814] ret_from_fork+0x3a/0x50 The only sensible explanation is that cdrom_sysctl_register() is called twice, once from the module init function and once from register_cdrom(). cdrom_sysctl_register() is not mutex protected and may happily execute twice if the second call is made before the first call is complete. Use a static atomic to ensure that the function is executed exactly once. Signed-off-by: Guenter Roeck --- drivers/cdrom/cdrom.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index 614ecdbb4ab7..933268b8d6a5 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c @@ -265,6 +265,7 @@ /* #define ERRLOGMASK (CD_WARNING|CD_OPEN|CD_COUNT_TRACKS|CD_CLOSE) */ /* #define ERRLOGMASK (CD_WARNING|CD_REG_UNREG|CD_DO_IOCTL|CD_OPEN|CD_CLOSE|CD_COUNT_TRACKS) */ +#include #include #include #include @@ -3692,9 +3693,9 @@ static struct ctl_table_header *cdrom_sysctl_header; static void cdrom_sysctl_register(void) { - static int initialized; + static atomic_t initialized = ATOMIC_INIT(0); - if (initialized == 1) + if (!atomic_add_unless(&initialized, 1, 1)) return; cdrom_sysctl_header = register_sysctl_table(cdrom_root_table); @@ -3705,8 +3706,6 @@ static void cdrom_sysctl_register(void) cdrom_sysctl_settings.debug = debug; cdrom_sysctl_settings.lock = lockdoor; cdrom_sysctl_settings.check = check_media_type; - - initialized = 1; } static void cdrom_sysctl_unregister(void) -- 2.7.4