Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 04fec21c authored by Russell Currey's avatar Russell Currey Committed by Michael Ellerman
Browse files

powerpc/eeh: Null check uses of eeh_pe_bus_get



eeh_pe_bus_get() can return NULL if a PCI bus isn't found for a given PE.
Some callers don't check this, and can cause a null pointer dereference
under certain circumstances.

Fix this by checking NULL everywhere eeh_pe_bus_get() is called.

Fixes: 8a6b1bc7 ("powerpc/eeh: EEH core to handle special event")
Cc: stable@vger.kernel.org # v3.11+
Signed-off-by: default avatarRussell Currey <ruscur@russell.cc>
Reviewed-by: default avatarAndrew Donnellan <andrew.donnellan@au1.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent a24553dd
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -994,6 +994,14 @@ static void eeh_handle_special_event(void)
				/* Notify all devices to be down */
				eeh_pe_state_clear(pe, EEH_PE_PRI_BUS);
				bus = eeh_pe_bus_get(phb_pe);
				if (!bus) {
					pr_err("%s: Cannot find PCI bus for "
					       "PHB#%d-PE#%x\n",
					       __func__,
					       pe->phb->global_number,
					       pe->addr);
					break;
				}
				eeh_pe_dev_traverse(pe,
					eeh_report_failure, NULL);
				pci_hp_remove_devices(bus);
+5 −0
Original line number Diff line number Diff line
@@ -1091,6 +1091,11 @@ static int pnv_eeh_reset(struct eeh_pe *pe, int option)
	}

	bus = eeh_pe_bus_get(pe);
	if (!bus) {
		pr_err("%s: Cannot find PCI bus for PHB#%d-PE#%x\n",
			__func__, pe->phb->global_number, pe->addr);
		return -EIO;
	}
	if (pe->type & EEH_PE_VF)
		return pnv_eeh_reset_vf_pe(pe, option);