| From dde4e4ac3e05aef71cd9547e05a788c89de050e3 Mon Sep 17 00:00:00 2001 |
| From: Marcus Huewe <suse-tux@gmx.de> |
| Date: Wed, 15 Feb 2017 01:00:36 +0100 |
| Subject: [PATCH] net: neigh: Fix netevent NETEVENT_DELAY_PROBE_TIME_UPDATE |
| notification |
| |
| commit 7627ae6030f56a9a91a5b3867b21f35d79c16e64 upstream. |
| |
| When setting a neigh related sysctl parameter, we always send a |
| NETEVENT_DELAY_PROBE_TIME_UPDATE netevent. For instance, when |
| executing |
| |
| sysctl net.ipv6.neigh.wlp3s0.retrans_time_ms=2000 |
| |
| a NETEVENT_DELAY_PROBE_TIME_UPDATE netevent is generated. |
| |
| This is caused by commit 2a4501ae18b5 ("neigh: Send a |
| notification when DELAY_PROBE_TIME changes"). According to the |
| commit's description, it was intended to generate such an event |
| when setting the "delay_first_probe_time" sysctl parameter. |
| |
| In order to fix this, only generate this event when actually |
| setting the "delay_first_probe_time" sysctl parameter. This fix |
| should not have any unintended side-effects, because all but one |
| registered netevent callbacks check for other netevent event |
| types (the registered callbacks were obtained by grepping for |
| "register_netevent_notifier"). The only callback that uses the |
| NETEVENT_DELAY_PROBE_TIME_UPDATE event is |
| mlxsw_sp_router_netevent_event() (in |
| drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c): in case |
| of this event, it only accesses the DELAY_PROBE_TIME of the |
| passed neigh_parms. |
| |
| Fixes: 2a4501ae18b5 ("neigh: Send a notification when DELAY_PROBE_TIME changes") |
| Signed-off-by: Marcus Huewe <suse-tux@gmx.de> |
| Reviewed-by: Ido Schimmel <idosch@mellanox.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/core/neighbour.c b/net/core/neighbour.c |
| index cf26e04c4046..41fba8fc16c6 100644 |
| --- a/net/core/neighbour.c |
| +++ b/net/core/neighbour.c |
| @@ -2926,7 +2926,8 @@ static void neigh_proc_update(struct ctl_table *ctl, int write) |
| return; |
| |
| set_bit(index, p->data_state); |
| - call_netevent_notifiers(NETEVENT_DELAY_PROBE_TIME_UPDATE, p); |
| + if (index == NEIGH_VAR_DELAY_PROBE_TIME) |
| + call_netevent_notifiers(NETEVENT_DELAY_PROBE_TIME_UPDATE, p); |
| if (!dev) /* NULL dev means this is default value */ |
| neigh_copy_dflt_parms(net, p, index); |
| } |
| -- |
| 2.12.0 |
| |