From 047122f35205f668a94d1ab2c0389b17ef9c0872 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Tue, 30 May 2017 15:30:14 +0200 Subject: [PATCH] fix #1229: more explicit spice port allocation 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 190a073c..6b754223 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -3151,9 +3151,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::Network::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";