Module Name:    src
Committed By:   mrg
Date:           Sun Aug 11 23:55:43 UTC 2019

Modified Files:
        src/sys/dev/usb: if_axe.c if_smsc.c if_ure.c if_urndis.c usbnet.c

Log Message:
don't set dv_private.  it's a bad pattern and only didn't
trip kmem_free() lossage because struct usbnet is at the
start of the softc.

for now, enforce this as part of the ABI.

catch up urndis with tx_prepare checking buffer length,
and also add an assert to usbnet_start_locked() to match.


To generate a diff of this commit:
cvs rdiff -u -r1.112 -r1.113 src/sys/dev/usb/if_axe.c
cvs rdiff -u -r1.55 -r1.56 src/sys/dev/usb/if_smsc.c
cvs rdiff -u -r1.24 -r1.25 src/sys/dev/usb/if_ure.c
cvs rdiff -u -r1.28 -r1.29 src/sys/dev/usb/if_urndis.c
cvs rdiff -u -r1.12 -r1.13 src/sys/dev/usb/usbnet.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.112 src/sys/dev/usb/if_axe.c:1.113
--- src/sys/dev/usb/if_axe.c:1.112	Sun Aug 11 05:14:41 2019
+++ src/sys/dev/usb/if_axe.c	Sun Aug 11 23:55:43 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_axe.c,v 1.112 2019/08/11 05:14:41 mrg Exp $	*/
+/*	$NetBSD: if_axe.c,v 1.113 2019/08/11 23:55:43 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.112 2019/08/11 05:14:41 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.113 2019/08/11 23:55:43 mrg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -873,8 +873,7 @@ axe_attach(device_t parent, device_t sel
 	unsigned bufsz;
 	int i;
 
-	/* Switch to usbnet for device_private() */
-	self->dv_private = un;
+	KASSERT((void *)sc == un);
 
 	aprint_naive("\n");
 	aprint_normal("\n");

