|
@@ -258,7 +258,8 @@ int ip_cmsg_send(struct sock *sk, struct msghdr *msg, struct ipcm_cookie *ipc,
|
|
|
src_info = (struct in6_pktinfo *)CMSG_DATA(cmsg);
|
|
|
if (!ipv6_addr_v4mapped(&src_info->ipi6_addr))
|
|
|
return -EINVAL;
|
|
|
- ipc->oif = src_info->ipi6_ifindex;
|
|
|
+ if (src_info->ipi6_ifindex)
|
|
|
+ ipc->oif = src_info->ipi6_ifindex;
|
|
|
ipc->addr = src_info->ipi6_addr.s6_addr32[3];
|
|
|
continue;
|
|
|
}
|
|
@@ -288,7 +289,8 @@ int ip_cmsg_send(struct sock *sk, struct msghdr *msg, struct ipcm_cookie *ipc,
|
|
|
if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct in_pktinfo)))
|
|
|
return -EINVAL;
|
|
|
info = (struct in_pktinfo *)CMSG_DATA(cmsg);
|
|
|
- ipc->oif = info->ipi_ifindex;
|
|
|
+ if (info->ipi_ifindex)
|
|
|
+ ipc->oif = info->ipi_ifindex;
|
|
|
ipc->addr = info->ipi_spec_dst.s_addr;
|
|
|
break;
|
|
|
}
|