Commit af740b2c authored by Jesper Dangaard Brouer's avatar Jesper Dangaard Brouer Committed by Patrick McHardy

netfilter: nf_conntrack: extend with extra stat counter

I suspect an unfortunatly series of events occuring under a DDoS
attack, in function __nf_conntrack_find() nf_contrack_core.c.

Adding a stats counter to see if the search is restarted too often.
Signed-off-by: default avatarJesper Dangaard Brouer <hawk@comx.dk>
Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
parent cecc74de
...@@ -113,6 +113,7 @@ struct ip_conntrack_stat { ...@@ -113,6 +113,7 @@ struct ip_conntrack_stat {
unsigned int expect_new; unsigned int expect_new;
unsigned int expect_create; unsigned int expect_create;
unsigned int expect_delete; unsigned int expect_delete;
unsigned int search_restart;
}; };
/* call to create an explicit dependency on nf_conntrack. */ /* call to create an explicit dependency on nf_conntrack. */
......
...@@ -336,12 +336,12 @@ static int ct_cpu_seq_show(struct seq_file *seq, void *v) ...@@ -336,12 +336,12 @@ static int ct_cpu_seq_show(struct seq_file *seq, void *v)
const struct ip_conntrack_stat *st = v; const struct ip_conntrack_stat *st = v;
if (v == SEQ_START_TOKEN) { if (v == SEQ_START_TOKEN) {
seq_printf(seq, "entries searched found new invalid ignore delete delete_list insert insert_failed drop early_drop icmp_error expect_new expect_create expect_delete\n"); seq_printf(seq, "entries searched found new invalid ignore delete delete_list insert insert_failed drop early_drop icmp_error expect_new expect_create expect_delete search_restart\n");
return 0; return 0;
} }
seq_printf(seq, "%08x %08x %08x %08x %08x %08x %08x %08x " seq_printf(seq, "%08x %08x %08x %08x %08x %08x %08x %08x "
"%08x %08x %08x %08x %08x %08x %08x %08x \n", "%08x %08x %08x %08x %08x %08x %08x %08x %08x\n",
nr_conntracks, nr_conntracks,
st->searched, st->searched,
st->found, st->found,
...@@ -358,7 +358,8 @@ static int ct_cpu_seq_show(struct seq_file *seq, void *v) ...@@ -358,7 +358,8 @@ static int ct_cpu_seq_show(struct seq_file *seq, void *v)
st->expect_new, st->expect_new,
st->expect_create, st->expect_create,
st->expect_delete st->expect_delete,
st->search_restart
); );
return 0; return 0;
} }
......
...@@ -319,8 +319,10 @@ __nf_conntrack_find(struct net *net, u16 zone, ...@@ -319,8 +319,10 @@ __nf_conntrack_find(struct net *net, u16 zone,
* not the expected one, we must restart lookup. * not the expected one, we must restart lookup.
* We probably met an item that was moved to another chain. * We probably met an item that was moved to another chain.
*/ */
if (get_nulls_value(n) != hash) if (get_nulls_value(n) != hash) {
NF_CT_STAT_INC(net, search_restart);
goto begin; goto begin;
}
local_bh_enable(); local_bh_enable();
return NULL; return NULL;
......
...@@ -252,12 +252,12 @@ static int ct_cpu_seq_show(struct seq_file *seq, void *v) ...@@ -252,12 +252,12 @@ static int ct_cpu_seq_show(struct seq_file *seq, void *v)
const struct ip_conntrack_stat *st = v; const struct ip_conntrack_stat *st = v;
if (v == SEQ_START_TOKEN) { if (v == SEQ_START_TOKEN) {
seq_printf(seq, "entries searched found new invalid ignore delete delete_list insert insert_failed drop early_drop icmp_error expect_new expect_create expect_delete\n"); seq_printf(seq, "entries searched found new invalid ignore delete delete_list insert insert_failed drop early_drop icmp_error expect_new expect_create expect_delete search_restart\n");
return 0; return 0;
} }
seq_printf(seq, "%08x %08x %08x %08x %08x %08x %08x %08x " seq_printf(seq, "%08x %08x %08x %08x %08x %08x %08x %08x "
"%08x %08x %08x %08x %08x %08x %08x %08x \n", "%08x %08x %08x %08x %08x %08x %08x %08x %08x\n",
nr_conntracks, nr_conntracks,
st->searched, st->searched,
st->found, st->found,
...@@ -274,7 +274,8 @@ static int ct_cpu_seq_show(struct seq_file *seq, void *v) ...@@ -274,7 +274,8 @@ static int ct_cpu_seq_show(struct seq_file *seq, void *v)
st->expect_new, st->expect_new,
st->expect_create, st->expect_create,
st->expect_delete st->expect_delete,
st->search_restart
); );
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment