linux/drivers
Konrad Rzeszutek Wilk 9108b130f7 xen/pcifront: Fix mysterious crashes when NUMA locality information was extracted.
commit 4d8c8bd6f2 upstream.

Occasionaly PV guests would crash with:

pciback 0000:00:00.1: Xen PCI mapped GSI0 to IRQ16
BUG: unable to handle kernel paging request at 0000000d1a8c0be0
.. snip..
  <ffffffff8139ce1b>] find_next_bit+0xb/0x10
  [<ffffffff81387f22>] cpumask_next_and+0x22/0x40
  [<ffffffff813c1ef8>] pci_device_probe+0xb8/0x120
  [<ffffffff81529097>] ? driver_sysfs_add+0x77/0xa0
  [<ffffffff815293e4>] driver_probe_device+0x1a4/0x2d0
  [<ffffffff813c1ddd>] ? pci_match_device+0xdd/0x110
  [<ffffffff81529657>] __device_attach_driver+0xa7/0xb0
  [<ffffffff815295b0>] ? __driver_attach+0xa0/0xa0
  [<ffffffff81527622>] bus_for_each_drv+0x62/0x90
  [<ffffffff8152978d>] __device_attach+0xbd/0x110
  [<ffffffff815297fb>] device_attach+0xb/0x10
  [<ffffffff813b75ac>] pci_bus_add_device+0x3c/0x70
  [<ffffffff813b7618>] pci_bus_add_devices+0x38/0x80
  [<ffffffff813dc34e>] pcifront_scan_root+0x13e/0x1a0
  [<ffffffff817a0692>] pcifront_backend_changed+0x262/0x60b
  [<ffffffff814644c6>] ? xenbus_gather+0xd6/0x160
  [<ffffffff8120900f>] ? put_object+0x2f/0x50
  [<ffffffff81465c1d>] xenbus_otherend_changed+0x9d/0xa0
  [<ffffffff814678ee>] backend_changed+0xe/0x10
  [<ffffffff81463a28>] xenwatch_thread+0xc8/0x190
  [<ffffffff810f22f0>] ? woken_wake_function+0x10/0x10

which was the result of two things:

When we call pci_scan_root_bus we would pass in 'sd' (sysdata)
pointer which was an 'pcifront_sd' structure. However in the
pci_device_add it expects that the 'sd' is 'struct sysdata' and
sets the dev->node to what is in sd->node (offset 4):

set_dev_node(&dev->dev, pcibus_to_node(bus));

 __pcibus_to_node(const struct pci_bus *bus)
{
        const struct pci_sysdata *sd = bus->sysdata;

        return sd->node;
}

However our structure was pcifront_sd which had nothing at that
offset:

struct pcifront_sd {
        int                        domain;    /*     0     4 */
        /* XXX 4 bytes hole, try to pack */
        struct pcifront_device *   pdev;      /*     8     8 */
}

That is an hole - filled with garbage as we used kmalloc instead of
kzalloc (the second problem).

