GenWQE: Check pci_get_totalvfs return code
authorFrank Haverkamp <haver@linux.vnet.ibm.com>
Wed, 10 Sep 2014 14:37:46 +0000 (16:37 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 24 Sep 2014 06:15:46 +0000 (23:15 -0700)
Currently the driver is using the pci_get_totalvfs() return code
directly in a loop. To avoid problems with potentially negative
returns in case of errors, we are adding some more sanity checking
code.

Signed-off-by: Frank Haverkamp <haver@linux.vnet.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/genwqe/card_base.c
drivers/misc/genwqe/card_base.h

index 43bbabc96b6c33053e5e0f57a2c9210818a8a8b5..070a55c361010ffb6e8bc2f318dde24f26e97379 100644 (file)
@@ -346,8 +346,13 @@ static bool genwqe_setup_vf_jtimer(struct genwqe_dev *cd)
        unsigned int vf;
        u32 T = genwqe_T_psec(cd);
        u64 x;
+       int totalvfs;
 
-       for (vf = 0; vf < pci_sriov_get_totalvfs(pci_dev); vf++) {
+       totalvfs = pci_sriov_get_totalvfs(pci_dev);
+       if (totalvfs <= 0)
+               return false;
+
+       for (vf = 0; vf < totalvfs; vf++) {
 
                if (cd->vf_jobtimeout_msec[vf] == 0)
                        continue;
@@ -1125,6 +1130,8 @@ static int genwqe_pci_setup(struct genwqe_dev *cd)
        }
 
        cd->num_vfs = pci_sriov_get_totalvfs(pci_dev);
+       if (cd->num_vfs < 0)
+               cd->num_vfs = 0;
 
        err = genwqe_read_ids(cd);
        if (err)
index 67abd8cb2247bba9c7c9dd459d57aae730dbdacf..37657d6228dee724a9933b877213480fcb2d5d41 100644 (file)
@@ -306,7 +306,7 @@ struct genwqe_dev {
        struct pci_dev *pci_dev;        /* PCI device */
        void __iomem *mmio;             /* BAR-0 MMIO start */
        unsigned long mmio_len;
-       u16 num_vfs;
+       int num_vfs;
        u32 vf_jobtimeout_msec[GENWQE_MAX_VFS];
        int is_privileged;              /* access to all regs possible */