summaryrefslogtreecommitdiffstats
path: root/sys/compat/ndis/kern_ndis.c
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2017-06-08 22:12:10 +0000
committerglebius <glebius@FreeBSD.org>2017-06-08 22:12:10 +0000
commit4d12144d57ccc8abb32744cbbaed337d689633a3 (patch)
tree5a75e076f666d7641196ec71cfc9a6a0f6c1b47f /sys/compat/ndis/kern_ndis.c
parentde6a59f2084a31a6abc6cdf4f8d1752d30670e67 (diff)
downloadFreeBSD-src-4d12144d57ccc8abb32744cbbaed337d689633a3.zip
FreeBSD-src-4d12144d57ccc8abb32744cbbaed337d689633a3.tar.gz
MFC r318677:
Fix regression in ndis(4) after r286410. This adds a bunch of checks for whether this is a Ethernet or 802.11 device and does proper dereferencing. PR: 213237 Submitted by: <ota j.email.ne.jp> Approved by: re (marius)
Diffstat (limited to 'sys/compat/ndis/kern_ndis.c')
-rw-r--r--sys/compat/ndis/kern_ndis.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/sys/compat/ndis/kern_ndis.c b/sys/compat/ndis/kern_ndis.c
index 47874e8..55b22a2 100644
--- a/sys/compat/ndis/kern_ndis.c
+++ b/sys/compat/ndis/kern_ndis.c
@@ -210,8 +210,8 @@ ndis_status_func(adapter, status, sbuf, slen)
block = adapter;
sc = device_get_softc(block->nmb_physdeviceobj->do_devext);
- ifp = sc->ifp;
- if (ifp->if_flags & IFF_DEBUG)
+ ifp = NDISUSB_GET_IFNET(sc);
+ if ( ifp && ifp->if_flags & IFF_DEBUG)
device_printf(sc->ndis_dev, "status: %x\n", status);
}
@@ -225,8 +225,8 @@ ndis_statusdone_func(adapter)
block = adapter;
sc = device_get_softc(block->nmb_physdeviceobj->do_devext);
- ifp = sc->ifp;
- if (ifp->if_flags & IFF_DEBUG)
+ ifp = NDISUSB_GET_IFNET(sc);
+ if (ifp && ifp->if_flags & IFF_DEBUG)
device_printf(sc->ndis_dev, "status complete\n");
}
@@ -264,9 +264,9 @@ ndis_resetdone_func(ndis_handle adapter, ndis_status status,
block = adapter;
sc = device_get_softc(block->nmb_physdeviceobj->do_devext);
- ifp = sc->ifp;
+ ifp = NDISUSB_GET_IFNET(sc);
- if (ifp->if_flags & IFF_DEBUG)
+ if (ifp && ifp->if_flags & IFF_DEBUG)
device_printf(sc->ndis_dev, "reset done...\n");
KeSetEvent(&block->nmb_resetevent, IO_NO_INCREMENT, FALSE);
}
@@ -285,6 +285,9 @@ ndis_create_sysctls(arg)
return (EINVAL);
sc = arg;
+ /*
+ device_printf(sc->ndis_dev, "ndis_create_sysctls() sc=%p\n", sc);
+ */
vals = sc->ndis_regvals;
TAILQ_INIT(&sc->ndis_cfglist_head);
@@ -698,8 +701,8 @@ ndis_ptom(m0, p)
*/
eh = mtod((*m0), struct ether_header *);
- ifp = ((struct ndis_softc *)p->np_softc)->ifp;
- if (totlen > ETHER_MAX_FRAME(ifp, eh->ether_type, FALSE)) {
+ ifp = NDISUSB_GET_IFNET((struct ndis_softc *)p->np_softc);
+ if (ifp && totlen > ETHER_MAX_FRAME(ifp, eh->ether_type, FALSE)) {
diff = totlen - ETHER_MAX_FRAME(ifp, eh->ether_type, FALSE);
totlen -= diff;
m->m_len -= diff;
OpenPOWER on IntegriCloud