]> git.pld-linux.org Git - packages/kernel.git/commitdiff
- fix for conntrack modules broken on big-endians
authorJakub Bogusz <qboosh@pld-linux.org>
Mon, 19 May 2003 15:00:14 +0000 (15:00 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    linux-2.4.20-netfilter-conntrack-endian.patch -> 1.1

linux-2.4.20-netfilter-conntrack-endian.patch [new file with mode: 0644]

diff --git a/linux-2.4.20-netfilter-conntrack-endian.patch b/linux-2.4.20-netfilter-conntrack-endian.patch
new file mode 100644 (file)
index 0000000..6aa1098
--- /dev/null
@@ -0,0 +1,187 @@
+This patch fixes bugs related to machine endianess (harmless on
+little-endians, but causing that some of conntrack modules don't
+work on big-endian machines).
+
+Bugs fixed:
+* (debugging, not endianess related) compilation failure in
+  destroy_expect() in ip_conntrack_core.c when debugging was enabled
+
+* (minor problem for now) fixed warning about format string used
+  for conntrack->mark (which is unsigned long) - would be harmful on
+  64-bit big-endians
+
+* the real problem: the way that ip_conntrack_tuple structures were
+  initialized was wrong - in compound literals port number was catched
+  by the first dst.u union element, which is int64_t (so port was
+  stored in 2 least significant bytes, i.e. 6 bytes after beginning of
+  dst.u.tcp or dst.u.udp element).
+  This fix uses C99 field specifiers.
+
+  Aternative way to fix can be zeroing whole structure and then
+  setting wanted fields in separate statements (like in
+  ip_conntrack_pptp for example).
+
+
+       Jakub Bogusz <qboosh@pld.org.pl>
+
+--- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_standalone.c.orig     Fri May 16 10:17:39 2003
++++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_standalone.c  Mon May 19 15:58:25 2003
+@@ -105,7 +105,7 @@
+       len += sprintf(buffer + len, "use=%u ",
+                      atomic_read(&conntrack->ct_general.use));
+ #if defined(CONFIG_IP_NF_CONNTRACK_MARK)
+-      len += sprintf(buffer + len, "mark=%d ", conntrack->mark);
++      len += sprintf(buffer + len, "mark=%ld ", conntrack->mark);
+ #endif
+       len += sprintf(buffer + len, "\n");
+--- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_core.c.orig   Fri May 16 10:17:39 2003
++++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_core.c        Mon May 19 15:49:36 2003
+@@ -211,8 +211,8 @@
+ static void
+ destroy_expect(struct ip_conntrack_expect *exp)
+ {
+-      DEBUGP("destroy_expect(%p) use=%d\n", exp, atomic_read(exp->use));
+-      IP_NF_ASSERT(atomic_read(exp->use));
++      DEBUGP("destroy_expect(%p) use=%d\n", exp, atomic_read(&exp->use));
++      IP_NF_ASSERT(atomic_read(&exp->use));
+       IP_NF_ASSERT(!timer_pending(&exp->timeout));
+       kfree(exp);
+@@ -1446,8 +1446,8 @@
+ getorigdst(struct sock *sk, int optval, void *user, int *len)
+ {
+       struct ip_conntrack_tuple_hash *h;
+-      struct ip_conntrack_tuple tuple = { { sk->rcv_saddr, { sk->sport } },
+-                                          { sk->daddr, { sk->dport },
++      struct ip_conntrack_tuple tuple = { { sk->rcv_saddr, { .tcp = { sk->sport } } },
++                                          { sk->daddr, { .tcp = { sk->dport } },
+                                             IPPROTO_TCP } };
+       /* We only do TCP at the moment: is there a better way? */
+--- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_ftp.c.orig    Fri May 16 10:17:39 2003
++++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_ftp.c Mon May 19 15:50:54 2003
+@@ -366,11 +366,11 @@
+                   { 0 } },
+                 { htonl((array[0] << 24) | (array[1] << 16)
+                         | (array[2] << 8) | array[3]),
+-                  { htons(array[4] << 8 | array[5]) },
++                  { .tcp = { htons(array[4] << 8 | array[5]) } },
+                   IPPROTO_TCP }});
+       exp->mask = ((struct ip_conntrack_tuple)
+               { { 0xFFFFFFFF, { 0 } },
+-                { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
++                { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFFFF }});
+       exp->expectfn = NULL;
+--- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_h323.c.orig   Fri May 16 10:17:39 2003
++++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_h323.c        Mon May 19 15:52:03 2003
+@@ -108,11 +108,11 @@
+                               { { ct->tuplehash[!dir].tuple.src.ip,
+                                   { 0 } },
+                                 { data_ip,
+-                                  { data_port },
++                                  { .tcp = { data_port } },
+                                   IPPROTO_UDP }});
+                       exp->mask = ((struct ip_conntrack_tuple)
+                               { { 0xFFFFFFFF, { 0 } },
+-                                { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
++                                { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFFFF }});
+       
+                       exp->expectfn = NULL;
+                       
+@@ -237,11 +237,11 @@
+                                       { { ct->tuplehash[!dir].tuple.src.ip,
+                                           { 0 } },
+                                         { data_ip,
+-                                          { data_port },
++                                          { .tcp = { data_port } },
+                                           IPPROTO_TCP }});
+                               exp->mask = ((struct ip_conntrack_tuple)
+                                       { { 0xFFFFFFFF, { 0 } },
+-                                        { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
++                                        { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFFFF }});
+       
+                               exp->expectfn = h225_expect;
+                               
+--- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_irc.c.orig    Fri Nov 29 00:53:15 2002
++++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_irc.c Mon May 19 15:54:24 2003
+@@ -209,11 +209,11 @@
+                       exp->tuple = ((struct ip_conntrack_tuple)
+                               { { 0, { 0 } },
+-                                { htonl(dcc_ip), { htons(dcc_port) },
++                                { htonl(dcc_ip), { .tcp = { htons(dcc_port) } },
+                                   IPPROTO_TCP }});
+                       exp->mask = ((struct ip_conntrack_tuple)
+                               { { 0, { 0 } },
+-                                { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
++                                { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFFFF }});
+                       exp->expectfn = NULL;
+--- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_mms.c.orig    Fri May 16 10:17:39 2003
++++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_mms.c Mon May 19 15:55:06 2003
+@@ -238,12 +238,12 @@
+               exp->tuple = ((struct ip_conntrack_tuple)
+                             { { ct->tuplehash[!dir].tuple.src.ip, { 0 } },
+                             { mms_ip,
+-                              { (__u16) ntohs(mms_port) },
++                              { .tcp = { (__u16) ntohs(mms_port) } },
+                               mms_proto } }
+                            );
+               exp->mask  = ((struct ip_conntrack_tuple)
+                            { { 0xFFFFFFFF, { 0 } },
+-                             { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
++                             { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFFFF }});
+               exp->expectfn = NULL;
+               ip_conntrack_expect_related(ct, &expect);
+               UNLOCK_BH(&ip_mms_lock);
+--- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_quake3.c.orig Fri May 16 10:17:39 2003
++++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_quake3.c      Mon May 19 15:57:27 2003
+@@ -82,12 +82,12 @@
+                       exp.tuple = ((struct ip_conntrack_tuple)
+                                    { { ct->tuplehash[!dir].tuple.src.ip, { 0 } },
+                                      { (u_int32_t) *((u_int32_t *)((int)udph + i)), 
+-                                     { (__u16) *((__u16 *)((int)udph+i+4)) }, 
++                                     { .udp = { (__u16) *((__u16 *)((int)udph+i+4)) } }, 
+                                        IPPROTO_UDP } }
+                                   );
+                       exp.mask  = ((struct ip_conntrack_tuple)
+                                    { { 0xFFFFFFFF, { 0 } },
+-                                     { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
++                                     { 0xFFFFFFFF, { .udp = { 0xFFFF } }, 0xFFFF }});
+                       exp.expectfn = NULL;
+                       ip_conntrack_expect_related(ct, &exp);
+--- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_talk.c.orig   Fri May 16 10:17:39 2003
++++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_talk.c        Mon May 19 16:00:41 2003
+@@ -119,11 +119,11 @@
+                       { { ct->tuplehash[dir].tuple.src.ip,
+                           { 0 } },
+                         { ct->tuplehash[dir].tuple.dst.ip,
+-                          { htons(talk_port) },
++                          { .udp = { htons(talk_port) } },
+                           IPPROTO_UDP }});
+               exp->mask = ((struct ip_conntrack_tuple)
+                       { { 0xFFFFFFFF, { 0 } },
+-                        { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
++                        { 0xFFFFFFFF, { .udp = { 0xFFFF } }, 0xFFFF }});
+               
+               exp->expectfn = talk_expectfn[talk_port - TALK_PORT];
+@@ -148,11 +148,11 @@
+                       { { ct->tuplehash[!dir].tuple.src.ip,
+                           { 0 } },
+                         { addr->ta_addr,
+-                          { addr->ta_port },
++                          { .tcp = { addr->ta_port } },
+                           IPPROTO_TCP }});
+               exp->mask = ((struct ip_conntrack_tuple)
+                       { { 0xFFFFFFFF, { 0 } },
+-                        { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
++                        { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFFFF }});
+               
+               exp->expectfn = NULL;
+               
This page took 0.080176 seconds and 4 git commands to generate.