diff options
author | yongari <yongari@FreeBSD.org> | 2011-10-17 19:49:00 +0000 |
---|---|---|
committer | yongari <yongari@FreeBSD.org> | 2011-10-17 19:49:00 +0000 |
commit | 4c371e596be040085df1b5f9e469ab9fd8278c89 (patch) | |
tree | d177532a5533584316ef20ec33ef25a4e8e17cac /sys/mips | |
parent | 56e15a778cfacd77cc855073167c952c91381994 (diff) | |
download | FreeBSD-src-4c371e596be040085df1b5f9e469ab9fd8278c89.zip FreeBSD-src-4c371e596be040085df1b5f9e469ab9fd8278c89.tar.gz |
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)
Diffstat (limited to 'sys/mips')
-rw-r--r-- | sys/mips/atheros/if_arge.c | 2 | ||||
-rw-r--r-- | sys/mips/idt/if_kr.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/sys/mips/atheros/if_arge.c b/sys/mips/atheros/if_arge.c index 92cc161..567b9ba 100644 --- a/sys/mips/atheros/if_arge.c +++ b/sys/mips/atheros/if_arge.c @@ -1199,9 +1199,9 @@ arge_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr) mii = device_get_softc(sc->arge_miibus); ARGE_LOCK(sc); mii_pollstat(mii); - ARGE_UNLOCK(sc); ifmr->ifm_active = mii->mii_media_active; ifmr->ifm_status = mii->mii_media_status; + ARGE_UNLOCK(sc); } struct arge_dmamap_arg { diff --git a/sys/mips/idt/if_kr.c b/sys/mips/idt/if_kr.c index 43b8df5..243968d 100644 --- a/sys/mips/idt/if_kr.c +++ b/sys/mips/idt/if_kr.c @@ -945,9 +945,9 @@ kr_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr) mii = device_get_softc(sc->kr_miibus); KR_LOCK(sc); mii_pollstat(mii); - KR_UNLOCK(sc); ifmr->ifm_active = mii->mii_media_active; ifmr->ifm_status = mii->mii_media_status; + KR_UNLOCK(sc); } struct kr_dmamap_arg { |