Hi, this diff also discards packets larger than maximum buffer size.

Please test.

Index: src/sys/dev/usb/if_urndis.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_urndis.c,v
retrieving revision 1.29
diff -u -p -r1.29 if_urndis.c
--- src/sys/dev/usb/if_urndis.c 25 Jan 2011 20:03:35 -0000      1.29
+++ src/sys/dev/usb/if_urndis.c 20 Mar 2011 05:22:55 -0000
@@ -801,12 +801,13 @@ urndis_decap(struct urndis_softc *sc, st
                DPRINTF(("%s: urndis_decap buffer size left %u\n", DEVNAME(sc),
                    len));
 
-               if (len < sizeof(*msg)) {
+               if (len < sizeof(*msg) || len > RNDIS_BUFSZ) {
                        printf("%s: urndis_decap invalid buffer len %u < "
-                           "minimum header %u\n",
+                           "minimum header %u maximum size %d\n",
                            DEVNAME(sc),
                            len,
-                           sizeof(*msg));
+                           sizeof(*msg),
+                           RNDIS_BUFSZ);
                        return;
                }

Reply via email to