[libvirt] two nasty races
Daniel P. Berrange
berrange at redhat.com
Mon May 20 16:23:31 UTC 2013
On Mon, May 20, 2013 at 10:09:20AM -0600, Eric Blake wrote:
> On 05/20/2013 03:26 AM, Daniel P. Berrange wrote:
> > It is worse than that - you can't simply ignore ESRCH. In the same way
> > that existing processes can exit, new processes can come into live.
> > The virCgroupMoveTask method doesn't take any of this into account.
> >
>
> Are you talking about the potential for reusing a pid? Remember,
> cgroups is Linux only, and on Linux, we know the kernel behavior - pids
> (well, really thread ids) are assigned sequentially to the next
> available opening, and reusing a tid requires cycling through the entire
> pid space, something that can't happen in a short amount of time.
>
> The problem of pid recycling is more prevalent on other systems, like
> mingw, where pids are not assigned sequentially, and really can be
> reused the very next instruction after a previous process pid has been
> reclaimed. But since we know Linux does not have that behavior, is it
> really a problem for us?
>
> Ignoring ESRCH will solve the problem of a thread that dies between read
> and write, but like you said, won't solve the problem between a thread
> being created between read and write. For that, you'd have to
> repeatedly read the source file until it is empty.
No, i mean that the code does
pids = read(tasks file in old group)
write(pids, tasks file in new group)
In between step 1 and 2, more tasks can have been added to the
old group. So you'll not have moved everything out of the old
group when you're done.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list