John Baldwin c6f4ea8062 When cancelling multicast timers on an interface, don't release the
reference on a group in the leaving state while iterating over the loop.
Instead, use the same approach used in igmp_ifdetach() and mld_ifdetach()
of placing the groups to free on pending release list and then releasing
the references after dropping the IF_ADDR_LOCK.  This closes an ugly race
where the code was dropping the lock in the middle of iterating over the
list.  It also fixes some additional potential use-after-free bugs since
the cancellation routine also applied other changes to the group after
dropping the reference.  Now those changes are performed before the
reference is dropped and the group is potentially freed.

Prodded to fix by:	glebius
Reviewed by:	bz
MFC after:	1 week
2012-01-03 20:34:52 +00:00
..
2011-04-13 11:28:46 +00:00
2011-11-11 22:27:09 +00:00
2011-08-20 17:05:11 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-04-30 11:22:30 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-12-17 19:21:40 +00:00
2011-01-07 21:40:34 +00:00
2011-10-21 12:58:34 +00:00
2011-08-20 17:05:11 +00:00
2011-10-16 10:58:00 +00:00
2011-01-07 21:40:34 +00:00