Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
Pablo Neira Ayuso says: ==================== Netfilter/IPVS updates for net-next The following patchset contains Netfilter/IPVS updates for your net-next tree. A couple of new features for nf_tables, and unsorted cleanups and incremental updates for the Netfilter tree. More specifically, they are: 1) Allow to check for TCP option presence via nft_exthdr, patch from Phil Sutter. 2) Add symmetric hash support to nft_hash, from Laura Garcia Liebana. 3) Use pr_cont() in ebt_log, from Joe Perches. 4) Remove some dead code in arp_tables reported via static analysis tool, from Colin Ian King. 5) Consolidate nf_tables expression validation, from Liping Zhang. 6) Consolidate set lookup via nft_set_lookup(). 7) Remove unnecessary rcu read lock side in bridge netfilter, from Florian Westphal. 8) Remove unused variable in nf_reject_ipv4, from Tahee Yoo. 9) Pass nft_ctx struct to object initialization indirections, from Florian Westphal. 10) Add code to integrate conntrack helper into nf_tables, also from Florian. 11) Allow to check if interface index or name exists via NFTA_FIB_F_PRESENT, from Phil Sutter. 12) Simplify resolve_normal_ct(), from Florian. 13) Use per-limit spinlock in nft_limit and xt_limit, from Liping Zhang. 14) Use rwlock in nft_set_rbtree set, also from Liping Zhang. 15) One patch to remove a useless printk at netns init path in ipvs, and several patches to document IPVS knobs. 16) Use refcount_t for reference counter in the Netfilter/IPVS code, from Elena Reshetova. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -562,8 +562,6 @@ static int translate_table(struct xt_table_info *newinfo, void *entry0,
|
||||
XT_ERROR_TARGET) == 0)
|
||||
++newinfo->stacksize;
|
||||
}
|
||||
if (ret != 0)
|
||||
goto out_free;
|
||||
|
||||
ret = -EINVAL;
|
||||
if (i != repl->num_entries)
|
||||
|
@@ -22,6 +22,7 @@
|
||||
#include <linux/icmp.h>
|
||||
#include <linux/if_arp.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/refcount.h>
|
||||
#include <linux/netfilter_arp.h>
|
||||
#include <linux/netfilter/x_tables.h>
|
||||
#include <linux/netfilter_ipv4/ip_tables.h>
|
||||
@@ -40,8 +41,8 @@ MODULE_DESCRIPTION("Xtables: CLUSTERIP target");
|
||||
|
||||
struct clusterip_config {
|
||||
struct list_head list; /* list of all configs */
|
||||
atomic_t refcount; /* reference count */
|
||||
atomic_t entries; /* number of entries/rules
|
||||
refcount_t refcount; /* reference count */
|
||||
refcount_t entries; /* number of entries/rules
|
||||
* referencing us */
|
||||
|
||||
__be32 clusterip; /* the IP address */
|
||||
@@ -77,7 +78,7 @@ struct clusterip_net {
|
||||
static inline void
|
||||
clusterip_config_get(struct clusterip_config *c)
|
||||
{
|
||||
atomic_inc(&c->refcount);
|
||||
refcount_inc(&c->refcount);
|
||||
}
|
||||
|
||||
|
||||
@@ -89,7 +90,7 @@ static void clusterip_config_rcu_free(struct rcu_head *head)
|
||||
static inline void
|
||||
clusterip_config_put(struct clusterip_config *c)
|
||||
{
|
||||
if (atomic_dec_and_test(&c->refcount))
|
||||
if (refcount_dec_and_test(&c->refcount))
|
||||
call_rcu_bh(&c->rcu, clusterip_config_rcu_free);
|
||||
}
|
||||
|
||||
@@ -103,7 +104,7 @@ clusterip_config_entry_put(struct clusterip_config *c)
|
||||
struct clusterip_net *cn = net_generic(net, clusterip_net_id);
|
||||
|
||||
local_bh_disable();
|
||||
if (atomic_dec_and_lock(&c->entries, &cn->lock)) {
|
||||
if (refcount_dec_and_lock(&c->entries, &cn->lock)) {
|
||||
list_del_rcu(&c->list);
|
||||
spin_unlock(&cn->lock);
|
||||
local_bh_enable();
|
||||
@@ -149,10 +150,10 @@ clusterip_config_find_get(struct net *net, __be32 clusterip, int entry)
|
||||
c = NULL;
|
||||
else
|
||||
#endif
|
||||
if (unlikely(!atomic_inc_not_zero(&c->refcount)))
|
||||
if (unlikely(!refcount_inc_not_zero(&c->refcount)))
|
||||
c = NULL;
|
||||
else if (entry)
|
||||
atomic_inc(&c->entries);
|
||||
refcount_inc(&c->entries);
|
||||
}
|
||||
rcu_read_unlock_bh();
|
||||
|
||||
@@ -188,8 +189,8 @@ clusterip_config_init(const struct ipt_clusterip_tgt_info *i, __be32 ip,
|
||||
clusterip_config_init_nodelist(c, i);
|
||||
c->hash_mode = i->hash_mode;
|
||||
c->hash_initval = i->hash_initval;
|
||||
atomic_set(&c->refcount, 1);
|
||||
atomic_set(&c->entries, 1);
|
||||
refcount_set(&c->refcount, 1);
|
||||
refcount_set(&c->entries, 1);
|
||||
|
||||
spin_lock_bh(&cn->lock);
|
||||
if (__clusterip_config_find(net, ip)) {
|
||||
|
@@ -998,18 +998,6 @@ err_id_free:
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
static void hex_dump(const unsigned char *buf, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
if (i && !(i % 16))
|
||||
printk("\n");
|
||||
printk("%02x ", *(buf + i));
|
||||
}
|
||||
printk("\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse and mangle SNMP message according to mapping.
|
||||
* (And this is the fucking 'basic' method).
|
||||
@@ -1026,7 +1014,8 @@ static int snmp_parse_mangle(unsigned char *msg,
|
||||
struct snmp_object *obj;
|
||||
|
||||
if (debug > 1)
|
||||
hex_dump(msg, len);
|
||||
print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_NONE, 16, 1,
|
||||
msg, len, 0);
|
||||
|
||||
asn1_open(&ctx, msg, len);
|
||||
|
||||
|
@@ -104,7 +104,6 @@ EXPORT_SYMBOL_GPL(nf_reject_ip_tcphdr_put);
|
||||
void nf_send_reset(struct net *net, struct sk_buff *oldskb, int hook)
|
||||
{
|
||||
struct sk_buff *nskb;
|
||||
const struct iphdr *oiph;
|
||||
struct iphdr *niph;
|
||||
const struct tcphdr *oth;
|
||||
struct tcphdr _oth;
|
||||
@@ -116,8 +115,6 @@ void nf_send_reset(struct net *net, struct sk_buff *oldskb, int hook)
|
||||
if (skb_rtable(oldskb)->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST))
|
||||
return;
|
||||
|
||||
oiph = ip_hdr(oldskb);
|
||||
|
||||
nskb = alloc_skb(sizeof(struct iphdr) + sizeof(struct tcphdr) +
|
||||
LL_MAX_HEADER, GFP_ATOMIC);
|
||||
if (!nskb)
|
||||
|
@@ -90,7 +90,7 @@ void nft_fib4_eval(const struct nft_expr *expr, struct nft_regs *regs,
|
||||
|
||||
if (nft_hook(pkt) == NF_INET_PRE_ROUTING &&
|
||||
nft_fib_is_loopback(pkt->skb, nft_in(pkt))) {
|
||||
nft_fib_store_result(dest, priv->result, pkt,
|
||||
nft_fib_store_result(dest, priv, pkt,
|
||||
nft_in(pkt)->ifindex);
|
||||
return;
|
||||
}
|
||||
@@ -99,7 +99,7 @@ void nft_fib4_eval(const struct nft_expr *expr, struct nft_regs *regs,
|
||||
if (ipv4_is_zeronet(iph->saddr)) {
|
||||
if (ipv4_is_lbcast(iph->daddr) ||
|
||||
ipv4_is_local_multicast(iph->daddr)) {
|
||||
nft_fib_store_result(dest, priv->result, pkt,
|
||||
nft_fib_store_result(dest, priv, pkt,
|
||||
get_ifindex(pkt->skb->dev));
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user