diff options
-rw-r--r-- | include/linux/netfilter/x_tables.h | 6 | ||||
-rw-r--r-- | net/ipv4/netfilter/arp_tables.c | 7 | ||||
-rw-r--r-- | net/ipv4/netfilter/ip_tables.c | 7 | ||||
-rw-r--r-- | net/ipv6/netfilter/ip6_tables.c | 7 | ||||
-rw-r--r-- | net/netfilter/x_tables.c | 14 |
5 files changed, 23 insertions, 18 deletions
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index 90dc6ea2a683..937cebb3ab54 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h | |||
@@ -335,9 +335,9 @@ extern int xt_check_target(const struct xt_target *target, unsigned short family | |||
335 | unsigned int size, const char *table, unsigned int hook, | 335 | unsigned int size, const char *table, unsigned int hook, |
336 | unsigned short proto, int inv_proto); | 336 | unsigned short proto, int inv_proto); |
337 | 337 | ||
338 | extern int xt_register_table(struct xt_table *table, | 338 | extern struct xt_table *xt_register_table(struct xt_table *table, |
339 | struct xt_table_info *bootstrap, | 339 | struct xt_table_info *bootstrap, |
340 | struct xt_table_info *newinfo); | 340 | struct xt_table_info *newinfo); |
341 | extern void *xt_unregister_table(struct xt_table *table); | 341 | extern void *xt_unregister_table(struct xt_table *table); |
342 | 342 | ||
343 | extern struct xt_table_info *xt_replace_table(struct xt_table *table, | 343 | extern struct xt_table_info *xt_replace_table(struct xt_table *table, |
diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c index b4a810c28ac8..060de950e6ac 100644 --- a/net/ipv4/netfilter/arp_tables.c +++ b/net/ipv4/netfilter/arp_tables.c | |||
@@ -1727,6 +1727,7 @@ int arpt_register_table(struct arpt_table *table, | |||
1727 | struct xt_table_info bootstrap | 1727 | struct xt_table_info bootstrap |
1728 | = { 0, 0, 0, { 0 }, { 0 }, { } }; | 1728 | = { 0, 0, 0, { 0 }, { 0 }, { } }; |
1729 | void *loc_cpu_entry; | 1729 | void *loc_cpu_entry; |
1730 | struct xt_table *new_table; | ||
1730 | 1731 | ||
1731 | newinfo = xt_alloc_table_info(repl->size); | 1732 | newinfo = xt_alloc_table_info(repl->size); |
1732 | if (!newinfo) { | 1733 | if (!newinfo) { |
@@ -1750,10 +1751,10 @@ int arpt_register_table(struct arpt_table *table, | |||
1750 | return ret; | 1751 | return ret; |
1751 | } | 1752 | } |
1752 | 1753 | ||
1753 | ret = xt_register_table(table, &bootstrap, newinfo); | 1754 | new_table = xt_register_table(table, &bootstrap, newinfo); |
1754 | if (ret != 0) { | 1755 | if (IS_ERR(new_table)) { |
1755 | xt_free_table_info(newinfo); | 1756 | xt_free_table_info(newinfo); |
1756 | return ret; | 1757 | return PTR_ERR(new_table); |
1757 | } | 1758 | } |
1758 | 1759 | ||
1759 | return 0; | 1760 | return 0; |
diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c index 628a6b58ddb8..1b7c09e4a007 100644 --- a/net/ipv4/netfilter/ip_tables.c +++ b/net/ipv4/netfilter/ip_tables.c | |||
@@ -2055,6 +2055,7 @@ int ipt_register_table(struct xt_table *table, const struct ipt_replace *repl) | |||
2055 | struct xt_table_info bootstrap | 2055 | struct xt_table_info bootstrap |
2056 | = { 0, 0, 0, { 0 }, { 0 }, { } }; | 2056 | = { 0, 0, 0, { 0 }, { 0 }, { } }; |
2057 | void *loc_cpu_entry; | 2057 | void *loc_cpu_entry; |
2058 | struct xt_table *new_table; | ||
2058 | 2059 | ||
2059 | newinfo = xt_alloc_table_info(repl->size); | 2060 | newinfo = xt_alloc_table_info(repl->size); |
2060 | if (!newinfo) | 2061 | if (!newinfo) |
@@ -2074,10 +2075,10 @@ int ipt_register_table(struct xt_table *table, const struct ipt_replace *repl) | |||
2074 | return ret; | 2075 | return ret; |
2075 | } | 2076 | } |
2076 | 2077 | ||
2077 | ret = xt_register_table(table, &bootstrap, newinfo); | 2078 | new_table = xt_register_table(table, &bootstrap, newinfo); |
2078 | if (ret != 0) { | 2079 | if (IS_ERR(new_table)) { |
2079 | xt_free_table_info(newinfo); | 2080 | xt_free_table_info(newinfo); |
2080 | return ret; | 2081 | return PTR_ERR(new_table); |
2081 | } | 2082 | } |
2082 | 2083 | ||
2083 | return 0; | 2084 | return 0; |
diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c index 92b4898344ff..f7a62398d7b7 100644 --- a/net/ipv6/netfilter/ip6_tables.c +++ b/net/ipv6/netfilter/ip6_tables.c | |||
@@ -2081,6 +2081,7 @@ int ip6t_register_table(struct xt_table *table, const struct ip6t_replace *repl) | |||
2081 | struct xt_table_info bootstrap | 2081 | struct xt_table_info bootstrap |
2082 | = { 0, 0, 0, { 0 }, { 0 }, { } }; | 2082 | = { 0, 0, 0, { 0 }, { 0 }, { } }; |
2083 | void *loc_cpu_entry; | 2083 | void *loc_cpu_entry; |
2084 | struct xt_table *new_table; | ||
2084 | 2085 | ||
2085 | newinfo = xt_alloc_table_info(repl->size); | 2086 | newinfo = xt_alloc_table_info(repl->size); |
2086 | if (!newinfo) | 2087 | if (!newinfo) |
@@ -2100,10 +2101,10 @@ int ip6t_register_table(struct xt_table *table, const struct ip6t_replace *repl) | |||
2100 | return ret; | 2101 | return ret; |
2101 | } | 2102 | } |
2102 | 2103 | ||
2103 | ret = xt_register_table(table, &bootstrap, newinfo); | 2104 | new_table = xt_register_table(table, &bootstrap, newinfo); |
2104 | if (ret != 0) { | 2105 | if (IS_ERR(new_table)) { |
2105 | xt_free_table_info(newinfo); | 2106 | xt_free_table_info(newinfo); |
2106 | return ret; | 2107 | return PTR_ERR(new_table); |
2107 | } | 2108 | } |
2108 | 2109 | ||
2109 | return 0; | 2110 | return 0; |
diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c index 8d4fca96a4a7..d8d8637739ba 100644 --- a/net/netfilter/x_tables.c +++ b/net/netfilter/x_tables.c | |||
@@ -660,9 +660,9 @@ xt_replace_table(struct xt_table *table, | |||
660 | } | 660 | } |
661 | EXPORT_SYMBOL_GPL(xt_replace_table); | 661 | EXPORT_SYMBOL_GPL(xt_replace_table); |
662 | 662 | ||
663 | int xt_register_table(struct xt_table *table, | 663 | struct xt_table *xt_register_table(struct xt_table *table, |
664 | struct xt_table_info *bootstrap, | 664 | struct xt_table_info *bootstrap, |
665 | struct xt_table_info *newinfo) | 665 | struct xt_table_info *newinfo) |
666 | { | 666 | { |
667 | int ret; | 667 | int ret; |
668 | struct xt_table_info *private; | 668 | struct xt_table_info *private; |
@@ -670,7 +670,7 @@ int xt_register_table(struct xt_table *table, | |||
670 | 670 | ||
671 | ret = mutex_lock_interruptible(&xt[table->af].mutex); | 671 | ret = mutex_lock_interruptible(&xt[table->af].mutex); |
672 | if (ret != 0) | 672 | if (ret != 0) |
673 | return ret; | 673 | goto out; |
674 | 674 | ||
675 | /* Don't autoload: we'd eat our tail... */ | 675 | /* Don't autoload: we'd eat our tail... */ |
676 | list_for_each_entry(t, &xt[table->af].tables, list) { | 676 | list_for_each_entry(t, &xt[table->af].tables, list) { |
@@ -693,11 +693,13 @@ int xt_register_table(struct xt_table *table, | |||
693 | private->initial_entries = private->number; | 693 | private->initial_entries = private->number; |
694 | 694 | ||
695 | list_add(&table->list, &xt[table->af].tables); | 695 | list_add(&table->list, &xt[table->af].tables); |
696 | mutex_unlock(&xt[table->af].mutex); | ||
697 | return table; | ||
696 | 698 | ||
697 | ret = 0; | ||
698 | unlock: | 699 | unlock: |
699 | mutex_unlock(&xt[table->af].mutex); | 700 | mutex_unlock(&xt[table->af].mutex); |
700 | return ret; | 701 | out: |
702 | return ERR_PTR(ret); | ||
701 | } | 703 | } |
702 | EXPORT_SYMBOL_GPL(xt_register_table); | 704 | EXPORT_SYMBOL_GPL(xt_register_table); |
703 | 705 | ||