Thread (22 messages) 22 messages, 3 authors, 2017-07-21
STALE3282d
Revisions (12)
  1. v1 [diff vs current]
  2. v1 [diff vs current]
  3. v1 current
  4. v2 [diff vs current]
  5. v1 [diff vs current]
  6. v2 [diff vs current]
  7. v1 [diff vs current]
  8. v1 [diff vs current]
  9. v2 [diff vs current]
  10. v3 [diff vs current]
  11. v1 [diff vs current]
  12. v3 [diff vs current]

[PATCH 2/8] net/bnxt: fix to avoid a segfault

From: Ajit Khaparde <ajit.khaparde@broadcom.com>
Date: 2017-07-20 04:48:40
Subsystem: networking drivers, the rest · Maintainers: Andrew Lunn, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds

Fix use of local variable to avoid segfault.
cnt was incorrectly tested and decremented in the loop that removes
a VLAN from the table.

Fixes: 36735a932ca7 ("support set VF QOS and MAC anti spoof")

Signed-off-by: Stephen Hurd <redacted>
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/rte_pmd_bnxt.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/net/bnxt/rte_pmd_bnxt.c b/drivers/net/bnxt/rte_pmd_bnxt.c
index 0a8fb1e..0d48873 100644
--- a/drivers/net/bnxt/rte_pmd_bnxt.c
+++ b/drivers/net/bnxt/rte_pmd_bnxt.c
@@ -500,6 +500,7 @@ int rte_pmd_bnxt_set_vf_vlan_filter(uint8_t port, uint16_t vlan,
 						continue;
 					}
 
+					/* cnt is one less than vlan_count */
 					cnt = bp->pf.vf_info[i].vlan_count++;
 					/*
 					 * And finally, add to the
@@ -511,19 +512,19 @@ int rte_pmd_bnxt_set_vf_vlan_filter(uint8_t port, uint16_t vlan,
 					ve->vid = rte_cpu_to_be_16(vlan);
 				}
 			} else {
-				for (j = 0; cnt; j++) {
+				for (j = 0; j < cnt; j++) {
 					if (rte_be_to_cpu_16(
-					bp->pf.vf_info[i].vlan_table[j].vid) !=
-					    vlan)
+					 bp->pf.vf_info[i].vlan_table[j].vid) !=
+					 vlan)
 						continue;
 					memmove(
-					 &bp->pf.vf_info[i].vlan_table[j],
-					 &bp->pf.vf_info[i].vlan_table[j + 1],
-					 getpagesize() -
-					 ((j + 1) *
+					    &bp->pf.vf_info[i].vlan_table[j],
+					   &bp->pf.vf_info[i].vlan_table[j + 1],
+					    getpagesize() -
+					    ((j + 1) *
 					 sizeof(struct bnxt_vlan_table_entry)));
 					j--;
-					cnt = bp->pf.vf_info[i].vlan_count--;
+					cnt = --bp->pf.vf_info[i].vlan_count;
 				}
 			}
 			rte_pmd_bnxt_set_vf_vlan_anti_spoof(dev->data->port_id,
-- 
2.10.1 (Apple Git-78)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help