On Sun, Mar 20, 2011 at 04:07:33PM -0400, Loganaden Velvindron wrote:
> With input from mk, we improved the diff.
>
> Testing is very much appreciated.
[...]
I can't comment on the code (it isn't my area, but, worse, i'm still
too short of time), but at least a make build over nfs now finished
without any problems.
Ciao,
Kili
> Index: src/sys/dev/usb/if_udav.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/if_udav.c,v
> retrieving revision 1.54
> diff -u -p -r1.54 if_udav.c
> --- src/sys/dev/usb/if_udav.c 20 Mar 2011 17:58:26 -0000 1.54
> +++ src/sys/dev/usb/if_udav.c 20 Mar 2011 19:58:51 -0000
> @@ -1128,18 +1128,25 @@ udav_rxeof(usbd_xfer_handle xfer, usbd_p
>
> usbd_get_xfer_status(xfer, NULL, NULL, &total_len, NULL);
>
> + if (total_len < UDAV_RX_HDRLEN) {
> + ifp->if_ierrors++;
> + goto done;
> + }
> +
> h = (struct udav_rx_hdr *)c->udav_buf;
> total_len = UGETW(h->length) - ETHER_CRC_LEN;
>
> - DPRINTF(("%s: RX Status: 0x%02x\n", h->pktstat));
> + DPRINTF(("%s: RX Status: 0x%02x\n", sc->sc_dev.dv_xname, h->pktstat));
>
> if (h->pktstat & UDAV_RSR_LCS) {
> ifp->if_collisions++;
> goto done;
> }
>
> + /* RX status may still be correct but total_len is bogus */
> if (total_len < sizeof(struct ether_header) ||
> - h->pktstat & UDAV_RSR_ERR) {
> + h->pktstat & UDAV_RSR_ERR ||
> + total_len > UDAV_BUFSZ ) {
> ifp->if_ierrors++;
> goto done;
> }
> Index: src/sys/dev/usb/if_udavreg.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/if_udavreg.h,v
> retrieving revision 1.11
> diff -u -p -r1.11 if_udavreg.h
> --- src/sys/dev/usb/if_udavreg.h 6 Dec 2010 04:41:39 -0000 1.11
> +++ src/sys/dev/usb/if_udavreg.h 20 Mar 2011 19:58:51 -0000
> @@ -200,6 +200,6 @@ struct udav_rx_hdr {
> #define UDAV_RX_HDRLEN sizeof(struct udav_rx_hdr)
>
> /* Packet length */
> -#define UDAV_MAX_MTU 1536 /* XXX: max frame size is unknown
> */
> +#define UDAV_MAX_MTU 1522 /* According to datasheet */
> #define UDAV_MIN_FRAME_LEN 60
> #define UDAV_BUFSZ UDAV_MAX_MTU + UDAV_RX_HDRLEN
--
Password:
You speak an infinite deal of nothing
-- sudo(8), OpenBSD