mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
Pablo Neira Ayuso says: ==================== Netfilter updates for net-next The following patchset contains Netfilter/IPVS updates for your net-next tree. In sum, patches to address fallout from the previous round plus updates from the IPVS folks via Simon Horman, they are: 1) Add a new scheduler to IPVS: The weighted overflow scheduling algorithm directs network connections to the server with the highest weight that is currently available and overflows to the next when active connections exceed the node's weight. From Raducu Deaconu. 2) Fix locking ordering in IPVS, always take rtnl_lock in first place. Patch from Julian Anastasov. 3) Allow to indicate the MTU to the IPVS in-kernel state sync daemon. From Julian Anastasov. 4) Enhance multicast configuration for the IPVS state sync daemon. Also from Julian. 5) Resolve sparse warnings in the nf_dup modules. 6) Fix a linking problem when CONFIG_NF_DUP_IPV6 is not set. 7) Add ICMP codes 5 and 6 to IPv6 REJECT target, they are more informative subsets of code 1. From Andreas Herz. 8) Revert the jumpstack size calculation from mark_source_chains due to chain depth miscalculations, from Florian Westphal. 9) Calm down more sparse warning around the Netfilter tree, again from Florian Westphal. ==================== Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
commit
581a5f2a61
19 changed files with 446 additions and 195 deletions
|
|
@ -367,13 +367,10 @@ static inline bool unconditional(const struct arpt_arp *arp)
|
|||
|
||||
/* Figures out from what hook each rule can be called: returns 0 if
|
||||
* there are loops. Puts hook bitmask in comefrom.
|
||||
*
|
||||
* Keeps track of largest call depth seen and stores it in newinfo->stacksize.
|
||||
*/
|
||||
static int mark_source_chains(struct xt_table_info *newinfo,
|
||||
static int mark_source_chains(const struct xt_table_info *newinfo,
|
||||
unsigned int valid_hooks, void *entry0)
|
||||
{
|
||||
unsigned int calldepth, max_calldepth = 0;
|
||||
unsigned int hook;
|
||||
|
||||
/* No recursion; use packet counter to save back ptrs (reset
|
||||
|
|
@ -389,7 +386,6 @@ static int mark_source_chains(struct xt_table_info *newinfo,
|
|||
|
||||
/* Set initial back pointer. */
|
||||
e->counters.pcnt = pos;
|
||||
calldepth = 0;
|
||||
|
||||
for (;;) {
|
||||
const struct xt_standard_target *t
|
||||
|
|
@ -444,8 +440,6 @@ static int mark_source_chains(struct xt_table_info *newinfo,
|
|||
(entry0 + pos + size);
|
||||
e->counters.pcnt = pos;
|
||||
pos += size;
|
||||
if (calldepth > 0)
|
||||
--calldepth;
|
||||
} else {
|
||||
int newpos = t->verdict;
|
||||
|
||||
|
|
@ -460,10 +454,6 @@ static int mark_source_chains(struct xt_table_info *newinfo,
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (entry0 + newpos != arpt_next_entry(e) &&
|
||||
++calldepth > max_calldepth)
|
||||
max_calldepth = calldepth;
|
||||
|
||||
/* This a jump; chase it. */
|
||||
duprintf("Jump rule %u -> %u\n",
|
||||
pos, newpos);
|
||||
|
|
@ -480,7 +470,6 @@ static int mark_source_chains(struct xt_table_info *newinfo,
|
|||
next:
|
||||
duprintf("Finished chain %u\n", hook);
|
||||
}
|
||||
newinfo->stacksize = max_calldepth;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -670,6 +659,9 @@ static int translate_table(struct xt_table_info *newinfo, void *entry0,
|
|||
if (ret != 0)
|
||||
break;
|
||||
++i;
|
||||
if (strcmp(arpt_get_target(iter)->u.user.name,
|
||||
XT_ERROR_TARGET) == 0)
|
||||
++newinfo->stacksize;
|
||||
}
|
||||
duprintf("translate_table: ARPT_ENTRY_ITERATE gives %d\n", ret);
|
||||
if (ret != 0)
|
||||
|
|
@ -1442,6 +1434,9 @@ static int translate_compat_table(const char *name,
|
|||
break;
|
||||
}
|
||||
++i;
|
||||
if (strcmp(arpt_get_target(iter1)->u.user.name,
|
||||
XT_ERROR_TARGET) == 0)
|
||||
++newinfo->stacksize;
|
||||
}
|
||||
if (ret) {
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -443,15 +443,11 @@ ipt_do_table(struct sk_buff *skb,
|
|||
}
|
||||
|
||||
/* Figures out from what hook each rule can be called: returns 0 if
|
||||
* there are loops. Puts hook bitmask in comefrom.
|
||||
*
|
||||
* Keeps track of largest call depth seen and stores it in newinfo->stacksize.
|
||||
*/
|
||||
there are loops. Puts hook bitmask in comefrom. */
|
||||
static int
|
||||
mark_source_chains(struct xt_table_info *newinfo,
|
||||
mark_source_chains(const struct xt_table_info *newinfo,
|
||||
unsigned int valid_hooks, void *entry0)
|
||||
{
|
||||
unsigned int calldepth, max_calldepth = 0;
|
||||
unsigned int hook;
|
||||
|
||||
/* No recursion; use packet counter to save back ptrs (reset
|
||||
|
|
@ -465,7 +461,6 @@ mark_source_chains(struct xt_table_info *newinfo,
|
|||
|
||||
/* Set initial back pointer. */
|
||||
e->counters.pcnt = pos;
|
||||
calldepth = 0;
|
||||
|
||||
for (;;) {
|
||||
const struct xt_standard_target *t
|
||||
|
|
@ -527,9 +522,6 @@ mark_source_chains(struct xt_table_info *newinfo,
|
|||
(entry0 + pos + size);
|
||||
e->counters.pcnt = pos;
|
||||
pos += size;
|
||||
WARN_ON_ONCE(calldepth == 0);
|
||||
if (calldepth > 0)
|
||||
--calldepth;
|
||||
} else {
|
||||
int newpos = t->verdict;
|
||||
|
||||
|
|
@ -543,14 +535,9 @@ mark_source_chains(struct xt_table_info *newinfo,
|
|||
newpos);
|
||||
return 0;
|
||||
}
|
||||
if (entry0 + newpos != ipt_next_entry(e) &&
|
||||
!(e->ip.flags & IPT_F_GOTO) &&
|
||||
++calldepth > max_calldepth)
|
||||
max_calldepth = calldepth;
|
||||
|
||||
/* This a jump; chase it. */
|
||||
duprintf("Jump rule %u -> %u, calldepth %d\n",
|
||||
pos, newpos, calldepth);
|
||||
duprintf("Jump rule %u -> %u\n",
|
||||
pos, newpos);
|
||||
} else {
|
||||
/* ... this is a fallthru */
|
||||
newpos = pos + e->next_offset;
|
||||
|
|
@ -564,7 +551,6 @@ mark_source_chains(struct xt_table_info *newinfo,
|
|||
next:
|
||||
duprintf("Finished chain %u\n", hook);
|
||||
}
|
||||
newinfo->stacksize = max_calldepth;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -844,6 +830,9 @@ translate_table(struct net *net, struct xt_table_info *newinfo, void *entry0,
|
|||
if (ret != 0)
|
||||
return ret;
|
||||
++i;
|
||||
if (strcmp(ipt_get_target(iter)->u.user.name,
|
||||
XT_ERROR_TARGET) == 0)
|
||||
++newinfo->stacksize;
|
||||
}
|
||||
|
||||
if (i != repl->num_entries) {
|
||||
|
|
@ -1759,6 +1748,9 @@ translate_compat_table(struct net *net,
|
|||
if (ret != 0)
|
||||
break;
|
||||
++i;
|
||||
if (strcmp(ipt_get_target(iter1)->u.user.name,
|
||||
XT_ERROR_TARGET) == 0)
|
||||
++newinfo->stacksize;
|
||||
}
|
||||
if (ret) {
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ static void nft_dup_ipv4_eval(const struct nft_expr *expr,
|
|||
{
|
||||
struct nft_dup_ipv4 *priv = nft_expr_priv(expr);
|
||||
struct in_addr gw = {
|
||||
.s_addr = regs->data[priv->sreg_addr],
|
||||
.s_addr = (__force __be32)regs->data[priv->sreg_addr],
|
||||
};
|
||||
int oif = regs->data[priv->sreg_dev];
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue