lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Tue,  2 Sep 2014 17:58:17 -0400
From:	Prarit Bhargava <prarit@...hat.com>
To:	linux-kernel@...r.kernel.org
Cc:	Prarit Bhargava <prarit@...hat.com>,
	Peter Tyser <ptyser@...-inc.com>,
	Samuel Ortiz <sameo@...ux.intel.com>,
	Lee Jones <lee.jones@...aro.org>
Subject: [PATCH] x86, lpc, Allow only one load of lpc_ich

On multi-socket systems the following confusing splats are seen:

 ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
 lpc_ich: Resource conflict(s) found affecting gpio_ich
 ------------[ cut here ]------------
 WARNING: CPU: 7 PID: 1813 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x64/0x80()
 sysfs: cannot create duplicate filename '/bus/platform/devices/iTCO_wdt'
 Modules linked in: lpc_ich(+) crc32c_intel shpchp mfd_core acpi_cpufreq i2c_i801 dca xfs libcrc32c sd_mod crc_t10dif crct10dif_common ata_generic pata_acpi mgag200 syscopyarea sysfillrect sysimgblt i2c_algo_bit drm_kms_helper ttm mptsas drm scsi_transport_sas ata_piix mptscsih i2ccore libata mptbase dm_mirror dm_region_hash dm_log dm_mod
 CPU: 7 PID: 1813 Comm: systemd-udevd Not tainted 3.17.0-rc3+ #1
 Hardware name: IBM System x3950 M3 -[7145AC1]-/Node 1, Processor Card, BIOS -[G0E130WUS-1.31]- 07/23/2010
  0000000000000000 00000000f205abcf ffff88066bb7b8d0 ffffffff81647056
  ffff88066bb7b918 ffff88066bb7b908 ffffffff81072c9d ffff880273d05000
  ffff88027349d110 ffff880874c5cc30 0000000000000001 ffffffffffffffef
 Call Trace:
  [<ffffffff81647056>] dump_stack+0x45/0x56
  [<ffffffff81072c9d>] warn_slowpath_common+0x7d/0xa0
  [<ffffffff81072d1c>] warn_slowpath_fmt+0x5c/0x80
  [<ffffffff81256598>] ? kernfs_path+0x48/0x60
  [<ffffffff81259e34>] sysfs_warn_dup+0x64/0x80
  [<ffffffff8125a1b1>] sysfs_do_create_link_sd.isra.2+0xc1/0xd0
  [<ffffffff8125a1e5>] sysfs_create_link+0x25/0x50
  [<ffffffff81401689>] bus_add_device+0x119/0x200
  [<ffffffff813ff4b8>] device_add+0x498/0x630
  [<ffffffff810778f6>] ? __insert_resource+0x26/0x150
  [<ffffffff81404391>] platform_device_add+0xd1/0x2d0
  [<ffffffffa050b3f5>] mfd_add_device+0x285/0x320 [mfd_core]
  [<ffffffffa050b705>] mfd_add_devices+0xb5/0x9b0 [mfd_core]
  [<ffffffffa0abf55b>] lpc_ich_probe+0x3cb/0x600 [lpc_ich]
  [<ffffffff8132eb55>] local_pci_probe+0x45/0xa0
  [<ffffffff8132fd45>] ? pci_match_device+0xe5/0x110
  [<ffffffff8132fea9>] pci_device_probe+0xf9/0x150
  [<ffffffff814024b0>] driver_probe_device+0x90/0x3c0
  [<ffffffff814028b3>] __driver_attach+0x93/0xa0
  [<ffffffff81402820>] ? __device_attach+0x40/0x40
  [<ffffffff814003f3>] bus_for_each_dev+0x73/0xc0
  [<ffffffff81401f4e>] driver_attach+0x1e/0x20
  [<ffffffff81401b30>] bus_add_driver+0x180/0x250
  [<ffffffffa0acb000>] ? 0xffffffffa0acb000
  [<ffffffff81403094>] driver_register+0x64/0xf0
  [<ffffffff8132e4ec>] __pci_register_driver+0x4c/0x50
  [<ffffffffa0acb01e>] lpc_ich_driver_init+0x1e/0x1000 [lpc_ich]
  [<ffffffff81002144>] do_one_initcall+0xd4/0x210
  [<ffffffff811c2fed>] ? kfree+0xfd/0x140
  [<ffffffff811a8b42>] ? __vunmap+0xb2/0x100
  [<ffffffff810f2839>] load_module+0x1619/0x1a70
  [<ffffffff810edde0>] ? store_uevent+0x70/0x70
  [<ffffffff810eea39>] ? copy_module_from_fd.isra.44+0x129/0x180
  [<ffffffff810f2e46>] SyS_finit_module+0xa6/0xd0
  [<ffffffff8164f069>] system_call_fastpath+0x16/0x1b
 ---[ end trace 1429eb73c1995841 ]---
 ------------[ cut here ]------------
 WARNING: CPU: 71 PID: 1813 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x64/0x80()
 sysfs: cannot create duplicate filename '/bus/platform/devices/gpio_ich'
 Modules linked in: serio_raw lpc_ich(+) crc32c_intel shpchp mfd_core acpi_cpufreq i2c_i801 dca xfs libcrc32c sd_mod crc_t10dif crct10dif_common ata_generic pata_acpi mgag200 syscopyarea sysfillrect sysimgblt i2c_algo_bit drm_kms_helper ttm mptsas drm scsi_transport_sas ata_piix mptscsih i2ccore libata mptbase dm_mirror dm_region_hash dm_log dm_mod
 CPU: 71 PID: 1813 Comm: systemd-udevd Tainted: G        W      3.17.0-rc3+ #1
 Hardware name: IBM System x3950 M3 -[7145AC1]-/Node 1, Processor Card, BIOS -[G0E130WUS-1.31]- 07/23/2010
  0000000000000000 00000000f205abcf ffff88066bb7b8d0 ffffffff81647056
  ffff88066bb7b918 ffff88066bb7b908 ffffffff81072c9d ffff88027382d000
  ffff880273640030 ffff880874c5cc30 0000000000000001 ffffffffffffffef
 Call Trace:
  [<ffffffff81647056>] dump_stack+0x45/0x56
  [<ffffffff81072c9d>] warn_slowpath_common+0x7d/0xa0
  [<ffffffff81072d1c>] warn_slowpath_fmt+0x5c/0x80
  [<ffffffff81256598>] ? kernfs_path+0x48/0x60
  [<ffffffff81259e34>] sysfs_warn_dup+0x64/0x80
  [<ffffffff8125a1b1>] sysfs_do_create_link_sd.isra.2+0xc1/0xd0
  [<ffffffff8125a1e5>] sysfs_create_link+0x25/0x50
  [<ffffffff81401689>] bus_add_device+0x119/0x200
  [<ffffffff813ff4b8>] device_add+0x498/0x630
  [<ffffffff810778f6>] ? __insert_resource+0x26/0x150
  [<ffffffff81404391>] platform_device_add+0xd1/0x2d0
  [<ffffffffa050b3f5>] mfd_add_device+0x285/0x320 [mfd_core]
  [<ffffffffa050b705>] mfd_add_devices+0xb5/0x9b0 [mfd_core]
  [<ffffffffa0abf464>] lpc_ich_probe+0x2d4/0x600 [lpc_ich]
  [<ffffffff8132eb55>] local_pci_probe+0x45/0xa0
  [<ffffffff8132fd45>] ? pci_match_device+0xe5/0x110
  [<ffffffff8132fea9>] pci_device_probe+0xf9/0x150
  [<ffffffff814024b0>] driver_probe_device+0x90/0x3c0
  [<ffffffff814028b3>] __driver_attach+0x93/0xa0
  [<ffffffff81402820>] ? __device_attach+0x40/0x40
  [<ffffffff814003f3>] bus_for_each_dev+0x73/0xc0
  [<ffffffff81401f4e>] driver_attach+0x1e/0x20
  [<ffffffff81401b30>] bus_add_driver+0x180/0x250
  [<ffffffffa0acb000>] ? 0xffffffffa0acb000
  [<ffffffff81403094>] driver_register+0x64/0xf0
  [<ffffffff8132e4ec>] __pci_register_driver+0x4c/0x50
  [<ffffffffa0acb01e>] lpc_ich_driver_init+0x1e/0x1000 [lpc_ich]
  [<ffffffff81002144>] do_one_initcall+0xd4/0x210
  [<ffffffff811c2fed>] ? kfree+0xfd/0x140
  [<ffffffff811a8b42>] ? __vunmap+0xb2/0x100
  [<ffffffff810f2839>] load_module+0x1619/0x1a70
  [<ffffffff810edde0>] ? store_uevent+0x70/0x70
  [<ffffffff810eea39>] ? copy_module_from_fd.isra.44+0x129/0x180
  [<ffffffff810f2e46>] SyS_finit_module+0xa6/0xd0
  [<ffffffff8164f069>] system_call_fastpath+0x16/0x1b
 ---[ end trace 1429eb73c1995842 ]---
 lpc_ich 0000:80:1f.0: No MFD cells added

