cvs commit: src/sys/net if_bridge.c

Robert Watson rwatson at FreeBSD.org
Sat Aug 27 02:42:24 GMT 2005


On Sat, 27 Aug 2005, Andrew Thompson wrote:

>  Fix a panic in softclock() if the interface is destroyed with a bpf 
> consumer
>  attached.
>
>  This is caused by bpf_detachd clearing IFF_PROMISC on the interface which does
>  a SIOCSIFFLAGS ioctl. The problem here is that while the interface has been
>  stopped, IFF_UP has not been cleared so IFF_UP != IFF_DRV_RUNNING, this causes
>  the ioctl function to init() the interface which resets the callouts.
>
>  The destroy then completes and frees the softc but softclock will panic on a
>  dead callout pointer.
>
>  Ensure ifp->if_flags matches reality by clearing IFF_UP when we destroy.
>
>  Silence from:   rwatson
>  Approved by:    mlaier (mentor)
>  MFC after:      3 days

Sorry about not yet having gotten around to responding to your e-mail -- 
I've been on travel for the last couple of weeks, having spent quality 
time in Heathrow courtesy BA, but hope to look more closely at this and 
related issues in the near future.

One particular long-term concern I have is with respect to modification of 
IFF_UP state, which for most device drivers is an administrative 
condition, rather than a link condition.  Certain connection-oriented 
drivers, such as PPP, modify IFF_UP.  So do some ethernet interfaces, 
under the possibly mistaken impression that that is necessary to raise the 
interface when it is configured.  I've not yet had a chance to investigate 
what the right approach is, but in the long term, we will need to resolve 
who "owns" the field, be it the stack or the device driver, and how event 
notifications are handled.

I suspect some use of IFF_UP by device drivers will eventually become a 
separate driver-owned flag, possibly in softc, which will reflect the 
driver's state transitions to reflect administrator-requested up/down 
state.

Robert N M Watson


More information about the cvs-src mailing list