diff options
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
-rw-r--r-- | net/ipv6/tcp_ipv6.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 7bdc9c9c231b..c4efaa97280c 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -810,8 +810,13 @@ static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32 | |||
810 | fl6.flowi6_proto = IPPROTO_TCP; | 810 | fl6.flowi6_proto = IPPROTO_TCP; |
811 | if (rt6_need_strict(&fl6.daddr) && !oif) | 811 | if (rt6_need_strict(&fl6.daddr) && !oif) |
812 | fl6.flowi6_oif = tcp_v6_iif(skb); | 812 | fl6.flowi6_oif = tcp_v6_iif(skb); |
813 | else | 813 | else { |
814 | if (!oif && netif_index_is_l3_master(net, skb->skb_iif)) | ||
815 | oif = skb->skb_iif; | ||
816 | |||
814 | fl6.flowi6_oif = oif; | 817 | fl6.flowi6_oif = oif; |
818 | } | ||
819 | |||
815 | fl6.flowi6_mark = IP6_REPLY_MARK(net, skb->mark); | 820 | fl6.flowi6_mark = IP6_REPLY_MARK(net, skb->mark); |
816 | fl6.fl6_dport = t1->dest; | 821 | fl6.fl6_dport = t1->dest; |
817 | fl6.fl6_sport = t1->source; | 822 | fl6.fl6_sport = t1->source; |