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
Conflicts: net/bridge/br_mdb.c Minor conflict in br_mdb.c, in 'net' we added a memset of the on-stack 'ip' variable whereas in 'net-next' we assign a new member 'vid'. Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
commit
638d3c6381
904 changed files with 28373 additions and 16745 deletions
|
|
@ -1740,6 +1740,8 @@ static int inet_netconf_msgsize_devconf(int type)
|
|||
size += nla_total_size(4);
|
||||
if (type == -1 || type == NETCONFA_PROXY_NEIGH)
|
||||
size += nla_total_size(4);
|
||||
if (type == -1 || type == NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN)
|
||||
size += nla_total_size(4);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
|
@ -1780,6 +1782,10 @@ static int inet_netconf_fill_devconf(struct sk_buff *skb, int ifindex,
|
|||
nla_put_s32(skb, NETCONFA_PROXY_NEIGH,
|
||||
IPV4_DEVCONF(*devconf, PROXY_ARP)) < 0)
|
||||
goto nla_put_failure;
|
||||
if ((type == -1 || type == NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) &&
|
||||
nla_put_s32(skb, NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
|
||||
IPV4_DEVCONF(*devconf, IGNORE_ROUTES_WITH_LINKDOWN)) < 0)
|
||||
goto nla_put_failure;
|
||||
|
||||
nlmsg_end(skb, nlh);
|
||||
return 0;
|
||||
|
|
@ -1819,6 +1825,7 @@ static const struct nla_policy devconf_ipv4_policy[NETCONFA_MAX+1] = {
|
|||
[NETCONFA_FORWARDING] = { .len = sizeof(int) },
|
||||
[NETCONFA_RP_FILTER] = { .len = sizeof(int) },
|
||||
[NETCONFA_PROXY_NEIGH] = { .len = sizeof(int) },
|
||||
[NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN] = { .len = sizeof(int) },
|
||||
};
|
||||
|
||||
static int inet_netconf_get_devconf(struct sk_buff *in_skb,
|
||||
|
|
@ -2048,6 +2055,12 @@ static int devinet_conf_proc(struct ctl_table *ctl, int write,
|
|||
inet_netconf_notify_devconf(net, NETCONFA_PROXY_NEIGH,
|
||||
ifindex, cnf);
|
||||
}
|
||||
if (i == IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN - 1 &&
|
||||
new_value != old_value) {
|
||||
ifindex = devinet_conf_ifindex(net, cnf);
|
||||
inet_netconf_notify_devconf(net, NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
|
||||
ifindex, cnf);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -152,8 +152,8 @@ int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk,
|
|||
inet6_sk(sk)->tclass) < 0)
|
||||
goto errout;
|
||||
|
||||
if (ipv6_only_sock(sk) &&
|
||||
nla_put_u8(skb, INET_DIAG_SKV6ONLY, 1))
|
||||
if (((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE)) &&
|
||||
nla_put_u8(skb, INET_DIAG_SKV6ONLY, ipv6_only_sock(sk)))
|
||||
goto errout;
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -586,7 +586,8 @@ int ip_tunnel_encap(struct sk_buff *skb, struct ip_tunnel *t,
|
|||
EXPORT_SYMBOL(ip_tunnel_encap);
|
||||
|
||||
static int tnl_update_pmtu(struct net_device *dev, struct sk_buff *skb,
|
||||
struct rtable *rt, __be16 df)
|
||||
struct rtable *rt, __be16 df,
|
||||
const struct iphdr *inner_iph)
|
||||
{
|
||||
struct ip_tunnel *tunnel = netdev_priv(dev);
|
||||
int pkt_size = skb->len - tunnel->hlen - dev->hard_header_len;
|
||||
|
|
@ -603,7 +604,8 @@ static int tnl_update_pmtu(struct net_device *dev, struct sk_buff *skb,
|
|||
|
||||
if (skb->protocol == htons(ETH_P_IP)) {
|
||||
if (!skb_is_gso(skb) &&
|
||||
(df & htons(IP_DF)) && mtu < pkt_size) {
|
||||
(inner_iph->frag_off & htons(IP_DF)) &&
|
||||
mtu < pkt_size) {
|
||||
memset(IPCB(skb), 0, sizeof(*IPCB(skb)));
|
||||
icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, htonl(mtu));
|
||||
return -E2BIG;
|
||||
|
|
@ -737,7 +739,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
|
|||
goto tx_error;
|
||||
}
|
||||
|
||||
if (tnl_update_pmtu(dev, skb, rt, tnl_params->frag_off)) {
|
||||
if (tnl_update_pmtu(dev, skb, rt, tnl_params->frag_off, inner_iph)) {
|
||||
ip_rt_put(rt);
|
||||
goto tx_error;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -254,9 +254,10 @@ unsigned int arpt_do_table(struct sk_buff *skb,
|
|||
static const char nulldevname[IFNAMSIZ] __attribute__((aligned(sizeof(long))));
|
||||
unsigned int verdict = NF_DROP;
|
||||
const struct arphdr *arp;
|
||||
struct arpt_entry *e, *back;
|
||||
struct arpt_entry *e, **jumpstack;
|
||||
const char *indev, *outdev;
|
||||
const void *table_base;
|
||||
unsigned int cpu, stackidx = 0;
|
||||
const struct xt_table_info *private;
|
||||
struct xt_action_param acpar;
|
||||
unsigned int addend;
|
||||
|
|
@ -270,15 +271,16 @@ unsigned int arpt_do_table(struct sk_buff *skb,
|
|||
local_bh_disable();
|
||||
addend = xt_write_recseq_begin();
|
||||
private = table->private;
|
||||
cpu = smp_processor_id();
|
||||
/*
|
||||
* Ensure we load private-> members after we've fetched the base
|
||||
* pointer.
|
||||
*/
|
||||
smp_read_barrier_depends();
|
||||
table_base = private->entries;
|
||||
jumpstack = (struct arpt_entry **)private->jumpstack[cpu];
|
||||
|
||||
e = get_entry(table_base, private->hook_entry[hook]);
|
||||
back = get_entry(table_base, private->underflow[hook]);
|
||||
|
||||
acpar.in = state->in;
|
||||
acpar.out = state->out;
|
||||
|
|
@ -312,18 +314,23 @@ unsigned int arpt_do_table(struct sk_buff *skb,
|
|||
verdict = (unsigned int)(-v) - 1;
|
||||
break;
|
||||
}
|
||||
e = back;
|
||||
back = get_entry(table_base, back->comefrom);
|
||||
if (stackidx == 0) {
|
||||
e = get_entry(table_base,
|
||||
private->underflow[hook]);
|
||||
} else {
|
||||
e = jumpstack[--stackidx];
|
||||
e = arpt_next_entry(e);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (table_base + v
|
||||
!= arpt_next_entry(e)) {
|
||||
/* Save old back ptr in next entry */
|
||||
struct arpt_entry *next = arpt_next_entry(e);
|
||||
next->comefrom = (void *)back - table_base;
|
||||
|
||||
/* set back pointer to next entry */
|
||||
back = next;
|
||||
if (stackidx >= private->stacksize) {
|
||||
verdict = NF_DROP;
|
||||
break;
|
||||
}
|
||||
jumpstack[stackidx++] = e;
|
||||
}
|
||||
|
||||
e = get_entry(table_base, v);
|
||||
|
|
|
|||
Loading…
Reference in a new issue