svn commit: r226479 - head/sys/dev/usb/net
Pyun YongHyeon
yongari at FreeBSD.org
Mon Oct 17 19:51:39 UTC 2011
Author: yongari
Date: Mon Oct 17 19:51:38 2011
New Revision: 226479
URL: http://svn.freebsd.org/changeset/base/226479
Log:
Close a race where SIOCGIFMEDIA ioctl get inconsistent link status.
Because driver is accessing a common MII structure in
mii_pollstat(), updating user supplied structure should be done
before dropping a driver lock.
Reported by: Karim (fodillemlinkarimi <> gmail dot com)
Modified:
head/sys/dev/usb/net/if_aue.c
head/sys/dev/usb/net/if_axe.c
head/sys/dev/usb/net/if_mos.c
head/sys/dev/usb/net/if_rue.c
head/sys/dev/usb/net/if_udav.c
Modified: head/sys/dev/usb/net/if_aue.c
==============================================================================
--- head/sys/dev/usb/net/if_aue.c Mon Oct 17 19:49:00 2011 (r226478)
+++ head/sys/dev/usb/net/if_aue.c Mon Oct 17 19:51:38 2011 (r226479)
@@ -1032,9 +1032,9 @@ aue_ifmedia_sts(struct ifnet *ifp, struc
AUE_LOCK(sc);
mii_pollstat(mii);
- AUE_UNLOCK(sc);
ifmr->ifm_active = mii->mii_media_active;
ifmr->ifm_status = mii->mii_media_status;
+ AUE_UNLOCK(sc);
}
/*
Modified: head/sys/dev/usb/net/if_axe.c
==============================================================================
--- head/sys/dev/usb/net/if_axe.c Mon Oct 17 19:49:00 2011 (r226478)
+++ head/sys/dev/usb/net/if_axe.c Mon Oct 17 19:51:38 2011 (r226479)
@@ -452,9 +452,9 @@ axe_ifmedia_sts(struct ifnet *ifp, struc
AXE_LOCK(sc);
mii_pollstat(mii);
- AXE_UNLOCK(sc);
ifmr->ifm_active = mii->mii_media_active;
ifmr->ifm_status = mii->mii_media_status;
+ AXE_UNLOCK(sc);
}
static void
Modified: head/sys/dev/usb/net/if_mos.c
==============================================================================
--- head/sys/dev/usb/net/if_mos.c Mon Oct 17 19:49:00 2011 (r226478)
+++ head/sys/dev/usb/net/if_mos.c Mon Oct 17 19:51:38 2011 (r226479)
@@ -551,10 +551,10 @@ mos_ifmedia_sts(struct ifnet *ifp, struc
MOS_LOCK(sc);
mii_pollstat(mii);
- MOS_UNLOCK(sc);
ifmr->ifm_active = mii->mii_media_active;
ifmr->ifm_status = mii->mii_media_status;
+ MOS_UNLOCK(sc);
}
static void
Modified: head/sys/dev/usb/net/if_rue.c
==============================================================================
--- head/sys/dev/usb/net/if_rue.c Mon Oct 17 19:49:00 2011 (r226478)
+++ head/sys/dev/usb/net/if_rue.c Mon Oct 17 19:51:38 2011 (r226479)
@@ -889,9 +889,9 @@ rue_ifmedia_sts(struct ifnet *ifp, struc
RUE_LOCK(sc);
mii_pollstat(mii);
- RUE_UNLOCK(sc);
ifmr->ifm_active = mii->mii_media_active;
ifmr->ifm_status = mii->mii_media_status;
+ RUE_UNLOCK(sc);
}
static void
Modified: head/sys/dev/usb/net/if_udav.c
==============================================================================
--- head/sys/dev/usb/net/if_udav.c Mon Oct 17 19:49:00 2011 (r226478)
+++ head/sys/dev/usb/net/if_udav.c Mon Oct 17 19:51:38 2011 (r226479)
@@ -751,9 +751,9 @@ udav_ifmedia_status(struct ifnet *ifp, s
UDAV_LOCK(sc);
mii_pollstat(mii);
- UDAV_UNLOCK(sc);
ifmr->ifm_active = mii->mii_media_active;
ifmr->ifm_status = mii->mii_media_status;
+ UDAV_UNLOCK(sc);
}
static void
More information about the svn-src-all
mailing list