diff options
author | Alex Gartrell <agartrell@fb.com> | 2015-06-26 03:18:45 -0700 |
---|---|---|
committer | Simon Horman <horms@verge.net.au> | 2015-07-14 16:41:27 +0900 |
commit | 326bf17ea5d4f8f17b54cbf167b8cb504c606ee9 (patch) | |
tree | 246ceffaea4201eb2a9820da6a4a592d862b07b4 | |
parent | 484836ec2de24d9a7c6471f022b746d947698725 (diff) | |
download | op-kernel-dev-326bf17ea5d4f8f17b54cbf167b8cb504c606ee9.zip op-kernel-dev-326bf17ea5d4f8f17b54cbf167b8cb504c606ee9.tar.gz |
ipvs: fix ipv6 route unreach panic
Previously there was a trivial panic
unshare -n /bin/bash <<EOF
ip addr add dev lo face::1/128
ipvsadm -A -t [face::1]:15213
ipvsadm -a -t [face::1]:15213 -r b00c::1
echo boom | nc face::1 15213
EOF
This patch allows us to replicate the net logic above and simply capture
the skb_dst(skb)->dev and use that for the purpose of the invocation.
Signed-off-by: Alex Gartrell <agartrell@fb.com>
Acked-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
-rw-r--r-- | net/netfilter/ipvs/ip_vs_xmit.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c index bf66a86..b99d806 100644 --- a/net/netfilter/ipvs/ip_vs_xmit.c +++ b/net/netfilter/ipvs/ip_vs_xmit.c @@ -505,6 +505,13 @@ err_put: return -1; err_unreach: + /* The ip6_link_failure function requires the dev field to be set + * in order to get the net (further for the sake of fwmark + * reflection). + */ + if (!skb->dev) + skb->dev = skb_dst(skb)->dev; + dst_link_failure(skb); return -1; } |