This occurs because there are two LPC devices on the system:

00:1f.0 ISA bridge: Intel Corporation 82801JIB (ICH10) LPC Interface Controller
80:1f.0 ISA bridge: Intel Corporation 82801JIB (ICH10) LPC Interface Controller

which AFAICT is a hardware configuration error that can be resolved in
firmware by hiding the second LPC device.  Having two of these results in
two GPIO mappings and two Watchdog Timers which doesn't make much sense.

An end user has no idea what the splats mean.  We should inform the user that
the issue lies with the hardware and that they should contact their vendor
for resolution.

After the patch, the following warning is displayed:

 lpc_ich 0000:80:1f.0: [Firmware Bug]: This system has two LPC devices.  Additional driver loads would result in multiple GPIO and Watchdog Devices being initialized.  Please report this problem to your hardware vendor.

Cc: Peter Tyser <ptyser@...-inc.com>
Cc: Samuel Ortiz <sameo@...ux.intel.com>
Cc: Lee Jones <lee.jones@...aro.org>
Signed-off-by: Prarit Bhargava <prarit@...hat.com>
---
 drivers/mfd/lpc_ich.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/mfd/lpc_ich.c b/drivers/mfd/lpc_ich.c
index 7d8482f..eba66bc 100644
--- a/drivers/mfd/lpc_ich.c
+++ b/drivers/mfd/lpc_ich.c
@@ -998,12 +998,17 @@ wdt_done:
 	return ret;
 }
 
+static bool cell_added;
 static int lpc_ich_probe(struct pci_dev *dev,
 				const struct pci_device_id *id)
 {
 	struct lpc_ich_priv *priv;
 	int ret;
-	bool cell_added = false;
+
+	if (cell_added) {
+		dev_warn(&dev->dev, FW_BUG "This system has two LPC devices.  Additional driver loads would result in multiple GPIO and Watchdog Devices being initialized.  Please report this problem to your hardware vendor.\n");
+		return -EBUSY;
+	}
 
 	priv = devm_kzalloc(&dev->dev,
 			    sizeof(struct lpc_ich_priv), GFP_KERNEL);
-- 
1.7.9.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists