Previous history is here:
http://www.mail-archive.com/tech@openbsd.org/msg02735.html


On Fri, Nov 19, 2010 at 11:19 PM, Greg Steuck <g...@nest.cx> wrote:
> Believe it or not, I just got this reproduced with a patch to print
> the mbuf (courtesy of Claudio).
>
> Running 4.8-sparc64 with the 2 patches below. Here's the output. Maybe
> this will give somebody an idea about why such weird mbufs are making
> it to wi_start.
>
> This one is the real offender that would have crashed the kernel had
> it not been for my work around part of the patch that just discarded
> it:
>
> Dropping too short packet: 7 bytes 1 timesmbuf 0x40006bb0d60
> m_type: 1       m_flags: 20b<M_EXT,M_PKTHDR,M_CLUSTER,M_MCAST>
> m_next: 0x0     m_nextpkt: 0x0
> m_data: 0x40006cc9002   m_len: 7
> m_dat: 0x40006bb0d80 m_pktdat: 0x40006bb0db8
> m_pkthdr.len: 7 m_ptkhdr.rcvif: 0x400006f4048   m_ptkhdr.rdomain: 0
> m_ptkhdr.tags: 0x0      m_pkthdr.tagsset: 0
> m_pkthdr.csum_flags: 0  m_pkthdr.ether_vtag: 0
> m_pkthdr.pf.flags: 0
> m_pkthdr.pf.hdr: 0x0    m_pkthdr.pf.statekey: 0x0
> m_pkthdr.pf.qid:        0 m_pkthdr.pf.tag: 0
> m_pkthdr.pf.routed: 0
> m_ext.ext_buf: 0x40006cc9000    m_ext.ext_size: 2048
> m_ext.ext_type: 0       m_ext.ext_backend: 0
> m_ext.ext_ifp: 0x0
> m_ext.ext_free: 0x0     m_ext.ext_arg: 0x0
> m_ext.ext_nextref: 0x40006bb1e60        m_ext.ext_prevref: 0x40006bb1e60
>
> Patches:
>
> --- sys/dev/ic/if_wi.c.orig     Fri Jul  9 16:41:52 2010
> +++ sys/dev/ic/if_wi.c  Fri Nov 19 21:05:39 2010
> @@ -2336,6 +2336,8 @@
>        return 0;
>  }
>
> +void m_print(struct mbuf *);
> +
>  void
>  wi_start(struct ifnet *ifp)
>  {
> @@ -2445,6 +2447,11 @@
>                            (m0->m_pkthdr.len -
>                             sizeof(struct ether_header)) + 18);
>                } else {
> +                  if (m0->m_pkthdr.len >= sizeof(struct ether_header)) {
> +                          static int fire_trigger = 0;
> +                          if (fire_trigger++ == 3) {
> +                                  m_print(m0);
> +                          }
>                        m_copydata(m0, sizeof(struct ether_header),
>                            m0->m_pkthdr.len - sizeof(struct ether_header),
>                            (caddr_t)&sc->wi_txbuf);
> @@ -2456,6 +2463,14 @@
>                            (caddr_t)&sc->wi_txbuf,
>                            (m0->m_pkthdr.len -
>                             sizeof(struct ether_header)) + 2);
> +                  } else {
> +                       static int dropped_packets = 0;
> +                       dropped_packets++;
> +                       printf("Dropping too short packet: %d bytes %d
times",
> +                              m0->m_pkthdr.len,
> +                              dropped_packets);
> +                       m_print(m0);
> +                  }
>                }
>        } else {
>                tx_frame.wi_dat_len = htole16(m0->m_pkthdr.len);
>
> This one straight from Claudio's email:
>
> --- uipc_mbuf.c 5 Oct 2010 13:29:40 -0000       1.145
> +++ uipc_mbuf.c 28 Oct 2010 11:58:11 -0000
> @@ -1370,3 +1370,49 @@ m_dup_pkthdr(struct mbuf *to, struct mbu
>
>        return (0);
>  }
> +
> +#ifdef DDB
> +void m_print(struct mbuf *);
> +
> +void
> +m_print(struct mbuf *m)
> +{
> +       printf("mbuf %p\n", m);
> +       printf("m_type: %hi\tm_flags: %b\n", m->m_type, m->m_flags,
> +           "\20\1M_EXT\2M_PKTHDR\3M_EOR\4M_CLUSTER\5M_PROTO1\6M_VLANTAG"
> +           "\7M_LOOP\10M_FILDROP\11M_BCAST\12M_MCAST\13M_CONF\14M_AUTH"
> +           "\15M_TUNNEL\16M_AUTH_AH\17M_LINK0");
> +       printf("m_next: %p\tm_nextpkt: %p\n", m->m_next, m->m_nextpkt);
> +       printf("m_data: %p\tm_len: %u\n", m->m_data, m->m_len);
> +       printf("m_dat: %p m_pktdat: %p\n", m->m_dat, m->m_pktdat);
> +       if (m->m_flags & M_PKTHDR) {
> +               printf("m_pkthdr.len: %i\tm_ptkhdr.rcvif: %p\t"
> +                   "m_ptkhdr.rdomain: %u\n", m->m_pkthdr.len,
> +                   m->m_pkthdr.rcvif, m->m_pkthdr.rdomain);
> +               printf("m_ptkhdr.tags: %p\tm_pkthdr.tagsset: %hx\n",
> +                   SLIST_FIRST(&m->m_pkthdr.tags), m->m_pkthdr.tagsset);
> +               printf("m_pkthdr.csum_flags: %hx\tm_pkthdr.ether_vtag:
%hu\n",
> +                   m->m_pkthdr.csum_flags, m->m_pkthdr.ether_vtag);
> +               printf("m_pkthdr.pf.flags: %b\n",
> +                   m->m_pkthdr.pf.flags, "\20\1GENERATED\2FRAGCACHE"
> +                   "\3TRANSLATE_LOCALHOST\4DIVERTED\5DIVERTED_PACKET"
> +                   "\6PF_TAG_REROUTE");
> +               printf("m_pkthdr.pf.hdr: %p\tm_pkthdr.pf.statekey: %p\n",
> +                   m->m_pkthdr.pf.hdr, m->m_pkthdr.pf.statekey);
> +               printf("m_pkthdr.pf.qid:\t%u m_pkthdr.pf.tag: %hu\n",
> +                   m->m_pkthdr.pf.qid, m->m_pkthdr.pf.tag);
> +               printf("m_pkthdr.pf.routed: %hhx\n",
m->m_pkthdr.pf.routed);
> +       }
> +       if (m->m_flags & M_EXT) {
> +               printf("m_ext.ext_buf: %p\tm_ext.ext_size: %u\n",
> +                   m->m_ext.ext_buf, m->m_ext.ext_size);
> +               printf("m_ext.ext_type: %x\tm_ext.ext_backend: %i\n",
> +                   m->m_ext.ext_type, m->m_ext.ext_backend);
> +               printf("m_ext.ext_ifp: %p\n", m->m_ext.ext_ifp);
> +               printf("m_ext.ext_free: %p\tm_ext.ext_arg: %p\n",
> +                   m->m_ext.ext_free, m->m_ext.ext_arg);
> +               printf("m_ext.ext_nextref: %p\tm_ext.ext_prevref: %p\n",
> +                   m->m_ext.ext_nextref, m->m_ext.ext_prevref);
> +       }
> +}
> +#endif
>
> Copyright (c) 1982, 1986, 1989, 1991, 1993
>        The Regents of the University of California.  All rights reserved.
> Copyright (c) 1995-2010 OpenBSD. All rights reserved.
 http://www.OpenBSD.org
>
> OpenBSD 4.8 (GENERIC) #0: Fri Nov 19 22:32:29 PST 2010
>    g...@u5.nest.cx:/usr/src/sys/arch/sparc64/compile/GENERIC
> real mem = 402653184 (384MB)
> avail mem = 383975424 (366MB)
> mainbus0 at root: Sun Ultra 5/10 UPA/PCI (UltraSPARC-IIi 360MHz)
> cpu0 at mainbus0: SUNW,UltraSPARC-IIi (rev 9.1) @ 360 MHz
> cpu0: physical 16K instruction (32 b/l), 16K data (32 b/l), 256K
> external (64 b/l)
> psycho0 at mainbus0 addr 0xfffc4000: SUNW,sabre, impl 0, version 0, ign 7c0
> psycho0: bus range 0-2, PCI bus 0
> psycho0: dvma map c0000000-dfffffff
> pci0 at psycho0
> ppb0 at pci0 dev 1 function 1 "Sun Simba PCI-PCI" rev 0x13
> pci1 at ppb0 bus 1
> ebus0 at pci1 dev 1 function 0 "Sun PCIO EBus2" rev 0x01
> auxio0 at ebus0 addr 726000-726003, 728000-728003, 72a000-72a003,
> 72c000-72c003, 72f000-72f003
> power0 at ebus0 addr 724000-724003 ivec 0x25
> "SUNW,pll" at ebus0 addr 504000-504002 not configured
> sab0 at ebus0 addr 400000-40007f ivec 0x2b: rev 3.2
> sabtty0 at sab0 port 0: console
> sabtty1 at sab0 port 1
> comkbd0 at ebus0 addr 3083f8-3083ff ivec 0x29: no keyboard
> comms0 at ebus0 addr 3062f8-3062ff ivec 0x2a
> wsmouse0 at comms0 mux 0
> lpt0 at ebus0 addr 3043bc-3043cb, 30015c-30015d, 700000-70000f ivec 0x22:
polled
> clock1 at ebus0 addr 0-1fff: mk48t59
> "flashprom" at ebus0 addr 0-fffff not configured
> audioce0 at ebus0 addr 200000-2000ff, 702000-70200f, 704000-70400f,
> 722000-722003 ivec 0x23 ivec 0x24: nvaddrs 0
> audio0 at audioce0
> hme0 at pci1 dev 1 function 1 "Sun HME" rev 0x01: ivec 0x7e1, address
> 08:00:20:xx:xx:xx
> nsphy0 at hme0 phy 1: DP83840 10/100 PHY, rev. 1
> machfb0 at pci1 dev 2 function 0 "ATI Mach64" rev 0x5c
> machfb0: ATY,GT-C, 1152x900
> wsdisplay0 at machfb0 mux 1
> wsdisplay0: screen 0 added (std, sun emulation)
> pciide0 at pci1 dev 3 function 0 "CMD Technology PCI0646" rev 0x03:
> DMA, channel 0 configured to native-PCI, channel 1 configured to
> native-PCI
> pciide0: using ivec 0x7e0 for native-PCI interrupt
> atapiscsi0 at pciide0 channel 0 drive 0
> scsibus0 at atapiscsi0: 2 targets
> cd0 at scsibus0 targ 0 lun 0: <LG, CD-ROM CRD-8322B, 1.05> ATAPI
> 5/cdrom removable
> cd0(pciide0:0:0): using PIO mode 4, DMA mode 2
> wd0 at pciide0 channel 1 drive 0: <IBM-DHEA-38451>
> wd0: 16-sector PIO, LBA, 8063MB, 16514064 sectors
> wd0(pciide0:1:0): using PIO mode 4, DMA mode 2
> ppb1 at pci0 dev 1 function 0 "Sun Simba PCI-PCI" rev 0x13
> pci2 at ppb1 bus 2
> wi0 at pci2 dev 1 function 0 "Intersil PRISM2.5" rev 0x01: ivec 0x7d0
> wi0: PRISM2.5 ISL3874A(Mini-PCI) (0x8013), Firmware 1.0.5 (primary),
> 1.3.4 (station), address 00:06:25:xx:xx:xx
> skc0 at pci2 dev 2 function 0 "Linksys EG1032" rev 0x12, Yukon (0x1): ivec
0x7d4
> sk0 at skc0 port A: address 00:0c:41:xx:xx:xx
> eephy0 at sk0 phy 0: 88E1011 Gigabit PHY, rev. 3
> softraid0 at root
> bootpath: /p...@1f,0/p...@1,1/i...@3,0/d...@2,0
> root on wd0a swap on wd0b dump on wd0b
> mbuf 0x40006baa390
> m_type: 1       m_flags: 20b<M_EXT,M_PKTHDR,M_CLUSTER,M_MCAST>
> m_next: 0x0     m_nextpkt: 0x0
> m_data: 0x40006bde802   m_len: 342
> m_dat: 0x40006baa3b0 m_pktdat: 0x40006baa3e8
> m_pkthdr.len: 342       m_ptkhdr.rcvif: 0x400006f4048   m_ptkhdr.rdomain: 0
> m_ptkhdr.tags: 0x0      m_pkthdr.tagsset: 0
> m_pkthdr.csum_flags: 0  m_pkthdr.ether_vtag: 0
> m_pkthdr.pf.flags: 0
> m_pkthdr.pf.hdr: 0x0    m_pkthdr.pf.statekey: 0x0
> m_pkthdr.pf.qid:        0 m_pkthdr.pf.tag: 0
> m_pkthdr.pf.routed: 0
> m_ext.ext_buf: 0x40006bde800    m_ext.ext_size: 2048
> m_ext.ext_type: 0       m_ext.ext_backend: 0
> m_ext.ext_ifp: 0x0
> m_ext.ext_free: 0x0     m_ext.ext_arg: 0x0
> m_ext.ext_nextref: 0x40006baa690        m_ext.ext_prevref: 0x40006baa690
> Dropping too short packet: 7 bytes 1 timesmbuf 0x40006bb0d60
> m_type: 1       m_flags: 20b<M_EXT,M_PKTHDR,M_CLUSTER,M_MCAST>
> m_next: 0x0     m_nextpkt: 0x0
> m_data: 0x40006cc9002   m_len: 7
> m_dat: 0x40006bb0d80 m_pktdat: 0x40006bb0db8
> m_pkthdr.len: 7 m_ptkhdr.rcvif: 0x400006f4048   m_ptkhdr.rdomain: 0
> m_ptkhdr.tags: 0x0      m_pkthdr.tagsset: 0
> m_pkthdr.csum_flags: 0  m_pkthdr.ether_vtag: 0
> m_pkthdr.pf.flags: 0
> m_pkthdr.pf.hdr: 0x0    m_pkthdr.pf.statekey: 0x0
> m_pkthdr.pf.qid:        0 m_pkthdr.pf.tag: 0
> m_pkthdr.pf.routed: 0
> m_ext.ext_buf: 0x40006cc9000    m_ext.ext_size: 2048
> m_ext.ext_type: 0       m_ext.ext_backend: 0
> m_ext.ext_ifp: 0x0
> m_ext.ext_free: 0x0     m_ext.ext_arg: 0x0
> m_ext.ext_nextref: 0x40006bb1e60        m_ext.ext_prevref: 0x40006bb1e60
>
>
> --
> nest.cx is Gmail hosted, use PGP for anything private. Key:
> http://tinyurl.com/ho8qg
> Fingerprint: 5E2B 2D0E 1E03 2046 BEC3  4D50 0B15 42BD 8DF5 A1B0
>



--
nest.cx is Gmail hosted, use PGP for anything private. Key:
http://tinyurl.com/ho8qg
Fingerprint: 5E2B 2D0E 1E03 2046 BEC3  4D50 0B15 42BD 8DF5 A1B0

Reply via email to