|
@@ -318,7 +318,7 @@ void ipv6_local_rxpmtu(struct sock *sk, struct flowi6 *fl6, u32 mtu)
|
|
|
/*
|
|
|
* Handle MSG_ERRQUEUE
|
|
|
*/
|
|
|
-int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
|
|
|
+int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
|
|
|
{
|
|
|
struct ipv6_pinfo *np = inet6_sk(sk);
|
|
|
struct sock_exterr_skb *serr;
|
|
@@ -369,6 +369,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
|
|
|
&sin->sin6_addr);
|
|
|
sin->sin6_scope_id = 0;
|
|
|
}
|
|
|
+ *addr_len = sizeof(*sin);
|
|
|
}
|
|
|
|
|
|
memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err));
|
|
@@ -423,7 +424,8 @@ EXPORT_SYMBOL_GPL(ipv6_recv_error);
|
|
|
/*
|
|
|
* Handle IPV6_RECVPATHMTU
|
|
|
*/
|
|
|
-int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len)
|
|
|
+int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len,
|
|
|
+ int *addr_len)
|
|
|
{
|
|
|
struct ipv6_pinfo *np = inet6_sk(sk);
|
|
|
struct sk_buff *skb;
|
|
@@ -457,6 +459,7 @@ int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len)
|
|
|
sin->sin6_port = 0;
|
|
|
sin->sin6_scope_id = mtu_info.ip6m_addr.sin6_scope_id;
|
|
|
sin->sin6_addr = mtu_info.ip6m_addr.sin6_addr;
|
|
|
+ *addr_len = sizeof(*sin);
|
|
|
}
|
|
|
|
|
|
put_cmsg(msg, SOL_IPV6, IPV6_PATHMTU, sizeof(mtu_info), &mtu_info);
|