]> git.hungrycats.org Git - linux/commitdiff
[NETFILTER]: Fix ip_nat_find_helper() locking.
authorHarald Welte <laforge@netfilter.org>
Wed, 25 Aug 2004 13:20:04 +0000 (06:20 -0700)
committerDavid S. Miller <davem@nuts.davemloft.net>
Wed, 25 Aug 2004 13:20:04 +0000 (06:20 -0700)
Signed-off-by: Harald Welte <laforge@netfilter.org>
Signed-off-by: David S. Miller <davem@redhat.com>
include/linux/netfilter_ipv4/ip_nat_helper.h
net/ipv4/netfilter/ip_nat_core.c
net/ipv4/netfilter/ip_nat_helper.c
net/ipv4/netfilter/ip_nat_standalone.c

index be6bb082d0ba40c6d4091d6caf1985b6c6227df0..b34e4ce9ee6a5c23596841dede9a1cedc20d0a55 100644 (file)
@@ -44,6 +44,9 @@ extern void ip_nat_helper_unregister(struct ip_nat_helper *me);
 extern struct ip_nat_helper *
 ip_nat_find_helper(const struct ip_conntrack_tuple *tuple);
 
+extern struct ip_nat_helper *
+__ip_nat_find_helper(const struct ip_conntrack_tuple *tuple);
+
 /* These return true or false. */
 extern int ip_nat_mangle_tcp_packet(struct sk_buff **skb,
                                struct ip_conntrack *ct,
index d350134dacb1ba7be6f8195620f276bc0613ef3a..b10d35198d1e88e96a36e8d842bf5a716190eb3f 100644 (file)
@@ -635,7 +635,7 @@ ip_nat_setup_info(struct ip_conntrack *conntrack,
 
        /* If there's a helper, assign it; based on new tuple. */
        if (!conntrack->master)
-               info->helper = ip_nat_find_helper(&reply);
+               info->helper = __ip_nat_find_helper(&reply);
 
        /* It's done. */
        info->initialized |= (1 << HOOK2MANIP(hooknum));
index 2e8d021aff44441bd9cca8fcf010f0f02bd9a543..ede6757e540152825efa00fd7982a501d2193c9a 100644 (file)
@@ -420,13 +420,19 @@ int ip_nat_helper_register(struct ip_nat_helper *me)
        return ret;
 }
 
+struct ip_nat_helper *
+__ip_nat_find_helper(const struct ip_conntrack_tuple *tuple)
+{
+       return LIST_FIND(&helpers, helper_cmp, struct ip_nat_helper *, tuple);
+}
+
 struct ip_nat_helper *
 ip_nat_find_helper(const struct ip_conntrack_tuple *tuple)
 {
        struct ip_nat_helper *h;
 
        READ_LOCK(&ip_nat_lock);
-       h = LIST_FIND(&helpers, helper_cmp, struct ip_nat_helper *, tuple);
+       h = __ip_nat_find_helper(tuple);
        READ_UNLOCK(&ip_nat_lock);
 
        return h;
index 62ef0d1f7554d4fe759c481ef71d34f4ddf02182..fcc74c0facfe2e34c7f79f0170931f4b2952e2ec 100644 (file)
@@ -394,4 +394,6 @@ EXPORT_SYMBOL(ip_nat_cheat_check);
 EXPORT_SYMBOL(ip_nat_mangle_tcp_packet);
 EXPORT_SYMBOL(ip_nat_mangle_udp_packet);
 EXPORT_SYMBOL(ip_nat_used_tuple);
+EXPORT_SYMBOL(ip_nat_find_helper);
+EXPORT_SYMBOL(__ip_nat_find_helper);
 MODULE_LICENSE("GPL");