Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Mar 2009 13:14:10 -0700
From:      Sam Leffler <sam@freebsd.org>
To:        Coleman Kane <cokane@freebsd.org>
Cc:        Bruce Simpson <bms@incunabulum.net>, current@freebsd.org, freebsd-net <net@freebsd.org>
Subject:   Re: IGMP+WiFi panic on recent kernel - in igmp_fasttimo()
Message-ID:  <49BEB312.7060105@freebsd.org>
In-Reply-To: <1237233210.84180.20.camel@localhost>
References:  <1236937253.2282.0.camel@localhost>	<49BAEA9F.8020302@incunabulum.net> <49BB0D3E.2020306@incunabulum.net>	<49BC1C66.7030400@freebsd.org> <1237233210.84180.20.camel@localhost>

next in thread | previous in thread | raw e-mail | index | archive | help
It is the same issue but the root cause is unclear.  There is much code 
that does assumes ifma_protospec might be NULL and checks for it.  In my 
case (creating a wlan ifnet and then destroying it on eject) the patch 
below is sufficient.  I don't care to dig right now to understand how 
this stuff is supposed to work; it should be clear from comments etc but 
the code is lacking.

    Sam

Coleman Kane wrote:
> The crash that I am seeing (using if_ndis) occurs in igmp_fasttimo...
> This patch doesn't fix that, I'll get more info as soon as I can.
>
> On Sat, 2009-03-14 at 14:06 -0700, Sam Leffler wrote:
>   
>> This patches avoids the crash.  Not sure how ifma_protospec is supposed 
>> to be handled so I'm not committing it.
>>
>>     Sam
>>
>> plain text document attachment (mcast.patch)
>> Index: in.c
>> ===================================================================
>> --- in.c	(revision 189750)
>> +++ in.c	(working copy)
>> @@ -1040,7 +1040,8 @@
>>  	 */
>>  	IF_ADDR_LOCK(ifp);
>>  	TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
>> -		if (ifma->ifma_addr->sa_family != AF_INET)
>> +		if (ifma->ifma_addr->sa_family != AF_INET ||
>> +		    ifma->ifma_protospec == NULL)
>>  			continue;
>>  		inm = (struct in_multi *)ifma->ifma_protospec;
>>  		LIST_INSERT_HEAD(&purgeinms, inm, inm_link);
>> Index: igmp.c
>> ===================================================================
>> --- igmp.c	(revision 189750)
>> +++ igmp.c	(working copy)
>> @@ -623,7 +623,8 @@
>>  	if (igi->igi_version == IGMP_VERSION_3) {
>>  		IF_ADDR_LOCK(ifp);
>>  		TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
>> -			if (ifma->ifma_addr->sa_family != AF_INET)
>> +			if (ifma->ifma_addr->sa_family != AF_INET ||
>> +			    ifma->ifma_protospec == NULL)
>>  				continue;
>>  			inm = (struct in_multi *)ifma->ifma_protospec;
>>  			if (inm->inm_state == IGMP_LEAVING_MEMBER) {
>> _______________________________________________
>> freebsd-current@freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-current
>> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
>>     




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49BEB312.7060105>