NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/46734: pool not drained



The following reply was made to PR kern/46734; it has been noted by GNATS.

From: Emmanuel Dreyfus <manu%netbsd.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: 
Subject: Re: kern/46734: pool not drained
Date: Fri, 17 Aug 2012 15:28:45 +0000

 Lots of talks and tests occured behind the scene with Martin. here is a 
 summary.
 
 The kernel crashed because of an assertion when freeing a pool while some
 objects were still allocated. This happenned because we had pending parks
 the were not freed at the time we freed the pool. And we proceeded with
 unmounting while having pending parks because the unmount system call
 was interrupted by a SIGCHLD thatcaused another unmount by closing 
 /dev/puffs.
 
 This means we have a race condition in the kernel, but it seems it has
 always been there. reproducing it was hard. However, we spoted the change 
 that made the race condition likely to occur:
 
 libpuffs maintain a lookup count in struct puffs_node in order to detect
 trace conditions between lookup and reclaim. Doing that, it assumes the 
 cookies always map to struct puffs_node. This was not the case for 
 libp2k, which mapped cookies to struct p2k_node. libpuffs therefore
 corrupted struct libp2k_node. 
 
 That bug has been ifxed in libp2k, and the fix has been pulled up to 
 netbsd-6. The kernel race condition on unmount remains but we were
 not able to reproduce it anymore.
 
 
 -- 
 Emmanuel Dreyfus
 manu%netbsd.org@localhost
 


Home | Main Index | Thread Index | Old Index