Commit 590f89a7 authored by David Ahern's avatar David Ahern Committed by Greg Kroah-Hartman

ipv6: Fix PMTU updates for UDP/raw sockets in presence of VRF

[ Upstream commit 7ddacfa5 ]

Preethi reported that PMTU discovery for UDP/raw applications is not
working in the presence of VRF when the socket is not bound to a device.
The problem is that ip6_sk_update_pmtu does not consider the L3 domain
of the skb device if the socket is not bound. Update the function to
set oif to the L3 master device if relevant.

Fixes: ca254490 ("net: Add VRF support to IPv6 stack")
Reported-by: default avatarPreethi Ramachandra <preethir@juniper.net>
Signed-off-by: default avatarDavid Ahern <dsahern@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent dbd5f23b
...@@ -1547,10 +1547,13 @@ EXPORT_SYMBOL_GPL(ip6_update_pmtu); ...@@ -1547,10 +1547,13 @@ EXPORT_SYMBOL_GPL(ip6_update_pmtu);
void ip6_sk_update_pmtu(struct sk_buff *skb, struct sock *sk, __be32 mtu) 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; struct dst_entry *dst;
ip6_update_pmtu(skb, sock_net(sk), mtu, if (!oif && skb->dev)
sk->sk_bound_dev_if, sk->sk_mark, sk->sk_uid); 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); dst = __sk_dst_get(sk);
if (!dst || !dst->obsolete || if (!dst || !dst->obsolete ||
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment