cxl: Prevent read/write to AFU config space while AFU not configured
During EEH recovery, we deconfigure all AFUs whilst leaving the
corresponding vPHB and virtual PCI device in place.
If something attempts to interact with the AFU's PCI config space (e.g.
running lspci) after the AFU has been deconfigured and before it's
reconfigured, cxl_pcie_{read,write}_config() will read invalid values from
the deconfigured struct cxl_afu and proceed to Oops when they try to
dereference pointers that have been set to NULL during deconfiguration.
Add a rwsem to struct cxl_afu so we can prevent interaction with config
space while the AFU is deconfigured.
Reported-by: Pradipta Ghosh <pradghos@in.ibm.com>
Suggested-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Cc: stable@vger.kernel.org # v4.9+
Signed-off-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Signed-off-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
committed by
Michael Ellerman
parent
d7b1946c79
commit
14a3ae34bf
@@ -1129,6 +1129,7 @@ static int pci_configure_afu(struct cxl_afu *afu, struct cxl *adapter, struct pc
|
||||
if ((rc = cxl_native_register_psl_irq(afu)))
|
||||
goto err2;
|
||||
|
||||
up_write(&afu->configured_rwsem);
|
||||
return 0;
|
||||
|
||||
err2:
|
||||
@@ -1141,6 +1142,7 @@ err1:
|
||||
|
||||
static void pci_deconfigure_afu(struct cxl_afu *afu)
|
||||
{
|
||||
down_write(&afu->configured_rwsem);
|
||||
cxl_native_release_psl_irq(afu);
|
||||
if (afu->adapter->native->sl_ops->release_serr_irq)
|
||||
afu->adapter->native->sl_ops->release_serr_irq(afu);
|
||||
|
||||
Reference in New Issue
Block a user