Subject: Re: port-mac68k/32583: mac68k netbsd-2 panics during rcp(1)
To: None <port-mac68k-maintainer@netbsd.org, gnats-admin@netbsd.org,>
From: Dave Huang <khym@azeotrope.org>
List: netbsd-bugs
Date: 01/20/2006 21:40:02
The following reply was made to PR port-mac68k/32583; it has been noted by GNATS.

From: Dave Huang <khym@azeotrope.org>
To: gnats-bugs@netbsd.org
Cc: port-mac68k-maintainer@netbsd.org, gnats-admin@netbsd.org,
	netbsd-bugs@netbsd.org
Subject: Re: port-mac68k/32583: mac68k netbsd-2 panics during rcp(1)
Date: Fri, 20 Jan 2006 15:39:16 -0600

 On Fri, Jan 20, 2006 at 09:05:01PM +0000, Hauke Fath wrote:
 > mac68k_bssr2(0,47db34,c3c,0,0) + 20
 
 Hmm, so bus_space_set_region_2() is being called with a count argument
 of 0? (the last argument). The bus_space(9) manpage mentions,
 "Functions which take a count of bytes have undefined results if the
 specified count is zero," and mac68k's implementation treats a count
 of 0 as being 2^32.
 
 It looks like the last section of ae_write_mbuf() tries to pad the
 packet with 0s at the end if it's shorter than the shortest allowable
 ethernet frame, but if it's exactly one byte shorted, (ETHER_MIN_LEN -
 ETHER_CRC_LEN - totlen) == 1, and it'll call bus_space_set_region_2()
 with a count of 0. So, perhaps try this diff to round up instead of
 down if totlen is odd?
 
 Index: if_ae.c
 ===================================================================
 RCS file: /cvsroot/src/sys/arch/mac68k/dev/if_ae.c,v
 retrieving revision 1.77
 diff -u -r1.77 if_ae.c
 --- if_ae.c     11 Dec 2005 12:18:02 -0000      1.77
 +++ if_ae.c     20 Jan 2006 21:37:31 -0000
 @@ -173,7 +173,7 @@
         }
         if (totlen < ETHER_MIN_LEN - ETHER_CRC_LEN) {
                 bus_space_set_region_2(sc->sc_buft, sc->sc_bufh, buf, 0,
 -                   (ETHER_MIN_LEN - ETHER_CRC_LEN - totlen) >> 1);
 +                   (ETHER_MIN_LEN - ETHER_CRC_LEN - totlen + 1) >> 1);
                 totlen = ETHER_MIN_LEN - ETHER_CRC_LEN;
         }
         return (totlen);
 
 -- 
 Name: Dave Huang         |  Mammal, mammal / their names are called /
 INet: khym@azeotrope.org |  they raise a paw / the bat, the cat /
 FurryMUCK: Dahan         |  dolphin and dog / koala bear and hog -- TMBG
 Dahan: Hani G Y+C 30 Y++ L+++ W- C++ T++ A+ E+ S++ V++ F- Q+++ P+ B+ PA+ PL++