aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorJan Engelhardt <jengelh@medozas.de>2010-04-21 08:45:51 -0400
committerPatrick McHardy <kaber@trash.net>2010-04-21 08:45:51 -0400
commitd97a9e47ba148cfc41e354c5cd241f472273207c (patch)
tree8e3a640118767fb4bd0496a8ffd390e55583fffa /net
parent6c79bf0f2440fd250c8fce8d9b82fcf03d4e8350 (diff)
netfilter: x_tables: move sleeping allocation outside BH-disabled region
The jumpstack allocation needs to be moved out of the critical region. Corrects this notice: BUG: sleeping function called from invalid context at mm/slub.c:1705 [ 428.295762] in_atomic(): 1, irqs_disabled(): 0, pid: 9111, name: iptables [ 428.295771] Pid: 9111, comm: iptables Not tainted 2.6.34-rc1 #2 [ 428.295776] Call Trace: [ 428.295791] [<c012138e>] __might_sleep+0xe5/0xed [ 428.295801] [<c019e8ca>] __kmalloc+0x92/0xfc [ 428.295825] [<f865b3bb>] ? xt_jumpstack_alloc+0x36/0xff [x_tables] Signed-off-by: Jan Engelhardt <jengelh@medozas.de> Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'net')
-rw-r--r--net/netfilter/x_tables.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
index 3ae32340d4df..445de702b8b7 100644
--- a/net/netfilter/x_tables.c
+++ b/net/netfilter/x_tables.c
@@ -801,6 +801,12 @@ xt_replace_table(struct xt_table *table,
801 struct xt_table_info *private; 801 struct xt_table_info *private;
802 int ret; 802 int ret;
803 803
804 ret = xt_jumpstack_alloc(newinfo);
805 if (ret < 0) {
806 *error = ret;
807 return NULL;
808 }
809
804 /* Do the substitution. */ 810 /* Do the substitution. */
805 local_bh_disable(); 811 local_bh_disable();
806 private = table->private; 812 private = table->private;
@@ -814,12 +820,6 @@ xt_replace_table(struct xt_table *table,
814 return NULL; 820 return NULL;
815 } 821 }
816 822
817 ret = xt_jumpstack_alloc(newinfo);
818 if (ret < 0) {
819 *error = ret;
820 return NULL;
821 }
822
823 table->private = newinfo; 823 table->private = newinfo;
824 newinfo->initial_entries = private->initial_entries; 824 newinfo->initial_entries = private->initial_entries;
825 825