All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: stable@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Tonghao Zhang <xiangxia.m.yue@gmail.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH AUTOSEL 4.9 39/48] PCI/MSI: Warn and return error if driver enables MSI/MSI-X twice
Date: Wed, 31 Oct 2018 19:10:45 -0400	[thread overview]
Message-ID: <20181031231054.29333-39-sashal@kernel.org> (raw)
In-Reply-To: <20181031231054.29333-1-sashal@kernel.org>

From: Tonghao Zhang <xiangxia.m.yue@gmail.com>

[ Upstream commit 4c1ef72e9b71a19fb405ebfcd37c0a5e16fa44ca ]

It is a serious driver defect to enable MSI or MSI-X more than once.  Doing
so may panic the kernel as in the stack trace below:

  Call Trace:
    sysfs_add_one+0xa5/0xd0
    create_dir+0x7c/0xe0
    sysfs_create_subdir+0x1c/0x20
    internal_create_group+0x6d/0x290
    sysfs_create_groups+0x4a/0xa0
    populate_msi_sysfs+0x1cd/0x210
    pci_enable_msix+0x31c/0x3e0
    igbuio_pci_open+0x72/0x300 [igb_uio]
    uio_open+0xcc/0x120 [uio]
    chrdev_open+0xa1/0x1e0
    [...]
    do_sys_open+0xf3/0x1f0
    SyS_open+0x1e/0x20
    system_call_fastpath+0x16/0x1b
    ---[ end trace 11042e2848880209 ]---
    Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: ffffffffa056b4fa

We want to keep the WARN_ON() and stack trace so the driver can be fixed,
but we can avoid the kernel panic by returning an error.  We may still get
warnings like this:

  Call Trace:
    pci_enable_msix+0x3c9/0x3e0
    igbuio_pci_open+0x72/0x300 [igb_uio]
    uio_open+0xcc/0x120 [uio]
    chrdev_open+0xa1/0x1e0
    [...]
    do_sys_open+0xf3/0x1f0
    SyS_open+0x1e/0x20
    system_call_fastpath+0x16/0x1b
    ------------[ cut here ]------------
    WARNING: at fs/sysfs/dir.c:526 sysfs_add_one+0xa5/0xd0()
    sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:03.0/0000:01:00.1/msi_irqs'

Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
[bhelgaas: changelog, fix patch whitespace, remove !!]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/pci/msi.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index 0e9a9dbeb184..37f393f27efc 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -981,7 +981,6 @@ static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries,
 			}
 		}
 	}
-	WARN_ON(!!dev->msix_enabled);
 
 	/* Check whether driver already requested for MSI irq */
 	if (dev->msi_enabled) {
@@ -1068,8 +1067,6 @@ static int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec,
 	if (!pci_msi_supported(dev, minvec))
 		return -EINVAL;
 
-	WARN_ON(!!dev->msi_enabled);
-
 	/* Check whether driver already requested MSI-X irqs */
 	if (dev->msix_enabled) {
 		dev_info(&dev->dev,
@@ -1080,6 +1077,9 @@ static int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec,
 	if (maxvec < minvec)
 		return -ERANGE;
 
+	if (WARN_ON_ONCE(dev->msi_enabled))
+		return -EINVAL;
+
 	nvec = pci_msi_vec_count(dev);
 	if (nvec < 0)
 		return nvec;
@@ -1138,6 +1138,9 @@ static int __pci_enable_msix_range(struct pci_dev *dev,
 	if (maxvec < minvec)
 		return -ERANGE;
 
+	if (WARN_ON_ONCE(dev->msix_enabled))
+		return -EINVAL;
+
 	for (;;) {
 		if (affinity) {
 			nvec = irq_calc_affinity_vectors(dev->irq_affinity,
-- 
2.17.1


  parent reply	other threads:[~2018-10-31 23:18 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-31 23:10 [PATCH AUTOSEL 4.9 01/48] net: ethernet: ti: cpsw: unsync mcast entries while switch promisc mode Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 02/48] locking/lockdep: Fix debug_locks off performance problem Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 03/48] ataflop: fix error handling during setup Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 04/48] swim: fix cleanup on setup error Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 05/48] tun: Consistently configure generic netdev params via rtnetlink Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 06/48] s390/sthyi: Fix machine name validity indication Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 07/48] hwmon: (pwm-fan) Set fan speed to 0 on suspend Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 08/48] perf tools: Free temporary 'sys' string in read_event_files() Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 09/48] perf tools: Cleanup trace-event-info 'tdata' leak Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 10/48] perf strbuf: Match va_{add,copy} with va_end Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 11/48] cpupower: Fix coredump on VMWare Sasha Levin
