Module Name: src Committed By: mrg Date: Sun Aug 11 02:37:04 UTC 2019
Modified Files: src/sys/dev/usb: if_axe.c if_axen.c if_cdce.c if_ure.c Log Message: copy a pattern from if_udav.c, which already had "too much" check. even though overflow or underflow is really unlikely here, reorder various expressions to reduce the likelyhood even further. To generate a diff of this commit: cvs rdiff -u -r1.110 -r1.111 src/sys/dev/usb/if_axe.c cvs rdiff -u -r1.60 -r1.61 src/sys/dev/usb/if_axen.c cvs rdiff -u -r1.62 -r1.63 src/sys/dev/usb/if_cdce.c cvs rdiff -u -r1.22 -r1.23 src/sys/dev/usb/if_ure.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/usb/if_axe.c diff -u src/sys/dev/usb/if_axe.c:1.110 src/sys/dev/usb/if_axe.c:1.111 --- src/sys/dev/usb/if_axe.c:1.110 Sun Aug 11 01:04:33 2019 +++ src/sys/dev/usb/if_axe.c Sun Aug 11 02:37:03 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: if_axe.c,v 1.110 2019/08/11 01:04:33 mrg Exp $ */ +/* $NetBSD: if_axe.c,v 1.111 2019/08/11 02:37:03 mrg Exp $ */ /* $OpenBSD: if_axe.c,v 1.137 2016/04/13 11:03:37 mpi Exp $ */ /* @@ -87,7 +87,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.110 2019/08/11 01:04:33 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.111 2019/08/11 02:37:03 mrg Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -1192,9 +1192,9 @@ axe_tx_prepare(struct usbnet *un, struct length, m->m_pkthdr.len, sizeof(hdr), 0); } - length = hdr_len + m->m_pkthdr.len + tlr_len; - if (length > un->un_tx_bufsz) + if (m->m_pkthdr.len > un->un_tx_bufsz - hdr_len - tlr_len) return 0; + length = hdr_len + m->m_pkthdr.len + tlr_len; if (hdr_len) memcpy(c->unc_buf, &hdr, hdr_len); Index: src/sys/dev/usb/if_axen.c diff -u src/sys/dev/usb/if_axen.c:1.60 src/sys/dev/usb/if_axen.c:1.61 --- src/sys/dev/usb/if_axen.c:1.60 Sun Aug 11 01:04:33 2019 +++ src/sys/dev/usb/if_axen.c Sun Aug 11 02:37:03 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: if_axen.c,v 1.60 2019/08/11 01:04:33 mrg Exp $ */ +/* $NetBSD: if_axen.c,v 1.61 2019/08/11 02:37:03 mrg Exp $ */ /* $OpenBSD: if_axen.c,v 1.3 2013/10/21 10:10:22 yuo Exp $ */ /* @@ -23,7 +23,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_axen.c,v 1.60 2019/08/11 01:04:33 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_axen.c,v 1.61 2019/08/11 02:37:03 mrg Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -863,9 +863,9 @@ axen_tx_prepare(struct usbnet *un, struc usbnet_isowned_tx(un); - length = m->m_pkthdr.len + sizeof(hdr); - if (length > un->un_tx_bufsz) + if (m->m_pkthdr.len > un->un_tx_bufsz - sizeof(hdr)) return 0; + length = m->m_pkthdr.len + sizeof(hdr); /* XXX Is this needed? wMaxPacketSize? */ switch (un->un_udev->ud_speed) { Index: src/sys/dev/usb/if_cdce.c diff -u src/sys/dev/usb/if_cdce.c:1.62 src/sys/dev/usb/if_cdce.c:1.63 --- src/sys/dev/usb/if_cdce.c:1.62 Sun Aug 11 01:04:33 2019 +++ src/sys/dev/usb/if_cdce.c Sun Aug 11 02:37:03 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: if_cdce.c,v 1.62 2019/08/11 01:04:33 mrg Exp $ */ +/* $NetBSD: if_cdce.c,v 1.63 2019/08/11 02:37:03 mrg Exp $ */ /* * Copyright (c) 1997, 1998, 1999, 2000-2003 Bill Paul <wp...@windriver.com> @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_cdce.c,v 1.62 2019/08/11 01:04:33 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_cdce.c,v 1.63 2019/08/11 02:37:03 mrg Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -305,9 +305,9 @@ cdce_tx_prepare(struct usbnet *un, struc if (un->un_flags & CDCE_ZAURUS) extra = sizeof(crc); - length = m->m_pkthdr.len + extra; - if (length > un->un_tx_bufsz) + if (m->m_pkthdr.len > un->un_tx_bufsz - extra) return 0; + length = m->m_pkthdr.len + extra; m_copydata(m, 0, m->m_pkthdr.len, c->unc_buf); if (un->un_flags & CDCE_ZAURUS) { Index: src/sys/dev/usb/if_ure.c diff -u src/sys/dev/usb/if_ure.c:1.22 src/sys/dev/usb/if_ure.c:1.23 --- src/sys/dev/usb/if_ure.c:1.22 Sun Aug 11 01:04:33 2019 +++ src/sys/dev/usb/if_ure.c Sun Aug 11 02:37:04 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: if_ure.c,v 1.22 2019/08/11 01:04:33 mrg Exp $ */ +/* $NetBSD: if_ure.c,v 1.23 2019/08/11 02:37:04 mrg Exp $ */ /* $OpenBSD: if_ure.c,v 1.10 2018/11/02 21:32:30 jcs Exp $ */ /*- @@ -30,7 +30,7 @@ /* RealTek RTL8152/RTL8153 10/100/Gigabit USB Ethernet device */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_ure.c,v 1.22 2019/08/11 01:04:33 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_ure.c,v 1.23 2019/08/11 02:37:04 mrg Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -1066,7 +1066,7 @@ ure_tx_prepare(struct usbnet *un, struct usbnet_isowned_tx(un); - if (m->m_pkthdr.len + sizeof(txhdr) > un->un_tx_bufsz) + if (m->m_pkthdr.len > un->un_tx_bufsz - sizeof(txhdr)) return 0; /* header */