]> git.pld-linux.org Git - packages/kernel.git/blob - linux-2.4.20-netfilter-conntrack-endian.patch
- fix for conntrack modules broken on big-endians
[packages/kernel.git] / linux-2.4.20-netfilter-conntrack-endian.patch
1 This patch fixes bugs related to machine endianess (harmless on
2 little-endians, but causing that some of conntrack modules don't
3 work on big-endian machines).
4
5 Bugs fixed:
6 * (debugging, not endianess related) compilation failure in
7   destroy_expect() in ip_conntrack_core.c when debugging was enabled
8
9 * (minor problem for now) fixed warning about format string used
10   for conntrack->mark (which is unsigned long) - would be harmful on
11   64-bit big-endians
12
13 * the real problem: the way that ip_conntrack_tuple structures were
14   initialized was wrong - in compound literals port number was catched
15   by the first dst.u union element, which is int64_t (so port was
16   stored in 2 least significant bytes, i.e. 6 bytes after beginning of
17   dst.u.tcp or dst.u.udp element).
18   This fix uses C99 field specifiers.
19
20   Aternative way to fix can be zeroing whole structure and then
21   setting wanted fields in separate statements (like in
22   ip_conntrack_pptp for example).
23
24
25         Jakub Bogusz <qboosh@pld.org.pl>
26
27 --- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_standalone.c.orig      Fri May 16 10:17:39 2003
28 +++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_standalone.c   Mon May 19 15:58:25 2003
29 @@ -105,7 +105,7 @@
30         len += sprintf(buffer + len, "use=%u ",
31                        atomic_read(&conntrack->ct_general.use));
32  #if defined(CONFIG_IP_NF_CONNTRACK_MARK)
33 -       len += sprintf(buffer + len, "mark=%d ", conntrack->mark);
34 +       len += sprintf(buffer + len, "mark=%ld ", conntrack->mark);
35  #endif
36         len += sprintf(buffer + len, "\n");
37  
38 --- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_core.c.orig    Fri May 16 10:17:39 2003
39 +++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_core.c Mon May 19 15:49:36 2003
40 @@ -211,8 +211,8 @@
41  static void
42  destroy_expect(struct ip_conntrack_expect *exp)
43  {
44 -       DEBUGP("destroy_expect(%p) use=%d\n", exp, atomic_read(exp->use));
45 -       IP_NF_ASSERT(atomic_read(exp->use));
46 +       DEBUGP("destroy_expect(%p) use=%d\n", exp, atomic_read(&exp->use));
47 +       IP_NF_ASSERT(atomic_read(&exp->use));
48         IP_NF_ASSERT(!timer_pending(&exp->timeout));
49  
50         kfree(exp);
51 @@ -1446,8 +1446,8 @@
52  getorigdst(struct sock *sk, int optval, void *user, int *len)
53  {
54         struct ip_conntrack_tuple_hash *h;
55 -       struct ip_conntrack_tuple tuple = { { sk->rcv_saddr, { sk->sport } },
56 -                                           { sk->daddr, { sk->dport },
57 +       struct ip_conntrack_tuple tuple = { { sk->rcv_saddr, { .tcp = { sk->sport } } },
58 +                                           { sk->daddr, { .tcp = { sk->dport } },
59                                               IPPROTO_TCP } };
60  
61         /* We only do TCP at the moment: is there a better way? */
62 --- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_ftp.c.orig     Fri May 16 10:17:39 2003
63 +++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_ftp.c  Mon May 19 15:50:54 2003
64 @@ -366,11 +366,11 @@
65                     { 0 } },
66                   { htonl((array[0] << 24) | (array[1] << 16)
67                           | (array[2] << 8) | array[3]),
68 -                   { htons(array[4] << 8 | array[5]) },
69 +                   { .tcp = { htons(array[4] << 8 | array[5]) } },
70                     IPPROTO_TCP }});
71         exp->mask = ((struct ip_conntrack_tuple)
72                 { { 0xFFFFFFFF, { 0 } },
73 -                 { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
74 +                 { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFFFF }});
75  
76         exp->expectfn = NULL;
77  
78 --- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_h323.c.orig    Fri May 16 10:17:39 2003
79 +++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_h323.c Mon May 19 15:52:03 2003
80 @@ -108,11 +108,11 @@
81                                 { { ct->tuplehash[!dir].tuple.src.ip,
82                                     { 0 } },
83                                   { data_ip,
84 -                                   { data_port },
85 +                                   { .tcp = { data_port } },
86                                     IPPROTO_UDP }});
87                         exp->mask = ((struct ip_conntrack_tuple)
88                                 { { 0xFFFFFFFF, { 0 } },
89 -                                 { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
90 +                                 { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFFFF }});
91         
92                         exp->expectfn = NULL;
93                         
94 @@ -237,11 +237,11 @@
95                                         { { ct->tuplehash[!dir].tuple.src.ip,
96                                             { 0 } },
97                                           { data_ip,
98 -                                           { data_port },
99 +                                           { .tcp = { data_port } },
100                                             IPPROTO_TCP }});
101                                 exp->mask = ((struct ip_conntrack_tuple)
102                                         { { 0xFFFFFFFF, { 0 } },
103 -                                         { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
104 +                                         { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFFFF }});
105         
106                                 exp->expectfn = h225_expect;
107                                 
108 --- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_irc.c.orig     Fri Nov 29 00:53:15 2002
109 +++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_irc.c  Mon May 19 15:54:24 2003
110 @@ -209,11 +209,11 @@
111  
112                         exp->tuple = ((struct ip_conntrack_tuple)
113                                 { { 0, { 0 } },
114 -                                 { htonl(dcc_ip), { htons(dcc_port) },
115 +                                 { htonl(dcc_ip), { .tcp = { htons(dcc_port) } },
116                                     IPPROTO_TCP }});
117                         exp->mask = ((struct ip_conntrack_tuple)
118                                 { { 0, { 0 } },
119 -                                 { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
120 +                                 { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFFFF }});
121  
122                         exp->expectfn = NULL;
123  
124 --- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_mms.c.orig     Fri May 16 10:17:39 2003
125 +++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_mms.c  Mon May 19 15:55:06 2003
126 @@ -238,12 +238,12 @@
127                 exp->tuple = ((struct ip_conntrack_tuple)
128                               { { ct->tuplehash[!dir].tuple.src.ip, { 0 } },
129                               { mms_ip,
130 -                               { (__u16) ntohs(mms_port) },
131 +                               { .tcp = { (__u16) ntohs(mms_port) } },
132                                 mms_proto } }
133                              );
134                 exp->mask  = ((struct ip_conntrack_tuple)
135                              { { 0xFFFFFFFF, { 0 } },
136 -                              { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
137 +                              { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFFFF }});
138                 exp->expectfn = NULL;
139                 ip_conntrack_expect_related(ct, &expect);
140                 UNLOCK_BH(&ip_mms_lock);
141 --- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_quake3.c.orig  Fri May 16 10:17:39 2003
142 +++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_quake3.c       Mon May 19 15:57:27 2003
143 @@ -82,12 +82,12 @@
144                         exp.tuple = ((struct ip_conntrack_tuple)
145                                      { { ct->tuplehash[!dir].tuple.src.ip, { 0 } },
146                                        { (u_int32_t) *((u_int32_t *)((int)udph + i)), 
147 -                                      { (__u16) *((__u16 *)((int)udph+i+4)) }, 
148 +                                      { .udp = { (__u16) *((__u16 *)((int)udph+i+4)) } }, 
149                                          IPPROTO_UDP } }
150                                     );
151                         exp.mask  = ((struct ip_conntrack_tuple)
152                                      { { 0xFFFFFFFF, { 0 } },
153 -                                      { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
154 +                                      { 0xFFFFFFFF, { .udp = { 0xFFFF } }, 0xFFFF }});
155                         exp.expectfn = NULL;
156  
157                         ip_conntrack_expect_related(ct, &exp);
158 --- linux-2.4.20/net/ipv4/netfilter/ip_conntrack_talk.c.orig    Fri May 16 10:17:39 2003
159 +++ linux-2.4.20/net/ipv4/netfilter/ip_conntrack_talk.c Mon May 19 16:00:41 2003
160 @@ -119,11 +119,11 @@
161                         { { ct->tuplehash[dir].tuple.src.ip,
162                             { 0 } },
163                           { ct->tuplehash[dir].tuple.dst.ip,
164 -                           { htons(talk_port) },
165 +                           { .udp = { htons(talk_port) } },
166                             IPPROTO_UDP }});
167                 exp->mask = ((struct ip_conntrack_tuple)
168                         { { 0xFFFFFFFF, { 0 } },
169 -                         { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
170 +                         { 0xFFFFFFFF, { .udp = { 0xFFFF } }, 0xFFFF }});
171                 
172                 exp->expectfn = talk_expectfn[talk_port - TALK_PORT];
173  
174 @@ -148,11 +148,11 @@
175                         { { ct->tuplehash[!dir].tuple.src.ip,
176                             { 0 } },
177                           { addr->ta_addr,
178 -                           { addr->ta_port },
179 +                           { .tcp = { addr->ta_port } },
180                             IPPROTO_TCP }});
181                 exp->mask = ((struct ip_conntrack_tuple)
182                         { { 0xFFFFFFFF, { 0 } },
183 -                         { 0xFFFFFFFF, { 0xFFFF }, 0xFFFF }});
184 +                         { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFFFF }});
185                 
186                 exp->expectfn = NULL;
187                 
This page took 0.709787 seconds and 3 git commands to generate.