Added missing checks to avoid null pointer dereference. The patch fixes below issues reported by klocwork tool: 1. Pointer 'pcim_iomap_table(pdev)' returned from call to function 'pcim_iomap_table' at line 365 may be NULL and will be dereferenced at line 365 in otx2_cptvf_main.c. Also there is a similar error on line 734 in otx2_cptpf_main.c. 2. Pointer 'strsep( &val, ":" )' returned from call to function 'strsep' at line 1608 may be NULL and will be dereferenced at line 1608. Also there are 2 similar errors on lines 1620, 1632 in otx2_cptpf_ucode.c. Signed-off-by: Shijith Thotton <sthotton@xxxxxxxxxxx> --- .../crypto/marvell/octeontx2/otx2_cptpf_main.c | 9 ++++++++- .../marvell/octeontx2/otx2_cptpf_ucode.c | 18 +++++++++++++++--- .../crypto/marvell/octeontx2/otx2_cptvf_main.c | 9 ++++++++- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptpf_main.c b/drivers/crypto/marvell/octeontx2/otx2_cptpf_main.c index a402ccfac557..ae57cee424f0 100644 --- a/drivers/crypto/marvell/octeontx2/otx2_cptpf_main.c +++ b/drivers/crypto/marvell/octeontx2/otx2_cptpf_main.c @@ -703,6 +703,7 @@ static int otx2_cptpf_probe(struct pci_dev *pdev, { struct device *dev = &pdev->dev; struct otx2_cptpf_dev *cptpf; + void __iomem * const *iomap; int err; cptpf = devm_kzalloc(dev, sizeof(*cptpf), GFP_KERNEL); @@ -731,7 +732,13 @@ static int otx2_cptpf_probe(struct pci_dev *pdev, pci_set_drvdata(pdev, cptpf); cptpf->pdev = pdev; - cptpf->reg_base = pcim_iomap_table(pdev)[PCI_PF_REG_BAR_NUM]; + iomap = pcim_iomap_table(pdev); + if (!iomap) { + dev_err(dev, "Failed to get iomap table\n"); + err = -ENODEV; + goto clear_drvdata; + } + cptpf->reg_base = iomap[PCI_PF_REG_BAR_NUM]; /* Check if AF driver is up, otherwise defer probe */ err = cpt_is_pf_usable(cptpf); diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c b/drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c index 9cba2f714c7e..b91401929fc6 100644 --- a/drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c +++ b/drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c @@ -1605,7 +1605,11 @@ int otx2_cpt_dl_custom_egrp_create(struct otx2_cptpf_dev *cptpf, if (!strncasecmp(val, "se", 2) && strchr(val, ':')) { if (has_se || ucode_idx) goto err_print; - tmp = strim(strsep(&val, ":")); + tmp = strsep(&val, ":"); + if (tmp != NULL) + tmp = strim(tmp); + else + goto err_print; if (!val) goto err_print; if (strlen(tmp) != 2) @@ -1617,7 +1621,11 @@ int otx2_cpt_dl_custom_egrp_create(struct otx2_cptpf_dev *cptpf, } else if (!strncasecmp(val, "ae", 2) && strchr(val, ':')) { if (has_ae || ucode_idx) goto err_print; - tmp = strim(strsep(&val, ":")); + tmp = strsep(&val, ":"); + if (tmp != NULL) + tmp = strim(tmp); + else + goto err_print; if (!val) goto err_print; if (strlen(tmp) != 2) @@ -1629,7 +1637,11 @@ int otx2_cpt_dl_custom_egrp_create(struct otx2_cptpf_dev *cptpf, } else if (!strncasecmp(val, "ie", 2) && strchr(val, ':')) { if (has_ie || ucode_idx) goto err_print; - tmp = strim(strsep(&val, ":")); + tmp = strsep(&val, ":"); + if (tmp != NULL) + tmp = strim(tmp); + else + goto err_print; if (!val) goto err_print; if (strlen(tmp) != 2) diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c b/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c index 3411e664cf50..9249ec1783bc 100644 --- a/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c +++ b/drivers/crypto/marvell/octeontx2/otx2_cptvf_main.c @@ -334,6 +334,7 @@ static int otx2_cptvf_probe(struct pci_dev *pdev, { struct device *dev = &pdev->dev; struct otx2_cptvf_dev *cptvf; + void __iomem * const *iomap; int ret; cptvf = devm_kzalloc(dev, sizeof(*cptvf), GFP_KERNEL); @@ -362,7 +363,13 @@ static int otx2_cptvf_probe(struct pci_dev *pdev, pci_set_drvdata(pdev, cptvf); cptvf->pdev = pdev; - cptvf->reg_base = pcim_iomap_table(pdev)[PCI_PF_REG_BAR_NUM]; + iomap = pcim_iomap_table(pdev); + if (!iomap) { + dev_err(dev, "Failed to get iomap table\n"); + ret = -ENODEV; + goto clear_drvdata; + } + cptvf->reg_base = iomap[PCI_PF_REG_BAR_NUM]; otx2_cpt_set_hw_caps(pdev, &cptvf->cap_flag); -- 2.25.1