This patch fixes the issue by:
 1) Use kzalloc to initialize to a well known state.
 2) Put 'struct pci_sysdata' at the start of 'pcifront_sd'. That
    way access to the 'node' will access the right offset.

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-03-03 15:07:30 -08:00
..
accessibility
acpi nfit: fix multi-interface dimm handling, acpi6.1 compatibility 2016-03-03 15:07:24 -08:00
amba
android drivers: android: correct the size of struct binder_uintptr_t for BC_DEAD_BINDER_DONE 2016-03-03 15:07:10 -08:00
ata libata: fix sff host state machine locking while polling 2016-03-03 15:07:27 -08:00
atm
auxdisplay
base base/platform: Fix platform drivers with no probe callback 2016-02-17 12:30:55 -08:00
bcma
block zram: don't call idr_remove() from zram_remove() 2016-02-17 12:31:06 -08:00
bluetooth Bluetooth: Add support of Toshiba Broadcom based devices 2016-03-03 15:07:16 -08:00
bus bus: sunxi-rsb: Fix peripheral IC mapping runtime address 2015-12-22 11:42:30 -08:00
cdrom
char ipmi: move timer init to before irq is setup 2015-12-09 13:13:06 -06:00
clk clk: exynos: use irqsave version of spin_lock to avoid deadlock with irqs 2016-03-03 15:07:17 -08:00
clocksource clockevents/tcb_clksrc: Prevent disabling an already disabled clock 2016-03-03 15:07:15 -08:00
connector connector: bump skb->users before callback invocation 2016-01-04 21:46:45 -05:00
cpufreq cpufreq: Fix NULL reference crash while accessing policy->governor_data 2016-03-03 15:07:25 -08:00
cpuidle
crypto crypto: marvell/cesa - fix test in mv_cesa_dev_dma_init() 2016-02-17 12:31:05 -08:00
dca
devfreq
dio
dma dmaengine: dw: disable BLOCK IRQs for non-cyclic xfer 2016-03-03 15:07:24 -08:00
dma-buf
edac EDAC, mc_sysfs: Fix freeing bus' name 2016-03-03 15:07:17 -08:00
eisa
extcon
firewire
firmware efi: Add pstore variables to the deletion whitelist 2016-03-03 15:07:09 -08:00
fmc
fpga fpga manager: Fix firmware resource leak on error 2015-11-24 15:25:46 -08:00
gpio gpio: revert get() to non-errorprogating behaviour 2015-12-17 15:48:29 +01:00
gpu drm/radeon/pm: adjust display configuration after powerstate 2016-03-03 15:07:23 -08:00
hid HID: multitouch: fix input mode switching on some Elan panels 2016-02-17 12:31:06 -08:00
hsi
hv Drivers: hv: vmbus: Fix a Host signaling bug 2016-03-03 15:07:16 -08:00
hwmon hwmon: (ads1015) Handle negative conversion values correctly 2016-03-03 15:07:25 -08:00
hwspinlock drivers/hwspinlock: fix race between radix tree insertion and lookup 2016-02-25 12:01:23 -08:00
hwtracing coresight: checking for NULL string in coresight_name_match() 2016-03-03 15:07:14 -08:00
i2c i2c: i801: Adding Intel Lewisburg support for iTCO 2016-03-03 15:07:28 -08:00
ide
idle
iio iio: inkern: fix a NULL dereference on error 2016-02-25 12:01:17 -08:00
infiniband IB/mlx5: Expose correct maximum number of CQE capacity 2016-03-03 15:07:25 -08:00
input Input: vmmouse - fix absolute device registration 2016-02-25 12:01:21 -08:00
iommu iommu/vt-d: Clear PPR bit to ensure we get more page request interrupts 2016-02-25 12:01:22 -08:00
ipack
irqchip irqchip/gic-v3-its: Fix double ICC_EOIR write for LPI in EOImode==1 2016-03-03 15:07:14 -08:00
isdn ser_gigaset: remove unnecessary kfree() calls from release method 2015-12-15 13:24:21 -05:00
leds
lguest
lightnvm lightnvm: wrong offset in bad blk lun calculation 2015-12-29 08:28:32 -07:00
macintosh
mailbox
mcb
md dm: fix dm_rq_target_io leak on faults with .request_fn DM w/ blk-mq paths 2016-03-03 15:07:14 -08:00
media tda1004x: only update the frontend properties if locked 2016-03-03 15:07:14 -08:00
memory fsl-ifc: add missing include on ARM64 2015-12-16 00:16:58 +01:00
memstick
message
mfd
misc cxl: use correct operator when writing pcie config space values 2016-03-03 15:07:17 -08:00
mmc mmc: sdhci: Allow override of get_cd() called from sdhci_request() 2016-03-03 15:07:16 -08:00
mtd mtd: nand: assign reasonable default name for NAND drivers 2016-02-17 12:30:56 -08:00
net rtlwifi: rtl8723be: Fix module parameter initialization 2016-03-03 15:07:13 -08:00
nfc
ntb
nubus
nvdimm libnvdimm: fix namespace object confusion in is_uuid_busy() 2016-02-25 12:01:21 -08:00
nvme NVMe: IO ending fixes on surprise removal 2015-12-22 10:12:04 -07:00
nvmem
of of/irq: Fix msi-map calculation for nonzero rid-base 2016-03-03 15:07:29 -08:00
oprofile
parisc parisc iommu: fix panic due to trying to allocate too large region 2015-12-12 16:07:25 +01:00
parport
pci xen/pcifront: Fix mysterious crashes when NUMA locality information was extracted. 2016-03-03 15:07:30 -08:00
pcmcia
perf
phy phy: core: fix wrong err handle for phy_power_on 2016-03-03 15:07:28 -08:00
pinctrl pinctrl: bcm2835: Fix initial value for direction_output 2015-12-14 11:31:20 +01:00
platform ideapad-laptop: Add Lenovo Yoga 700 to no_hw_rfkill dmi list 2016-03-03 15:07:24 -08:00
pnp
power
powercap powercap / RAPL: fix BIOS lock check 2015-12-12 02:31:11 +01:00
pps
ps3
ptp
pwm
rapidio
ras
regulator regulator: mt6311: MT6311_REGULATOR needs to select REGMAP_I2C 2016-03-03 15:07:17 -08:00
remoteproc remoteproc: fix memory leak of remoteproc ida cache layers 2015-11-26 17:44:28 +02:00
reset
rpmsg
rtc rtc: da9063: fix access ordering error during RTC interrupt at system power on 2015-12-20 13:39:29 +01:00
s390 s390/dasd: fix performance drop 2016-03-03 15:07:12 -08:00
sbus
scsi qla2xxx: Fix stale pointer access. 2016-03-03 15:07:27 -08:00
sfi
sh drivers: sh: Get rid of CONFIG_ARCH_SHMOBILE_MULTI 2015-11-17 02:12:46 +09:00
sn
soc Few Keystone fixes for 4.4-rcx 2015-11-25 23:48:12 +01:00
spi spi: atmel: fix gpio chip-select in case of non-DT platform 2016-03-03 15:07:27 -08:00
spmi
ssb
staging Revert "Staging: panel: usleep_range is preferred over udelay" 2016-03-03 15:07:26 -08:00
target target: Fix race with SCF_SEND_DELAYED_TAS handling 2016-03-03 15:07:27 -08:00
tc
thermal Thermal: do thermal zone update after a cooling device registered 2016-03-03 15:07:25 -08:00
thunderbolt
tty serial: omap: Prevent DoS using unprivileged ioctl(TIOCSRS485) 2016-02-25 12:01:14 -08:00
uio
usb cdc-acm:exclude Samsung phone 04e8:685d 2016-03-03 15:07:26 -08:00
uwb
vfio Revert: "vfio: Include No-IOMMU mode" 2015-12-04 08:38:42 -07:00
vhost vhost: replace % with & on data path 2015-12-07 17:28:10 +02:00
video OMAPDSS: fix timings for VENC to match what omapdrm expects 2015-12-09 12:57:13 +02:00
virt
virtio virtio_pci: fix use after free on release 2016-03-03 15:07:18 -08:00
vlynq
vme
w1
watchdog watchdog: mtk_wdt: Use MODE_KEY when stopping the watchdog 2015-11-23 09:00:09 +01:00
xen xen/pciback: Save the number of MSI-X entries to be copied later. 2016-03-03 15:07:30 -08:00
zorro
Kconfig
Makefile null_blk: register as a LightNVM device 2015-11-16 15:22:28 -07:00