Fix race in finding available vnc port
authorJim Fehlig <jfehlig@novell.com>
Fri, 21 May 2010 13:52:09 +0000 (07:52 -0600)
committerJim Fehlig <jfehlig@novell.com>
Fri, 21 May 2010 17:29:03 +0000 (11:29 -0600)
commitba196952f57f2cb22be75fa5a4f363035a111103
treeef879e13e93ac2f4a0dfd66cd8696a2375514361
parentc020f6203e3735a531135bc4321415ce5520fbde
Fix race in finding available vnc port

The qemu driver contains a subtle race in the logic to find next
available vnc port.  Currently it iterates through all available ports
and returns the first for which bind(2) succeeds.  However it is possible
that a previously issued port has not yet been bound by qemu, resulting
in the same port used for a subsequent domain.

This patch addresses the race by using a simple bitmap to "reserve" the
ports allocated by libvirt.

V2:
  - Put port bitmap in struct qemud_driver
  - Initialize bitmap in qemudStartup

V3:
  - Check for failure of virBitmapGetBit
  - Additional check for port != -1 before calling virbitmapClearBit

V4:
  - Check for failure of virBitmap{Set,Clear}Bit
src/qemu/qemu_conf.h
src/qemu/qemu_driver.c