> Date: Mon, 14 Nov 2016 10:51:03 +0100
> From: Gerhard Roth <[email protected]>
>
> Hi,
>
> according to the NCM spec, the list of datagram pointer entries has to
> be terminated with an entry where wDatagramIndex and wDatagramLen are
> zero. Not all implementations seem to follow that rule: otto@ had one
> that only sets the index to zero while using an arbitrary length value.
>
> The patch below fixes the parsing to stop if any of those values is
> zero. It was successfully tested by otto@
Looks reasonable to me; ok kettenis@
> Index: if_umb.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/if_umb.c,v
> retrieving revision 1.5
> diff -u -p -u -p -r1.5 if_umb.c
> --- if_umb.c 10 Nov 2016 14:45:43 -0000 1.5
> +++ if_umb.c 14 Nov 2016 09:34:29 -0000
> @@ -1815,7 +1815,7 @@ umb_decap(struct umb_softc *sc, struct u
> }
>
> /* Terminating zero entry */
> - if (dlen == 0 && doff == 0)
> + if (dlen == 0 || doff == 0)
> break;
> if (len < dlen + doff) {
> /* Skip giant datagram but continue processing */
>
>