Details
-
Bug
-
Status: Resolved
-
Critical
-
Resolution: Fixed
-
0.9.0
-
All platforms.
Description
This is a race bug found in ProcessManager::spawn in libprocess. Below is the description of this bug.
------------------------------------------------------------------------------------------------------
UPID ProcessManager::spawn(ProcessBase* process, bool manage)
{
...
// Use the garbage collector if requested.
if (manage)
// Add process to the run queue (so 'initialize' will get invoked).
enqueue(process);
VLOG(2) << "Spawned process " << process->self();
return process->self();
}
------------------------------------------------------------------------------------------------------
If a user spawns a process which is very short and sets 'manage' to true. It is likely that the pointer 'process' becomes a dangling pointer after enqueue(..) is called. As a result, a random segfault will be thrown when 'process->self()' is called.