Thread (5 messages) flat view 5 messages, 5 authors, 2017-06-08

Re: [PATCH v2] cxl: Avoid double free_irq() for psl,slice interrupts

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2017-06-06 09:17:30
Also in: stable

Vaibhav Jain [off-list ref] writes:
During an eeh call to cxl_remove can result in double free_irq of
psl,slice interrupts. This can happen if perst_reloads_same_image == 1
and call to cxl_configure_adapter() fails during slot_reset
callback. In such a case we see a kernel oops with following back-trace:

Oops: Kernel access of bad area, sig: 11 [#1]
Call Trace:
  free_irq+0x88/0xd0 (unreliable)
  cxl_unmap_irq+0x20/0x40 [cxl]
  cxl_native_release_psl_irq+0x78/0xd8 [cxl]
  pci_deconfigure_afu+0xac/0x110 [cxl]
  cxl_remove+0x104/0x210 [cxl]
  pci_device_remove+0x6c/0x110
  device_release_driver_internal+0x204/0x2e0
  pci_stop_bus_device+0xa0/0xd0
  pci_stop_and_remove_bus_device+0x28/0x40
  pci_hp_remove_devices+0xb0/0x150
  pci_hp_remove_devices+0x68/0x150
  eeh_handle_normal_event+0x140/0x580
  eeh_handle_event+0x174/0x360
  eeh_event_handler+0x1e8/0x1f0

This patch fixes the issue of double free_irq by checking that
variables that hold the virqs (err_hwirq, serr_hwirq, psl_virq) are
not '0' before un-mapping and resetting these variables to '0' when
they are un-mapped.

Cc: stable@vger.kernel.org
When was the bug introduced? ie. what commit does this fix?

Was it the original submission? So:

  Fixes: f204e0b8cedd ("cxl: Driver code for powernv PCIe based cards for userspace access")

Or does it depend on perst_reloads_same_image, so:

  Fixes: 13e68d8bd05c ("cxl: Allow the kernel to trust that an image won't change on PERST.")

Or something else?

cheers
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help