Message ID | e8c87482998ca6fcdab214f5a9d582899ec0c648.1652665047.git.lucien.xin@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 4d33ab08c0af140752a46f227a6bf97dab1e17b4 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [PATCHv2,ipsec] xfrm: set dst dev to blackhole_netdev instead of loopback_dev in ifdown | expand |
On Sun, May 15, 2022 at 6:37 PM Xin Long <lucien.xin@gmail.com> wrote: > > The global blackhole_netdev has replaced pernet loopback_dev to become the > one given to the object that holds an netdev when ifdown in many places of > ipv4 and ipv6 since commit 8d7017fd621d ("blackhole_netdev: use > blackhole_netdev to invalidate dst entries"). > > Especially after commit faab39f63c1f ("net: allow out-of-order netdev > unregistration"), it's no longer safe to use loopback_dev that may be > freed before other netdev. > > This patch is to set dst dev to blackhole_netdev instead of loopback_dev > in ifdown. > Reviewed-by: Eric Dumazet <edumazet@google.com>
Hello: This patch was applied to netdev/net.git (master) by Paolo Abeni <pabeni@redhat.com>: On Sun, 15 May 2022 21:37:27 -0400 you wrote: > The global blackhole_netdev has replaced pernet loopback_dev to become the > one given to the object that holds an netdev when ifdown in many places of > ipv4 and ipv6 since commit 8d7017fd621d ("blackhole_netdev: use > blackhole_netdev to invalidate dst entries"). > > Especially after commit faab39f63c1f ("net: allow out-of-order netdev > unregistration"), it's no longer safe to use loopback_dev that may be > freed before other netdev. > > [...] Here is the summary with links: - [PATCHv2,ipsec] xfrm: set dst dev to blackhole_netdev instead of loopback_dev in ifdown https://git.kernel.org/netdev/net/c/4d33ab08c0af You are awesome, thank you!
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 00bd0ecff5a1..f1876ea61fdc 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -3744,7 +3744,7 @@ static int stale_bundle(struct dst_entry *dst) void xfrm_dst_ifdown(struct dst_entry *dst, struct net_device *dev) { while ((dst = xfrm_dst_child(dst)) && dst->xfrm && dst->dev == dev) { - dst->dev = dev_net(dev)->loopback_dev; + dst->dev = blackhole_netdev; dev_hold(dst->dev); dev_put(dev); }
The global blackhole_netdev has replaced pernet loopback_dev to become the one given to the object that holds an netdev when ifdown in many places of ipv4 and ipv6 since commit 8d7017fd621d ("blackhole_netdev: use blackhole_netdev to invalidate dst entries"). Especially after commit faab39f63c1f ("net: allow out-of-order netdev unregistration"), it's no longer safe to use loopback_dev that may be freed before other netdev. This patch is to set dst dev to blackhole_netdev instead of loopback_dev in ifdown. v1->v2: - add Fixes tag as Eric suggested. Fixes: faab39f63c1f ("net: allow out-of-order netdev unregistration") Signed-off-by: Xin Long <lucien.xin@gmail.com> --- net/xfrm/xfrm_policy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)