summaryrefslogtreecommitdiffstats
path: root/sys/dev/netmap
diff options
context:
space:
mode:
authorluigi <luigi@FreeBSD.org>2014-10-06 09:46:21 +0000
committerluigi <luigi@FreeBSD.org>2014-10-06 09:46:21 +0000
commit5aadc8e180a6ab8f7facb6ed823e8747a086da80 (patch)
treed2ccd282d28bc5cfdef1a8efe265518670589f58 /sys/dev/netmap
parent2014ab03540e62e3a46f9b1ecd1df3dd1e5af82f (diff)
downloadFreeBSD-src-5aadc8e180a6ab8f7facb6ed823e8747a086da80.zip
FreeBSD-src-5aadc8e180a6ab8f7facb6ed823e8747a086da80.tar.gz
MFC r272111
fix a panic when passing ifioctl from a netmap file descriptor to the underlying device. This needs to be merged to 10.1
Diffstat (limited to 'sys/dev/netmap')
-rw-r--r--sys/dev/netmap/netmap.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/sys/dev/netmap/netmap.c b/sys/dev/netmap/netmap.c
index 0fd362f..f37bf9e 100644
--- a/sys/dev/netmap/netmap.c
+++ b/sys/dev/netmap/netmap.c
@@ -2222,23 +2222,18 @@ netmap_ioctl(struct cdev *dev, u_long cmd, caddr_t data,
default: /* allow device-specific ioctls */
{
- struct socket so;
- struct ifnet *ifp;
+ struct ifnet *ifp = ifunit_ref(nmr->nr_name);
+ if (ifp == NULL) {
+ error = ENXIO;
+ } else {
+ struct socket so;
- bzero(&so, sizeof(so));
- NMG_LOCK();
- error = netmap_get_na(nmr, &na, 0 /* don't create */); /* keep reference */
- if (error) {
- netmap_adapter_put(na);
- NMG_UNLOCK();
- break;
+ bzero(&so, sizeof(so));
+ so.so_vnet = ifp->if_vnet;
+ // so->so_proto not null.
+ error = ifioctl(&so, cmd, data, td);
+ if_rele(ifp);
}
- ifp = na->ifp;
- so.so_vnet = ifp->if_vnet;
- // so->so_proto not null.
- error = ifioctl(&so, cmd, data, td);
- netmap_adapter_put(na);
- NMG_UNLOCK();
break;
}
OpenPOWER on IntegriCloud