OSDN Git Service

net: aquantia: fixed buffer overflow
authorNikita Danilov <nikita.danilov@aquantia.com>
Wed, 27 Feb 2019 12:10:07 +0000 (12:10 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 2 Mar 2019 00:45:15 +0000 (16:45 -0800)
The overflow is detected by smatch:

drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c: 175
  aq_pci_func_free_irqs() error: buffer overflow 'self->aq_vec' 8 <= 31

In reality msix_entry_mask always restricts number of iterations.
Adding extra condition to make logic clear and smatch happy.

Signed-off-by: Nikita Danilov <nikita.danilov@aquantia.com>
Signed-off-by: Igor Russkikh <igor.russkikh@aquantia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c

index c8b44cd..0217ff4 100644 (file)
@@ -170,6 +170,8 @@ void aq_pci_func_free_irqs(struct aq_nic_s *self)
        for (i = 32U; i--;) {
                if (!((1U << i) & self->msix_entry_mask))
                        continue;
+               if (i >= AQ_CFG_VECS_MAX)
+                       continue;
 
                if (pdev->msix_enabled)
                        irq_set_affinity_hint(pci_irq_vector(pdev, i), NULL);