mlxsw: spectrum_router: Only handle IPv4 and IPv6 events
authorIdo Schimmel <idosch@mellanox.com>
Fri, 15 Sep 2017 13:31:07 +0000 (15:31 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 16 Sep 2017 16:21:43 +0000 (09:21 -0700)
The driver doesn't support events from address families other than IPv4
and IPv6, so ignore them. Otherwise, we risk queueing a work item before
it's initialized.

This can happen in case a VRF is configured when MROUTE_MULTIPLE_TABLES
is enabled, as the VRF driver will try to add an l3mdev rule for the
IPMR family.

Fixes: 65e65ec137f4 ("mlxsw: spectrum_router: Don't ignore IPv6 notifications")
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reported-by: Andreas Rammhold <andreas@rammhold.de>
Reported-by: Florian Klink <flokli@flokli.de>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c

index f0fb898533fbdf64c56594d7984ddc9ff874a6e9..2cfb3f5d092dbf80acaea7481248ecf11ebdd7bc 100644 (file)
@@ -4868,7 +4868,8 @@ static int mlxsw_sp_router_fib_event(struct notifier_block *nb,
        struct fib_notifier_info *info = ptr;
        struct mlxsw_sp_router *router;
 
-       if (!net_eq(info->net, &init_net))
+       if (!net_eq(info->net, &init_net) ||
+           (info->family != AF_INET && info->family != AF_INET6))
                return NOTIFY_DONE;
 
        fib_work = kzalloc(sizeof(*fib_work), GFP_ATOMIC);