Commit 20acebdf authored by Brian W Hart's avatar Brian W Hart Committed by Benjamin Herrenschmidt

powernv/eeh: Fix possible buffer overrun in ioda_eeh_phb_diag()

PHB diagnostic buffer may be smaller than PAGE_SIZE, especially when
PAGE_SIZE > 4KB.
Signed-off-by: default avatarBrian W Hart <hartb@linux.vnet.ibm.com>
Acked-by: default avatarGavin Shan <shangw@linux.vnet.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 20151169
...@@ -820,14 +820,15 @@ static void ioda_eeh_phb_diag(struct pci_controller *hose) ...@@ -820,14 +820,15 @@ static void ioda_eeh_phb_diag(struct pci_controller *hose)
struct OpalIoPhbErrorCommon *common; struct OpalIoPhbErrorCommon *common;
long rc; long rc;
common = (struct OpalIoPhbErrorCommon *)phb->diag.blob; rc = opal_pci_get_phb_diag_data2(phb->opal_id, phb->diag.blob,
rc = opal_pci_get_phb_diag_data2(phb->opal_id, common, PAGE_SIZE); PNV_PCI_DIAG_BUF_SIZE);
if (rc != OPAL_SUCCESS) { if (rc != OPAL_SUCCESS) {
pr_warning("%s: Failed to get diag-data for PHB#%x (%ld)\n", pr_warning("%s: Failed to get diag-data for PHB#%x (%ld)\n",
__func__, hose->global_number, rc); __func__, hose->global_number, rc);
return; return;
} }
common = (struct OpalIoPhbErrorCommon *)phb->diag.blob;
switch (common->ioType) { switch (common->ioType) {
case OPAL_PHB_ERROR_DATA_TYPE_P7IOC: case OPAL_PHB_ERROR_DATA_TYPE_P7IOC:
ioda_eeh_p7ioc_phb_diag(hose, common); ioda_eeh_p7ioc_phb_diag(hose, common);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment