|
@@ -911,7 +911,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
|
|
|
} else {
|
|
|
if (np->rxopt.bits.rxinfo) {
|
|
|
struct in6_pktinfo src_info;
|
|
|
- src_info.ipi6_ifindex = np->mcast_oif;
|
|
|
+ src_info.ipi6_ifindex = np->mcast_oif ? np->mcast_oif : sk->sk_bound_dev_if;
|
|
|
ipv6_addr_copy(&src_info.ipi6_addr, &np->daddr);
|
|
|
put_cmsg(&msg, SOL_IPV6, IPV6_PKTINFO, sizeof(src_info), &src_info);
|
|
|
}
|
|
@@ -921,7 +921,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
|
|
|
}
|
|
|
if (np->rxopt.bits.rxoinfo) {
|
|
|
struct in6_pktinfo src_info;
|
|
|
- src_info.ipi6_ifindex = np->mcast_oif;
|
|
|
+ src_info.ipi6_ifindex = np->mcast_oif ? np->mcast_oif : sk->sk_bound_dev_if;
|
|
|
ipv6_addr_copy(&src_info.ipi6_addr, &np->daddr);
|
|
|
put_cmsg(&msg, SOL_IPV6, IPV6_2292PKTINFO, sizeof(src_info), &src_info);
|
|
|
}
|