diff options
author | Ingo Molnar <mingo@kernel.org> | 2019-02-04 08:45:42 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2019-02-04 08:45:42 +0100 |
commit | 98cb621081705e2244ef6c265ff8a9f2208c7e2a (patch) | |
tree | 6205be47a83d54d3e35e049b67973244120f8bd6 /net/ipv6/udp.c | |
parent | b844ff366f06a2bcecfbd053b4d4a472e670dec8 (diff) | |
parent | 9dff0aa95a324e262ffb03f425d00e4751f3294e (diff) | |
download | linux-98cb621081705e2244ef6c265ff8a9f2208c7e2a.tar.gz linux-98cb621081705e2244ef6c265ff8a9f2208c7e2a.tar.bz2 linux-98cb621081705e2244ef6c265ff8a9f2208c7e2a.zip |
Merge branch 'perf/urgent' into perf/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'net/ipv6/udp.c')
-rw-r--r-- | net/ipv6/udp.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 7c3505006f8e..2596ffdeebea 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -102,7 +102,7 @@ int udp_v6_get_port(struct sock *sk, unsigned short snum) return udp_lib_get_port(sk, snum, hash2_nulladdr); } -static void udp_v6_rehash(struct sock *sk) +void udp_v6_rehash(struct sock *sk) { u16 new_hash = ipv6_portaddr_hash(sock_net(sk), &sk->sk_v6_rcv_saddr, @@ -1132,15 +1132,23 @@ static int udp_v6_send_skb(struct sk_buff *skb, struct flowi6 *fl6, const int hlen = skb_network_header_len(skb) + sizeof(struct udphdr); - if (hlen + cork->gso_size > cork->fragsize) + if (hlen + cork->gso_size > cork->fragsize) { + kfree_skb(skb); return -EINVAL; - if (skb->len > cork->gso_size * UDP_MAX_SEGMENTS) + } + if (skb->len > cork->gso_size * UDP_MAX_SEGMENTS) { + kfree_skb(skb); return -EINVAL; - if (udp_sk(sk)->no_check6_tx) + } + if (udp_sk(sk)->no_check6_tx) { + kfree_skb(skb); return -EINVAL; + } if (skb->ip_summed != CHECKSUM_PARTIAL || is_udplite || - dst_xfrm(skb_dst(skb))) + dst_xfrm(skb_dst(skb))) { + kfree_skb(skb); return -EIO; + } skb_shinfo(skb)->gso_size = cork->gso_size; skb_shinfo(skb)->gso_type = SKB_GSO_UDP_L4; |