Code Review
/
kvmfornfv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Upgrade to 4.4.50-rt62
[kvmfornfv.git]
/
kernel
/
net
/
ipv6
/
udp.c
diff --git
a/kernel/net/ipv6/udp.c
b/kernel/net/ipv6/udp.c
index
9da3287
..
dfa85e7
100644
(file)
--- a/
kernel/net/ipv6/udp.c
+++ b/
kernel/net/ipv6/udp.c
@@
-402,6
+402,7
@@
int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int peeked, off = 0;
int err;
int is_udplite = IS_UDPLITE(sk);
int peeked, off = 0;
int err;
int is_udplite = IS_UDPLITE(sk);
+ bool checksum_valid = false;
int is_udp4;
bool slow;
int is_udp4;
bool slow;
@@
-433,11
+434,12
@@
try_again:
*/
if (copied < ulen || UDP_SKB_CB(skb)->partial_cov) {
*/
if (copied < ulen || UDP_SKB_CB(skb)->partial_cov) {
- if (udp_lib_checksum_complete(skb))
+ checksum_valid = !udp_lib_checksum_complete(skb);
+ if (!checksum_valid)
goto csum_copy_err;
}
goto csum_copy_err;
}
- if (skb_csum_unnecessary(skb))
+ if (
checksum_valid ||
skb_csum_unnecessary(skb))
err = skb_copy_datagram_msg(skb, sizeof(struct udphdr),
msg, copied);
else {
err = skb_copy_datagram_msg(skb, sizeof(struct udphdr),
msg, copied);
else {
@@
-496,7
+498,8
@@
try_again:
if (is_udp4) {
if (inet->cmsg_flags)
if (is_udp4) {
if (inet->cmsg_flags)
- ip_cmsg_recv(msg, skb);
+ ip_cmsg_recv_offset(msg, skb,
+ sizeof(struct udphdr), off);
} else {
if (np->rxopt.all)
ip6_datagram_recv_specific_ctl(sk, msg, skb);
} else {
if (np->rxopt.all)
ip6_datagram_recv_specific_ctl(sk, msg, skb);
@@
-647,7
+650,7
@@
int udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
/* if we're overly short, let UDP handle it */
encap_rcv = ACCESS_ONCE(up->encap_rcv);
/* if we're overly short, let UDP handle it */
encap_rcv = ACCESS_ONCE(up->encap_rcv);
- if (
skb->len > sizeof(struct udphdr) &&
encap_rcv) {
+ if (encap_rcv) {
int ret;
/* Verify checksum before giving to encap */
int ret;
/* Verify checksum before giving to encap */
@@
-837,8
+840,8
@@
start_lookup:
flush_stack(stack, count, skb, count - 1);
} else {
if (!inner_flushed)
flush_stack(stack, count, skb, count - 1);
} else {
if (!inner_flushed)
- UDP_INC_STATS_BH(net, UDP_MIB_IGNOREDMULTI,
- proto == IPPROTO_UDPLITE);
+ UDP
6
_INC_STATS_BH(net, UDP_MIB_IGNOREDMULTI,
+
proto == IPPROTO_UDPLITE);
consume_skb(skb);
}
return 0;
consume_skb(skb);
}
return 0;
@@
-916,11
+919,9
@@
int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
ret = udpv6_queue_rcv_skb(sk, skb);
sock_put(sk);
ret = udpv6_queue_rcv_skb(sk, skb);
sock_put(sk);
- /* a return value > 0 means to resubmit the input, but
- * it wants the return to be -protocol, or 0
- */
+ /* a return value > 0 means to resubmit the input */
if (ret > 0)
if (ret > 0)
- return
-
ret;
+ return ret;
return 0;
}
return 0;
}