mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-25 11:37:56 +00:00
In if_freemulti(), relax the paranoid KASSERT() on ifma->ifma_protospec.
This KASSERT() existed as a sanity check that upper layers in the network stack (e.g. inet, inet6) had released their reference to the underlying driver's multicast memberships (ifmultiaddr{}). However it assumes the lifecycle of the driver membership corresponds to the lifecycle of the network layer membership. In the submitter's case, ieee80211_ioctl_updatemulti() attempts to reprogram the (parent, physical) ifnet{} memberships in response to a change in membership on the (child, virtual) VAP ifnet, using a batched update mechanism. These updates happen independently from the network layer, causing a "false negative" assertion failure. There are possibly other use cases where this KASSERT() may be triggered by other networking stack activity (e.g. where a nesting relationship exists between multiple ifnet{} instances). This suggests that further review of FreeBSD's approach to nested ifnet relationships is needed. MFC after: 6 weeks Submitted by: adrian@
This commit is contained in:
parent
606b39f1e0
commit
d565e5f206
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=264323
@ -2937,8 +2937,6 @@ if_freemulti(struct ifmultiaddr *ifma)
|
||||
|
||||
KASSERT(ifma->ifma_refcount == 0, ("if_freemulti: refcount %d",
|
||||
ifma->ifma_refcount));
|
||||
KASSERT(ifma->ifma_protospec == NULL,
|
||||
("if_freemulti: protospec not NULL"));
|
||||
|
||||
if (ifma->ifma_lladdr != NULL)
|
||||
free(ifma->ifma_lladdr, M_IFMADDR);
|
||||
|
Loading…
Reference in New Issue
Block a user