net/enic: fix negative array index write
authorJohn Daley <johndale@cisco.com>
Mon, 20 Jun 2016 19:27:46 +0000 (12:27 -0700)
committerBruce Richardson <bruce.richardson@intel.com>
Fri, 24 Jun 2016 16:28:09 +0000 (18:28 +0200)
Negative array index write using variable pos as an index to array
enic->fdir.nodes. Fixed by add array index check.

Coverity issue: 13270

Fixes: fefed3d1e62c ("enic: new driver")

Signed-off-by: John Daley <johndale@cisco.com>
drivers/net/enic/enic_clsf.c

index edb56e1..7d2bb78 100644 (file)
@@ -148,9 +148,13 @@ int enic_fdir_add_fltr(struct enic *enic, struct rte_eth_fdir_filter *params)
                enic->fdir.nodes[pos] = NULL;
                if (unlikely(key->rq_index == queue)) {
                        /* Nothing to be done */
+                       enic->fdir.stats.f_add++;
                        pos = rte_hash_add_key(enic->fdir.hash, params);
+                       if (pos < 0) {
+                               dev_err(enic, "Add hash key failed\n");
+                               return pos;
+                       }
                        enic->fdir.nodes[pos] = key;
-                       enic->fdir.stats.f_add++;
                        dev_warning(enic,
                                "FDIR rule is already present\n");
                        return 0;
@@ -213,6 +217,11 @@ int enic_fdir_add_fltr(struct enic *enic, struct rte_eth_fdir_filter *params)
        }
 
        pos = rte_hash_add_key(enic->fdir.hash, params);
+       if (pos < 0) {
+               dev_err(enic, "Add hash key failed\n");
+               return pos;
+       }
+
        enic->fdir.nodes[pos] = key;
        return 0;
 }