net/mlx4: fix drop flow resources leak
authorAdrien Mazarguil <adrien.mazarguil@6wind.com>
Wed, 31 Jan 2018 15:33:06 +0000 (16:33 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 5 Feb 2018 12:42:53 +0000 (13:42 +0100)
Resources allocated for drop flow rules are not freed properly. This causes
a memory leak and triggers an assertion failure on a reference counter when
compiled in debug mode.

This issue can be reproduced with testpmd by entering the following
commands:

 flow create 0 ingress pattern eth / end actions drop / end
 port start all
 port stop all
 port start all
 port stop all
 quit

The reason is additional references are taken when re-enabling existing
flow rules, a common occurrence when rehashing configuration.

Fixes: d3a7e09234e4 ("net/mlx4: allocate drop flow resources on demand")
Cc: stable@dpdk.org
Reported-by: Moti Haimovsky <motih@mellanox.com>
Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
drivers/net/mlx4/mlx4_flow.c

index 3d40f00..2d55bfe 100644 (file)
@@ -1030,6 +1030,8 @@ mlx4_flow_toggle(struct priv *priv,
                flow->drop = missing;
        }
        if (flow->drop) {
+               if (flow->ibv_flow)
+                       return 0;
                mlx4_drop_get(priv);
                if (!priv->drop) {
                        err = rte_errno;