Index: src/sys/dev/usb/if_smsc.c
diff -u src/sys/dev/usb/if_smsc.c:1.55 src/sys/dev/usb/if_smsc.c:1.56
--- src/sys/dev/usb/if_smsc.c:1.55	Sun Aug 11 12:16:59 2019
+++ src/sys/dev/usb/if_smsc.c	Sun Aug 11 23:55:43 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_smsc.c,v 1.55 2019/08/11 12:16:59 skrll Exp $	*/
+/*	$NetBSD: if_smsc.c,v 1.56 2019/08/11 23:55:43 mrg Exp $	*/
 
 /*	$OpenBSD: if_smsc.c,v 1.4 2012/09/27 12:38:11 jsg Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/net/if_smsc.c,v 1.1 2012/08/15 04:03:55 gonzo Exp $ */
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_smsc.c,v 1.55 2019/08/11 12:16:59 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_smsc.c,v 1.56 2019/08/11 23:55:43 mrg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -823,8 +823,7 @@ smsc_attach(device_t parent, device_t se
 	int err, i;
 	uint32_t mac_h, mac_l;
 
-	/* Switch to usbnet for device_private() */
-	self->dv_private = un;
+	KASSERT((void *)sc == un);
 
 	aprint_naive("\n");
 	aprint_normal("\n");

Index: src/sys/dev/usb/if_ure.c
diff -u src/sys/dev/usb/if_ure.c:1.24 src/sys/dev/usb/if_ure.c:1.25
--- src/sys/dev/usb/if_ure.c:1.24	Sun Aug 11 08:57:36 2019
+++ src/sys/dev/usb/if_ure.c	Sun Aug 11 23:55:43 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ure.c,v 1.24 2019/08/11 08:57:36 skrll Exp $	*/
+/*	$NetBSD: if_ure.c,v 1.25 2019/08/11 23:55:43 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.24 2019/08/11 08:57:36 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ure.c,v 1.25 2019/08/11 23:55:43 mrg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -842,9 +842,6 @@ ure_attach(device_t parent, device_t sel
 	uint8_t eaddr[8]; /* 2byte padded */
 	char *devinfop;
 
-	/* Switch to usbnet for device_private() */
-	self->dv_private = un;
-
 	aprint_naive("\n");
 	aprint_normal("\n");
 	devinfop = usbd_devinfo_alloc(dev, 0);

Index: src/sys/dev/usb/if_urndis.c
diff -u src/sys/dev/usb/if_urndis.c:1.28 src/sys/dev/usb/if_urndis.c:1.29
--- src/sys/dev/usb/if_urndis.c:1.28	Sun Aug 11 13:16:10 2019
+++ src/sys/dev/usb/if_urndis.c	Sun Aug 11 23:55:43 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_urndis.c,v 1.28 2019/08/11 13:16:10 hannken Exp $ */
+/*	$NetBSD: if_urndis.c,v 1.29 2019/08/11 23:55:43 mrg Exp $ */
 /*	$OpenBSD: if_urndis.c,v 1.31 2011/07/03 15:47:17 matthew Exp $ */
 
 /*
@@ -21,7 +21,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_urndis.c,v 1.28 2019/08/11 13:16:10 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_urndis.c,v 1.29 2019/08/11 23:55:43 mrg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -720,6 +720,11 @@ urndis_tx_prepare(struct usbnet *un, str
 {
 	struct rndis_packet_msg		*msg;
 
+	usbnet_isowned_tx(un);
+
+	if (m->m_pkthdr.len > un->un_tx_bufsz - sizeof(*msg))
+		return 0;
+
 	msg = (struct rndis_packet_msg *)c->unc_buf;
 
 	memset(msg, 0, sizeof(*msg));
@@ -929,8 +934,7 @@ urndis_attach(device_t parent, device_t 
 	uint32_t			 filter;
 	char				*devinfop;
 
-	/* Switch to usbnet for device_private() */
-	self->dv_private = un;
+	KASSERT((void *)sc == un);
 
 	aprint_naive("\n");
 	aprint_normal("\n");

Index: src/sys/dev/usb/usbnet.c
diff -u src/sys/dev/usb/usbnet.c:1.12 src/sys/dev/usb/usbnet.c:1.13
--- src/sys/dev/usb/usbnet.c:1.12	Sun Aug 11 01:31:19 2019
+++ src/sys/dev/usb/usbnet.c	Sun Aug 11 23:55:43 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbnet.c,v 1.12 2019/08/11 01:31:19 mrg Exp $	*/
+/*	$NetBSD: usbnet.c,v 1.13 2019/08/11 23:55:43 mrg Exp $	*/
 
 /*
  * Copyright (c) 2019 Matthew R. Green
@@ -29,11 +29,11 @@
  */
 
 /*
- * Common code shared between USB ethernet drivers.
+ * Common code shared between USB network drivers.
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usbnet.c,v 1.12 2019/08/11 01:31:19 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usbnet.c,v 1.13 2019/08/11 23:55:43 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -438,6 +438,7 @@ usbnet_start_locked(struct ifnet *ifp)
 		IFQ_POLL(&ifp->if_snd, m);
 		if (m == NULL)
 			break;
+		KASSERT(m->m_pkthdr.len <= un->un_tx_bufsz);
 
 		struct usbnet_chain *c = &cd->uncd_tx_chain[idx];
 
@@ -1274,6 +1275,9 @@ usbnet_attach(struct usbnet *un,
 	KASSERT(un->un_rx_list_cnt);
 	KASSERT(un->un_tx_list_cnt);
 
+	/* Unfortunate fact.  */
+	KASSERT(un == device_private(un->un_dev));
+
 	un->un_pri = kmem_zalloc(sizeof(*un->un_pri), KM_SLEEP);
 	struct usbnet_private * const unp = un->un_pri;
 

Reply via email to