2018-11-12 10:31   ` Rafael David Tinoco
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 12/48] mmc: sdhci-pci-o2micro: Add quirk for O2 Micro dev 0x8620 rev 0x01 Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 13/48] iwlwifi: pcie: avoid empty free RB queue Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 14/48] x86/olpc: Indicate that legacy PC XO-1 platform should not register RTC Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 15/48] cpufreq: dt: Try freeing static OPPs only if we have added them Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 16/48] regulator: fixed: Default enable high on DT regulators Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 17/48] Bluetooth: btbcm: Add entry for BCM4335C0 UART bluetooth Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 18/48] x86: boot: Fix EFI stub alignment Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 19/48] pinctrl: qcom: spmi-mpp: Fix err handling of pmic_mpp_set_mux Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 20/48] brcmfmac: fix for proper support of 160MHz bandwidth Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 21/48] kprobes: Return error if we fail to reuse kprobe instead of BUG_ON() Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 22/48] ACPI / LPSS: Add alternative ACPI HIDs for Cherry Trail DMA controllers Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 23/48] pinctrl: qcom: spmi-mpp: Fix drive strength setting Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 24/48] pinctrl: spmi-mpp: Fix pmic_mpp_config_get() to be compliant Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 25/48] pinctrl: ssbi-gpio: Fix pm8xxx_pin_config_get() " Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 26/48] ixgbevf: VF2VF TCP RSS Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 27/48] ath10k: schedule hardware restart if WMI command times out Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 28/48] cgroup, netclassid: add a preemption point to write_classid Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 29/48] scsi: esp_scsi: Track residual for PIO transfers Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 30/48] scsi: megaraid_sas: fix a missing-check bug Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 31/48] RDMA/core: Do not expose unsupported counters Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 32/48] IB/ipoib: Clear IPCB before icmp_send Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 33/48] tpm: suppress transmit cmd error logs when TPM 1.2 is disabled/deactivated Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 34/48] Drivers: hv: kvp: Fix two "this statement may fall through" warnings Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 35/48] VMCI: Resource wildcard match fixed Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 36/48] usb: gadget: udc: atmel: handle at91sam9rl PMC Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 37/48] ext4: fix argument checking in EXT4_IOC_MOVE_EXT Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 38/48] MD: fix invalid stored role for a disk Sasha Levin
2018-10-31 23:10 ` Sasha Levin [this message]
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 40/48] coresight: etb10: Fix handling of perf mode Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 41/48] crypto: caam - fix implicit casts in endianness helpers Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 42/48] usb: chipidea: Prevent unbalanced IRQ disable Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 43/48] driver/dma/ioat: Call del_timer_sync() without holding prep_lock Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 44/48] uio: ensure class is registered before devices Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 45/48] scsi: lpfc: Correct soft lockup when running mds diagnostics Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 46/48] signal: Always deliver the kernel's SIGKILL and SIGSTOP to a pid namespace init Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 47/48] dmaengine: dma-jz4780: Return error if not probed from DT Sasha Levin
2018-10-31 23:10 ` [PATCH AUTOSEL 4.9 48/48] ALSA: hda: Check the non-cached stream buffers more explicitly Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181031231054.29333-39-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=bhelgaas@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=xiangxia.m.yue@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.