Skip to contentSkip to conversation

rpc helper handling of ip_conntrack_helper->name

PATCH New Phil Oester 1 participant 1 message Nov 11, 2004 netfilter

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 rpc helper handling of ip_conntrack_helper->name

RPC helper doesn't properly handle name registration of multiple ports. Patch below fixes.

This fixes 1/2 of bugzilla #90

Phil

rpc/linux/net/ipv4/netfilter/ip_conntrack_rpc_tcp.c +8 -7
diff -ru pom-orig/rpc/linux/net/ipv4/netfilter/ip_conntrack_rpc_tcp.c pom-new/rpc/linux/net/ipv4/netfilter/ip_conntrack_rpc_tcp.c
@@ -418,6 +418,7 @@
 
 
 static struct ip_conntrack_helper rpc_helpers[MAX_PORTS];
+static char rpc_names[MAX_PORTS][10];
 
 static void fini(void);
 
@@ -425,8 +426,7 @@
 static int __init init(void)
 {
 	int port, ret;
-	static char name[10];
-
+	char *tmpname;
 
 	/* If no port given, default to standard RPC port */
 	if (ports[0] == 0)
@@ -435,12 +435,13 @@
 	for (port = 0; (port < MAX_PORTS) && ports[port]; port++) {
 		memset(&rpc_helpers[port], 0, sizeof(struct ip_conntrack_helper));
 
-                if (ports[port] == RPC_PORT)
-                        sprintf(name, "rpc");
-                else
-                        sprintf(name, "rpc-%d", port);
+		tmpname = &rpc_names[port][0];
+		if (ports[port] == RPC_PORT)
+			sprintf(tmpname, "rpc");
+		else
+			sprintf(tmpname, "rpc-%d", ports[port]);
+		rpc_helpers[port].name = tmpname;
 
-		rpc_helpers[port].name = name;
 		rpc_helpers[port].me = THIS_MODULE;
 		rpc_helpers[port].max_expected = 1;
 		rpc_helpers[port].flags = IP_CT_HELPER_F_REUSE_EXPECT;
rpc/linux/net/ipv4/netfilter/ip_conntrack_rpc_udp.c +8 -7
diff -ru pom-orig/rpc/linux/net/ipv4/netfilter/ip_conntrack_rpc_udp.c pom-new/rpc/linux/net/ipv4/netfilter/ip_conntrack_rpc_udp.c
@@ -413,6 +413,7 @@
 
 
 static struct ip_conntrack_helper rpc_helpers[MAX_PORTS];
+static char rpc_names[MAX_PORTS][10];
 
 static void fini(void);
 
@@ -420,8 +421,7 @@
 static int __init init(void)
 {
 	int port, ret;
-	static char name[10];
-
+	char *tmpname;
 
 	/* If no port given, default to standard RPC port */
 	if (ports[0] == 0)
@@ -430,12 +430,13 @@
 	for (port = 0; (port < MAX_PORTS) && ports[port]; port++) {
 		memset(&rpc_helpers[port], 0, sizeof(struct ip_conntrack_helper));
 
-                if (ports[port] == RPC_PORT)
-                        sprintf(name, "rpc");
-                else
-                        sprintf(name, "rpc-%d", port);
+		tmpname = &rpc_names[port][0];
+		if (ports[port] == RPC_PORT)
+			sprintf(tmpname, "rpc");
+		else
+			sprintf(tmpname, "rpc-%d", ports[port]);
+		rpc_helpers[port].name = tmpname;
 
-		rpc_helpers[port].name = name;
 		rpc_helpers[port].me = THIS_MODULE;
 		rpc_helpers[port].max_expected = 1;
 		rpc_helpers[port].flags = IP_CT_HELPER_F_REUSE_EXPECT;