]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
mlxsw: spectrum_mr: Fix list iteration in error path
authorIdo Schimmel <idosch@mellanox.com>
Thu, 26 Mar 2020 14:17:33 +0000 (16:17 +0200)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Tue, 7 Apr 2020 08:53:09 +0000 (10:53 +0200)
BugLink: https://bugs.launchpad.net/bugs/1870604
[ Upstream commit f6bf1bafdc2152bb22aff3a4e947f2441a1d49e2 ]

list_for_each_entry_from_reverse() iterates backwards over the list from
the current position, but in the error path we should start from the
previous position.

Fix this by using list_for_each_entry_continue_reverse() instead.

This suppresses the following error from coccinelle:

drivers/net/ethernet/mellanox/mlxsw//spectrum_mr.c:655:34-38: ERROR:
invalid reference to the index variable of the iterator on line 636

Fixes: c011ec1bbfd6 ("mlxsw: spectrum: Add the multicast routing offloading logic")
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/net/ethernet/mellanox/mlxsw/spectrum_mr.c

index d20b143de3b479166f7da662d7ebf4e754b8f9aa..548d2a1cab70a9626946d89dc139afd884911e79 100644 (file)
@@ -714,12 +714,12 @@ static int mlxsw_sp_mr_vif_resolve(struct mlxsw_sp_mr_table *mr_table,
        return 0;
 
 err_erif_unresolve:
-       list_for_each_entry_from_reverse(erve, &mr_vif->route_evif_list,
-                                        vif_node)
+       list_for_each_entry_continue_reverse(erve, &mr_vif->route_evif_list,
+                                            vif_node)
                mlxsw_sp_mr_route_evif_unresolve(mr_table, erve);
 err_irif_unresolve:
-       list_for_each_entry_from_reverse(irve, &mr_vif->route_ivif_list,
-                                        vif_node)
+       list_for_each_entry_continue_reverse(irve, &mr_vif->route_ivif_list,
+                                            vif_node)
                mlxsw_sp_mr_route_ivif_unresolve(mr_table, irve);
        mr_vif->rif = NULL;
        return err;