Re: Compilation failure on Alpha with test8-pre[2-6]

From: Anton Blanchard (anton@linuxcare.com)
Date: Fri Sep 08 2000 - 08:50:38 EST


 
> Great. I'll apply the patch and see where the next breakage is :-P I
> believe there was a problem in the netfilter code
> (net/ipv4/netfilter/ipt_REJECT.c, lines 67-68) with the selection of
> which xchg() to use (either __xchg_u32() or __xchg_u64()as detailed in
> include/asm-alpha/system.h) since it's apparently trying to use
> __xchg_called_with_bad_pointer(), which is undefined on purpose. So
> either something's not getting called properly or the detection is messed
> up (still have to look into it).

Yeah on most architectures you cant do an xchg of a 16 bit quantity.
Rusty has a patch:

diff -ur -X /tmp/fileAYCCtF --minimal linux-2.4.0-test7-6/net/ipv4/netfilter/ipt_REJECT.c working-2.4.0-test7-6/net/ipv4/netfilter/ipt_REJECT.c
--- linux-2.4.0-test7-6/net/ipv4/netfilter/ipt_REJECT.c Tue Aug 22 17:28:14 2000
+++ working-2.4.0-test7-6/net/ipv4/netfilter/ipt_REJECT.c Wed Aug 23 18:46:15 2000
@@ -27,6 +27,7 @@
         struct tcphdr *otcph, *tcph;
         struct rtable *rt;
         unsigned int otcplen;
+ u_int16_t tmp;
         int needs_ack;
 
         /* IP header checks: fragment, too short. */
@@ -64,8 +65,11 @@
 
         tcph = (struct tcphdr *)((u_int32_t*)nskb->nh.iph + nskb->nh.iph->ihl);
 
+ /* Swap source and dest */
         nskb->nh.iph->daddr = xchg(&nskb->nh.iph->saddr, nskb->nh.iph->daddr);
- tcph->source = xchg(&tcph->dest, tcph->source);
+ tmp = tcph->source;
+ tcph->source = tcph->dest;
+ tcph->dest = tmp;
 
         /* Truncate to length (no data) */
         tcph->doff = sizeof(struct tcphdr)/4;

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Sep 15 2000 - 21:00:10 EST