When a PCMCIA networking card is removed the IF code may free() the network
authorMatthew Dillon <dillon@dragonflybsd.org>
Wed, 19 Jan 2005 17:30:54 +0000 (17:30 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Wed, 19 Jan 2005 17:30:54 +0000 (17:30 +0000)
commit5c70338585f48038834a790616289f6d5134f430
treef934dc66802b940c674393f44a3cd182e1094cf2
parentad621f09858ca93984628b5996e552a902f60bf7
When a PCMCIA networking card is removed the IF code may free() the network
interface before processing has completed on pending packets, leaving a
dangling pointer in the mbuf and causing a crash.

The two solutions are to either ref-count the network interface on a
per-packet basis or to synchronize against consumers of the packet.
ref-counting is very expensive in an MP system so we have chosen to
synchronize against consumers by sending a NOP message to all protocol
processing threads and waiting for it to be replied.  This only occurs when
an interface is being brought down and is not expected to introduce any
performance issues.

Crash-Reported-by: Jonathon McKitrick <jcm@FreeBSD-uk.eu.org>
sys/net/if.c
sys/net/netisr.c
sys/net/netisr.h
sys/netinet/ip_demux.c