aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ipv6/ipv6_sockglue.c12
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) {