diff --git a/net/ipv6/route.c b/net/ipv6/route.c index ed72ae3c54e7d50dc22c73fe3611bc0706dd80e1..a33681dc479614b35d1195d27ca0284ef3a822d2 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -2391,10 +2391,13 @@ EXPORT_SYMBOL_GPL(ip6_update_pmtu); void ip6_sk_update_pmtu(struct sk_buff *skb, struct sock *sk, __be32 mtu) { + int oif = sk->sk_bound_dev_if; struct dst_entry *dst; - ip6_update_pmtu(skb, sock_net(sk), mtu, - sk->sk_bound_dev_if, sk->sk_mark, sk->sk_uid); + if (!oif && skb->dev) + oif = l3mdev_master_ifindex(skb->dev); + + ip6_update_pmtu(skb, sock_net(sk), mtu, oif, sk->sk_mark, sk->sk_uid); dst = __sk_dst_get(sk); if (!dst || !dst->obsolete ||