mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull in the 'net' tree to get Daniel Borkmann's flow dissector infrastructure change. Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
commit
61816596d1
407 changed files with 2900 additions and 1799 deletions
|
|
@ -114,6 +114,7 @@ ip6t_dnpt_tg(struct sk_buff *skb, const struct xt_action_param *par)
|
|||
static struct xt_target ip6t_npt_target_reg[] __read_mostly = {
|
||||
{
|
||||
.name = "SNPT",
|
||||
.table = "mangle",
|
||||
.target = ip6t_snpt_tg,
|
||||
.targetsize = sizeof(struct ip6t_npt_tginfo),
|
||||
.checkentry = ip6t_npt_checkentry,
|
||||
|
|
@ -124,6 +125,7 @@ static struct xt_target ip6t_npt_target_reg[] __read_mostly = {
|
|||
},
|
||||
{
|
||||
.name = "DNPT",
|
||||
.table = "mangle",
|
||||
.target = ip6t_dnpt_tg,
|
||||
.targetsize = sizeof(struct ip6t_npt_tginfo),
|
||||
.checkentry = ip6t_npt_checkentry,
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@
|
|||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "IPv6-nf: " fmt
|
||||
|
||||
#include <linux/errno.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/string.h>
|
||||
|
|
@ -180,13 +182,11 @@ static inline struct frag_queue *fq_find(struct net *net, __be32 id,
|
|||
|
||||
q = inet_frag_find(&net->nf_frag.frags, &nf_frags, &arg, hash);
|
||||
local_bh_enable();
|
||||
if (q == NULL)
|
||||
goto oom;
|
||||
|
||||
if (IS_ERR_OR_NULL(q)) {
|
||||
inet_frag_maybe_warn_overflow(q, pr_fmt());
|
||||
return NULL;
|
||||
}
|
||||
return container_of(q, struct frag_queue, q);
|
||||
|
||||
oom:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,9 @@
|
|||
* YOSHIFUJI,H. @USAGI Always remove fragment header to
|
||||
* calculate ICV correctly.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "IPv6: " fmt
|
||||
|
||||
#include <linux/errno.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/string.h>
|
||||
|
|
@ -185,9 +188,10 @@ fq_find(struct net *net, __be32 id, const struct in6_addr *src, const struct in6
|
|||
hash = inet6_hash_frag(id, src, dst, ip6_frags.rnd);
|
||||
|
||||
q = inet_frag_find(&net->ipv6.frags, &ip6_frags, &arg, hash);
|
||||
if (q == NULL)
|
||||
if (IS_ERR_OR_NULL(q)) {
|
||||
inet_frag_maybe_warn_overflow(q, pr_fmt());
|
||||
return NULL;
|
||||
|
||||
}
|
||||
return container_of(q, struct frag_queue, q);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -389,6 +389,13 @@ static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
|||
}
|
||||
|
||||
if (type == ICMPV6_PKT_TOOBIG) {
|
||||
/* We are not interested in TCP_LISTEN and open_requests
|
||||
* (SYN-ACKs send out by Linux are always <576bytes so
|
||||
* they should go through unfragmented).
|
||||
*/
|
||||
if (sk->sk_state == TCP_LISTEN)
|
||||
goto out;
|
||||
|
||||
tp->mtu_info = ntohl(info);
|
||||
if (!sock_owned_by_user(sk))
|
||||
tcp_v6_mtu_reduced(sk);
|
||||
|
|
|
|||
|
|
@ -1286,10 +1286,18 @@ do_confirm:
|
|||
|
||||
void udpv6_destroy_sock(struct sock *sk)
|
||||
{
|
||||
struct udp_sock *up = udp_sk(sk);
|
||||
lock_sock(sk);
|
||||
udp_v6_flush_pending_frames(sk);
|
||||
release_sock(sk);
|
||||
|
||||
if (static_key_false(&udpv6_encap_needed) && up->encap_type) {
|
||||
void (*encap_destroy)(struct sock *sk);
|
||||
encap_destroy = ACCESS_ONCE(up->encap_destroy);
|
||||
if (encap_destroy)
|
||||
encap_destroy(sk);
|
||||
}
|
||||
|
||||
inet6_destroy_sock(sk);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue