alpha and em mtu

Sten Spans sten at blinkenlights.nl
Mon Nov 15 13:07:40 PST 2004


On Mon, 15 Nov 2004, John Baldwin wrote:

> On Monday 15 November 2004 02:34 pm, Sten Spans wrote:
>> On Mon, 15 Nov 2004, John Baldwin wrote:
>>>
>> 548             /*
>> 549              * Check that TCP offset makes sense,
>> 550              * pull out TCP options and adjust length.              XXX
>> 551              */
>> 552             off = th->th_off << 2;
>> 553             if (off < sizeof (struct tcphdr) || off > tlen) {
>> 554                     tcpstat.tcps_rcvbadoff++;
>> 555                     goto drop;
>> 556             }
>>
>>
>> The box that talks to the alpha has mtu 9014, this might
>> help to expose the bug.
>
> It may be that the off0 argument is less than the size of an IP header but is
> not a multiple of 4.  Can you try this to see if it prints anything out
> before crashing:
>
> Index: netinet/tcp_input.c
> ===================================================================
> RCS file: /usr/cvs/src/sys/netinet/tcp_input.c,v
> retrieving revision 1.255
> diff -u -r1.255 tcp_input.c
> --- netinet/tcp_input.c	7 Nov 2004 19:19:35 -0000	1.255
> +++ netinet/tcp_input.c	15 Nov 2004 20:09:27 -0000
> @@ -497,6 +497,8 @@
> 			ip_stripoptions(m, (struct mbuf *)0);
> 			off0 = sizeof(struct ip);
> 		}
> +		if (off0 & 0x3 != 0)
> +			printf("%s: off0 %d is misaligned\n", __func__, off0);
> 		if (m->m_len < sizeof (struct tcpiphdr)) {
> 			if ((m = m_pullup(m, sizeof (struct tcpiphdr))) == 0) {
> 				tcpstat.tcps_rcvshort++;
>

changed to ((off0 & 0x3) != 0), didn't seem to print anything.

-- 
Sten Spans

"There is a crack in everything, that's how the light gets in."
Leonard Cohen - Anthem


More information about the freebsd-alpha mailing list