cvs commit: src/sys/netinet6 in6_src.c

Hajimu UMEMOTO ume at FreeBSD.org
Wed Aug 17 16:49:35 GMT 2005


Hi,

>>>>> On Tue, 16 Aug 2005 15:59:22 -0400
>>>>> John Baldwin <jhb at FreeBSD.org> said:

jhb> 1) This should be using TAILQ_FOREACH() to be more readable.

jhb> 2) It's not safe to drop the lock here as you've done as the list can change 
jhb> out from under you.  You might be able to use TAILQ_FOREACH_SAFE() if you 
jhb> know what the next entry in the can't be removed from the list while the lock 
jhb> is dropped, but that's usually not an easy thing to ensure unless you set a 
jhb> flag or some such while holding the lock to communicate that to the code that 
jhb> adds and removes items to this list.  You may need to use an sx lock here 
jhb> rather than a mutex.

jhb> As it is, this change opens up a race condition that can result in deref'ing 
jhb> bogus pointers and kernel panics.

Thank you for your suggestion.  I've committed the fix as your
suggestion.  If it is still wrong way, please let me know.

Sincerely,

--
Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan
ume at mahoroba.org  ume@{,jp.}FreeBSD.org
http://www.imasy.org/~ume/


More information about the cvs-src mailing list