> 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 [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to