aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/udp.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/udp.c')
-rw-r--r--net/ipv6/udp.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 81eb8cf8389b..fa9d988f4012 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -393,10 +393,10 @@ int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk,
393 bool slow; 393 bool slow;
394 394
395 if (flags & MSG_ERRQUEUE) 395 if (flags & MSG_ERRQUEUE)
396 return ipv6_recv_error(sk, msg, len); 396 return ipv6_recv_error(sk, msg, len, addr_len);
397 397
398 if (np->rxpmtu && np->rxopt.bits.rxpmtu) 398 if (np->rxpmtu && np->rxopt.bits.rxpmtu)
399 return ipv6_recv_rxpmtu(sk, msg, len); 399 return ipv6_recv_rxpmtu(sk, msg, len, addr_len);
400 400
401try_again: 401try_again:
402 skb = __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0), 402 skb = __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),
@@ -538,8 +538,11 @@ void __udp6_lib_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
538 if (sk == NULL) 538 if (sk == NULL)
539 return; 539 return;
540 540
541 if (type == ICMPV6_PKT_TOOBIG) 541 if (type == ICMPV6_PKT_TOOBIG) {
542 if (!ip6_sk_accept_pmtu(sk))
543 goto out;
542 ip6_sk_update_pmtu(skb, sk, info); 544 ip6_sk_update_pmtu(skb, sk, info);
545 }
543 if (type == NDISC_REDIRECT) { 546 if (type == NDISC_REDIRECT) {
544 ip6_sk_redirect(skb, sk); 547 ip6_sk_redirect(skb, sk);
545 goto out; 548 goto out;
@@ -1140,7 +1143,6 @@ do_udp_sendmsg:
1140 flowlabel = fl6_sock_lookup(sk, fl6.flowlabel); 1143 flowlabel = fl6_sock_lookup(sk, fl6.flowlabel);
1141 if (flowlabel == NULL) 1144 if (flowlabel == NULL)
1142 return -EINVAL; 1145 return -EINVAL;
1143 daddr = &flowlabel->dst;
1144 } 1146 }
1145 } 1147 }
1146 1148
@@ -1221,7 +1223,7 @@ do_udp_sendmsg:
1221 1223
1222 security_sk_classify_flow(sk, flowi6_to_flowi(&fl6)); 1224 security_sk_classify_flow(sk, flowi6_to_flowi(&fl6));
1223 1225
1224 dst = ip6_sk_dst_lookup_flow(sk, &fl6, final_p, true); 1226 dst = ip6_sk_dst_lookup_flow(sk, &fl6, final_p);
1225 if (IS_ERR(dst)) { 1227 if (IS_ERR(dst)) {
1226 err = PTR_ERR(dst); 1228 err = PTR_ERR(dst);
1227 dst = NULL; 1229 dst = NULL;