[pve-devel] [PATCH qemu-server] fix #1229: more explicit spice port allocation

Wolfgang Bumiller w.bumiller at proxmox.com
Mon Apr 24 15:52:02 CEST 2017


We cannot look for ports on "any" wildcard address while
letting qemu bind to "localhost", this may lead to a qemu
process occupying ::1 while the next search successfully
finds the same port available for IPv4's '*' address.

Instead, we now lookup the IP of the desired family for
'localhost'. Note that while we could simply be hardcoding
::1 or 127.0.0.1, with this code we are protocol agnostic.
---
 PVE/QemuServer.pm | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 64ecd8d..cb784ff 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -3160,9 +3160,12 @@ sub config_to_command {
 
 	my $nodename = PVE::INotify::nodename();
 	my $pfamily = PVE::Tools::get_host_address_family($nodename);
-	$spice_port = PVE::Tools::next_spice_port($pfamily);
+	my @nodeaddrs = PVE::Tools::getaddrinfo_all('localhost', family => $pfamily);
+	die "failed to get an ip address of type $pfamily for 'localhost'\n" if !@nodeaddrs;
+	my $localhost = PVE::Tools::addr_to_ip($nodeaddrs[0]->{addr});
+	$spice_port = PVE::Tools::next_spice_port($pfamily, $localhost);
 
-	push @$devices, '-spice', "tls-port=${spice_port},addr=localhost,tls-ciphers=HIGH,seamless-migration=on";
+	push @$devices, '-spice', "tls-port=${spice_port},addr=$localhost,tls-ciphers=HIGH,seamless-migration=on";
 
 	push @$devices, '-device', "virtio-serial,id=spice$pciaddr";
 	push @$devices, '-chardev', "spicevmc,id=vdagent,name=vdagent";
-- 
2.11.0





More information about the pve-devel mailing list