diff options
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/ipv6_sockglue.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 0feaee38bc37..eeeaad2e8b5c 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c | |||
@@ -938,8 +938,10 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, | |||
938 | } else { | 938 | } else { |
939 | if (np->rxopt.bits.rxinfo) { | 939 | if (np->rxopt.bits.rxinfo) { |
940 | struct in6_pktinfo src_info; | 940 | struct in6_pktinfo src_info; |
941 | src_info.ipi6_ifindex = np->mcast_oif ? np->mcast_oif : sk->sk_bound_dev_if; | 941 | src_info.ipi6_ifindex = np->mcast_oif ? np->mcast_oif : |
942 | ipv6_addr_copy(&src_info.ipi6_addr, &np->daddr); | 942 | np->sticky_pktinfo.ipi6_ifindex; |
943 | np->mcast_oif? ipv6_addr_copy(&src_info.ipi6_addr, &np->daddr) : | ||
944 | ipv6_addr_copy(&src_info.ipi6_addr, &(np->sticky_pktinfo.ipi6_addr)); | ||
943 | put_cmsg(&msg, SOL_IPV6, IPV6_PKTINFO, sizeof(src_info), &src_info); | 945 | put_cmsg(&msg, SOL_IPV6, IPV6_PKTINFO, sizeof(src_info), &src_info); |
944 | } | 946 | } |
945 | if (np->rxopt.bits.rxhlim) { | 947 | if (np->rxopt.bits.rxhlim) { |
@@ -948,8 +950,10 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, | |||
948 | } | 950 | } |
949 | if (np->rxopt.bits.rxoinfo) { | 951 | if (np->rxopt.bits.rxoinfo) { |
950 | struct in6_pktinfo src_info; | 952 | struct in6_pktinfo src_info; |
951 | src_info.ipi6_ifindex = np->mcast_oif ? np->mcast_oif : sk->sk_bound_dev_if; | 953 | src_info.ipi6_ifindex = np->mcast_oif ? np->mcast_oif : |
952 | ipv6_addr_copy(&src_info.ipi6_addr, &np->daddr); | 954 | np->sticky_pktinfo.ipi6_ifindex; |
955 | np->mcast_oif? ipv6_addr_copy(&src_info.ipi6_addr, &np->daddr) : | ||
956 | ipv6_addr_copy(&src_info.ipi6_addr, &(np->sticky_pktinfo.ipi6_addr)); | ||
953 | put_cmsg(&msg, SOL_IPV6, IPV6_2292PKTINFO, sizeof(src_info), &src_info); | 957 | put_cmsg(&msg, SOL_IPV6, IPV6_2292PKTINFO, sizeof(src_info), &src_info); |
954 | } | 958 | } |
955 | if (np->rxopt.bits.rxohlim) { | 959 | if (np->rxopt.bits.rxohlim) { |