On Fri, 6 Jun 2008, Marc [iso-8859-1] L?rner wrote:

On Friday 06 June 2008 09:52, Peter Jeremy wrote:
I gather from this comment that you have some code using struct tcphdr
that is getting alignment errors.  struct tcphdr is extensively used
in the TCP stack within the kernel so it's likely that any layout or
alignment problem with it would show up there.  I suspect you are
dereferencing a mis-aligned struct tcphdr.

The funny thing is that the dereferencing occurs in
"/usr/src/sys/netinet/tcp_input.c" in function tcp_input in line 550:

        /*
         * Check that TCP offset makes sense,
         * pull out TCP options and adjust length.              XXX
         */
        off = th->th_off << 2;                                                     
    <----- here
        if (off < sizeof (struct tcphdr) || off > tlen) {
                tcpstat.tcps_rcvbadoff++;
                goto drop;
        }

So the misalignment may probably lie in TCP stack?

Quite likely.  th is normally at offset off0 in ip, where ip is required
to be 32-bit aligned (see my previous reply).  You can see off0 in a
stack trace.

Bruce
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to