Hello community, here is the log from the commit of package libvirt for openSUSE:12.1:Update:Test checked in at 2012-01-19 18:05:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:12.1:Update:Test/libvirt (Old) and /work/SRC/openSUSE:12.1:Update:Test/.libvirt.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libvirt", Maintainer is "[email protected]" Changes: -------- --- /work/SRC/openSUSE:12.1:Update:Test/libvirt/libvirt.changes 2012-01-19 18:05:49.000000000 +0100 +++ /work/SRC/openSUSE:12.1:Update:Test/.libvirt.new/libvirt.changes 2012-01-19 18:05:49.000000000 +0100 @@ -1,0 +2,69 @@ +Wed Jan 4 10:04:04 MST 2012 - [email protected] + +- Use %fdupes for duplicate file checking instead of hand-rolled + function + +------------------------------------------------------------------- +Tue Dec 20 15:46:29 MST 2011 - [email protected] + +- Fix authorization workflow with PolicyKit. + polkit.patch + bnc#735403 + +------------------------------------------------------------------- +Thu Dec 15 14:00:57 MST 2011 - [email protected] + +- Fix qemu default migration speed. It should not be 33554432Mb! + 61f2b6ba-no-unlimited-mig2file-speed.patch + d8916dc8-def-qemu-migspeed.patch + +------------------------------------------------------------------- +Mon Dec 12 16:50:59 MST 2011 - [email protected] + +- CVE-2011-4600: unintended firewall port exposure after restarting + libvirtd when defining a bridged forward-mode network + ae1232b2-CVE-2011-4600.patch + bnc#736082 + +------------------------------------------------------------------- +Thu Dec 8 10:30:32 MST 2011 - [email protected] + +- Fix default console type setting + 209c2880-multiple-consoles-7.patch +- Fix 'virsh console' with Xen HVM + xen-hvm-virsh-console.patch + bnc#731974 + +------------------------------------------------------------------- +Wed Dec 7 11:47:15 MST 2011 - [email protected] + +- Prevent libvirtd crash on 'virsh qemu-attach' when + security_driver is "none" in /etc/libvirt/qemu.conf + 28423019-qemu-attach-crash.patch + bnc#735023 + +------------------------------------------------------------------- +Wed Nov 30 09:53:25 MST 2011 - [email protected] + +- Allow qemu driver (and hence libvirtd) to load when qemu + user:group does not exist. The kvm or qemu package, which may + not exist on a xen host, creates qemu user:group. + relax-qemu-usergroup-check.patch + bnc#711096 + +------------------------------------------------------------------- +Mon Nov 28 15:19:42 MST 2011 - [email protected] +- Accommodate Xen domctl version 8 + xen-domctl-ver8.patch +- Handle empty strings in s-expression returned by xend + a495365d-sexpr-empty-str.patch + bnc#731344 +- Allow libvirtd to access libvirt_{io,part}helper when confined + by apparmor + Update install-apparmor-profiles.patch + bnc#730435 +- Fixed to return success when there are no errors while parsing + bonding interface miimon xml node parameters. + bonding-miimon-xml-parsing.patch + +------------------------------------------------------------------- New: ---- 209c2880-multiple-consoles-7.patch 28423019-qemu-attach-crash.patch 49d8c8bc-xen-domctl-ver8.patch 61f2b6ba-no-unlimited-mig2file-speed.patch 9ae4ac7a-PolicyKit.patch a495365d-sexpr-empty-str.patch ae1232b2-CVE-2011-4600.patch beeea90a-xen-hvm-console.patch bonding-miimon-xml-parsing.patch d8916dc8-def-qemu-migspeed.patch relax-qemu-usergroup-check.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libvirt.spec ++++++ --- /var/tmp/diff_new_pack.I0nnCU/_old 2012-01-19 18:05:49.000000000 +0100 +++ /var/tmp/diff_new_pack.I0nnCU/_new 2012-01-19 18:05:49.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package libvirt # -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -378,15 +378,26 @@ # the openSUSE kvm package is patched with qemu 'no-shutdown' fix Patch0: f84aedad-revert.patch Patch1: c1bc3d89-qemu-add-ahci.patch +Patch2: a495365d-sexpr-empty-str.patch +Patch3: 28423019-qemu-attach-crash.patch +Patch4: 209c2880-multiple-consoles-7.patch +Patch5: ae1232b2-CVE-2011-4600.patch +Patch6: 61f2b6ba-no-unlimited-mig2file-speed.patch +Patch7: d8916dc8-def-qemu-migspeed.patch +Patch8: 49d8c8bc-xen-domctl-ver8.patch +Patch9: beeea90a-xen-hvm-console.patch +Patch10: 9ae4ac7a-PolicyKit.patch # Need to go upstream Patch100: xen-name-for-devid.patch Patch101: clone.patch Patch102: xen-pv-cdrom.patch Patch103: xend-disk-order.patch +Patch104: bonding-miimon-xml-parsing.patch # Our patches Patch200: libvirtd-defaults.patch Patch201: use-init-script-redhat.patch -Patch202: suse-qemu-conf.patch +Patch202: relax-qemu-usergroup-check.patch +Patch203: suse-qemu-conf.patch %if %{with_apparmor} Patch250: install-apparmor-profiles.patch %endif @@ -503,13 +514,24 @@ %setup -q %patch0 -p1 %patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 %patch100 -p1 %patch101 %patch102 -p1 %patch103 -p1 +%patch104 -p1 %patch200 -p1 %patch201 -p1 %patch202 -p1 +%patch203 -p1 %if %{with_apparmor} %patch250 -p1 %endif @@ -712,22 +734,6 @@ rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/nwfilter %endif -ln_dupes() -{ - target="" - fdupes -r "$1" | while read file; do - if [ -z "$file" ] || [ -z "$target" ]; then - target="$file" - continue - fi - ln -sf "${target#.}" "$file" - done -} -( - cd $RPM_BUILD_ROOT - ln_dupes .%{_docdir}/%{name} - ln_dupes ./usr/share/locale -) # init scripts mkdir -p $RPM_BUILD_ROOT/etc/init.d %if %{with_libvirtd} @@ -739,6 +745,7 @@ #/usr/share/SuSEfirewall2/services/TEMPLATE mkdir -p $RPM_BUILD_ROOT/%{_fwdefdir} install -m 644 %{S:2} $RPM_BUILD_ROOT/%{_fwdefdir}/libvirtd-relocation-server +%fdupes -s $RPM_BUILD_ROOT %clean rm -rf $RPM_BUILD_ROOT ++++++ 209c2880-multiple-consoles-7.patch ++++++ ++++ 601 lines (skipped) ++++++ 28423019-qemu-attach-crash.patch ++++++ commit 284230199af915a90322d6cc4a6210aaa2a33b28 Author: Jim Fehlig <[email protected]> Date: Wed Dec 7 11:23:03 2011 -0700 Prevent crash of libvirtd when attaching to existing qemu process With security_driver set to "none" in /etc/libvirt/qemu.conf, libvirtd would crash when attempted to attach to an existing qemu process. Only copy the security model if it actually exists. Index: libvirt-0.9.6/src/qemu/qemu_process.c =================================================================== --- libvirt-0.9.6.orig/src/qemu/qemu_process.c +++ libvirt-0.9.6/src/qemu/qemu_process.c @@ -3509,7 +3509,8 @@ int qemuProcessAttach(virConnectPtr conn if (virSecurityManagerGetProcessLabel(driver->securityManager, vm, seclabel) < 0) goto cleanup; - if (!(vm->def->seclabel.model = strdup(driver->caps->host.secModel.model))) + if (driver->caps->host.secModel.model && + !(vm->def->seclabel.model = strdup(driver->caps->host.secModel.model))) goto no_memory; if (!(vm->def->seclabel.label = strdup(seclabel->label))) goto no_memory; ++++++ 49d8c8bc-xen-domctl-ver8.patch ++++++ Index: libvirt-0.9.6/src/xen/xen_hypervisor.c =================================================================== --- libvirt-0.9.6.orig/src/xen/xen_hypervisor.c +++ libvirt-0.9.6/src/xen/xen_hypervisor.c @@ -239,12 +239,30 @@ struct xen_v2d7_getdomaininfo { }; typedef struct xen_v2d7_getdomaininfo xen_v2d7_getdomaininfo; +struct xen_v2d8_getdomaininfo { + domid_t domain; /* the domain number */ + uint32_t flags; /* flags, see before */ + uint64_t tot_pages ALIGN_64; /* total number of pages used */ + uint64_t max_pages ALIGN_64; /* maximum number of pages allowed */ + uint64_t shr_pages ALIGN_64; /* number of shared pages */ + uint64_t paged_pages ALIGN_64; /* number of paged pages */ + uint64_t shared_info_frame ALIGN_64; /* MFN of shared_info struct */ + uint64_t cpu_time ALIGN_64; /* CPU time used */ + uint32_t nr_online_vcpus; /* Number of VCPUs currently online. */ + uint32_t max_vcpu_id; /* Maximum VCPUID in use by this domain. */ + uint32_t ssidref; + xen_domain_handle_t handle; + uint32_t cpupool; +}; +typedef struct xen_v2d8_getdomaininfo xen_v2d8_getdomaininfo; + union xen_getdomaininfo { struct xen_v0_getdomaininfo v0; struct xen_v2_getdomaininfo v2; struct xen_v2d5_getdomaininfo v2d5; struct xen_v2d6_getdomaininfo v2d6; struct xen_v2d7_getdomaininfo v2d7; + struct xen_v2d8_getdomaininfo v2d8; }; typedef union xen_getdomaininfo xen_getdomaininfo; @@ -254,6 +272,7 @@ union xen_getdomaininfolist { struct xen_v2d5_getdomaininfo *v2d5; struct xen_v2d6_getdomaininfo *v2d6; struct xen_v2d7_getdomaininfo *v2d7; + struct xen_v2d8_getdomaininfo *v2d8; }; typedef union xen_getdomaininfolist xen_getdomaininfolist; @@ -291,179 +310,211 @@ typedef struct xen_v2s5_availheap xen_v #define XEN_GETDOMAININFOLIST_ALLOC(domlist, size) \ (hypervisor_version < 2 ? \ (VIR_ALLOC_N(domlist.v0, (size)) == 0) : \ + (dom_interface_version >= 8 ? \ + (VIR_ALLOC_N(domlist.v2d8, (size)) == 0) : \ (dom_interface_version >= 7 ? \ (VIR_ALLOC_N(domlist.v2d7, (size)) == 0) : \ (dom_interface_version == 6 ? \ (VIR_ALLOC_N(domlist.v2d6, (size)) == 0) : \ (dom_interface_version == 5 ? \ (VIR_ALLOC_N(domlist.v2d5, (size)) == 0) : \ - (VIR_ALLOC_N(domlist.v2, (size)) == 0))))) + (VIR_ALLOC_N(domlist.v2, (size)) == 0)))))) #define XEN_GETDOMAININFOLIST_FREE(domlist) \ (hypervisor_version < 2 ? \ VIR_FREE(domlist.v0) : \ + (dom_interface_version >= 8 ? \ + VIR_FREE(domlist.v2d8) : \ (dom_interface_version >= 7 ? \ VIR_FREE(domlist.v2d7) : \ (dom_interface_version == 6 ? \ VIR_FREE(domlist.v2d6) : \ (dom_interface_version == 5 ? \ VIR_FREE(domlist.v2d5) : \ - VIR_FREE(domlist.v2))))) + VIR_FREE(domlist.v2)))))) #define XEN_GETDOMAININFOLIST_CLEAR(domlist, size) \ (hypervisor_version < 2 ? \ memset(domlist.v0, 0, sizeof(*domlist.v0) * size) : \ + (dom_interface_version >= 8 ? \ + memset(domlist.v2d8, 0, sizeof(*domlist.v2d8) * size) : \ (dom_interface_version >= 7 ? \ memset(domlist.v2d7, 0, sizeof(*domlist.v2d7) * size) : \ (dom_interface_version == 6 ? \ memset(domlist.v2d6, 0, sizeof(*domlist.v2d6) * size) : \ (dom_interface_version == 5 ? \ memset(domlist.v2d5, 0, sizeof(*domlist.v2d5) * size) : \ - memset(domlist.v2, 0, sizeof(*domlist.v2) * size))))) + memset(domlist.v2, 0, sizeof(*domlist.v2) * size)))))) #define XEN_GETDOMAININFOLIST_DOMAIN(domlist, n) \ (hypervisor_version < 2 ? \ domlist.v0[n].domain : \ + (dom_interface_version >= 8 ? \ + domlist.v2d8[n].domain : \ (dom_interface_version >= 7 ? \ domlist.v2d7[n].domain : \ (dom_interface_version == 6 ? \ domlist.v2d6[n].domain : \ (dom_interface_version == 5 ? \ domlist.v2d5[n].domain : \ - domlist.v2[n].domain)))) + domlist.v2[n].domain))))) #define XEN_GETDOMAININFOLIST_UUID(domlist, n) \ (hypervisor_version < 2 ? \ domlist.v0[n].handle : \ + (dom_interface_version >= 8 ? \ + domlist.v2d8[n].handle : \ (dom_interface_version >= 7 ? \ domlist.v2d7[n].handle : \ (dom_interface_version == 6 ? \ domlist.v2d6[n].handle : \ (dom_interface_version == 5 ? \ domlist.v2d5[n].handle : \ - domlist.v2[n].handle)))) + domlist.v2[n].handle))))) #define XEN_GETDOMAININFOLIST_DATA(domlist) \ (hypervisor_version < 2 ? \ (void*)(domlist->v0) : \ + (dom_interface_version >= 8 ? \ + (void*)(domlist->v2d8) : \ (dom_interface_version >= 7 ? \ (void*)(domlist->v2d7) : \ (dom_interface_version == 6 ? \ (void*)(domlist->v2d6) : \ (dom_interface_version == 5 ? \ (void*)(domlist->v2d5) : \ - (void*)(domlist->v2))))) + (void*)(domlist->v2)))))) #define XEN_GETDOMAININFO_SIZE \ (hypervisor_version < 2 ? \ sizeof(xen_v0_getdomaininfo) : \ + (dom_interface_version >= 8 ? \ + sizeof(xen_v2d8_getdomaininfo) : \ (dom_interface_version >= 7 ? \ sizeof(xen_v2d7_getdomaininfo) : \ (dom_interface_version == 6 ? \ sizeof(xen_v2d6_getdomaininfo) : \ (dom_interface_version == 5 ? \ sizeof(xen_v2d5_getdomaininfo) : \ - sizeof(xen_v2_getdomaininfo))))) + sizeof(xen_v2_getdomaininfo)))))) #define XEN_GETDOMAININFO_CLEAR(dominfo) \ (hypervisor_version < 2 ? \ memset(&(dominfo.v0), 0, sizeof(xen_v0_getdomaininfo)) : \ + (dom_interface_version >= 8 ? \ + memset(&(dominfo.v2d8), 0, sizeof(xen_v2d8_getdomaininfo)) : \ (dom_interface_version >= 7 ? \ memset(&(dominfo.v2d7), 0, sizeof(xen_v2d7_getdomaininfo)) : \ (dom_interface_version == 6 ? \ memset(&(dominfo.v2d6), 0, sizeof(xen_v2d6_getdomaininfo)) : \ (dom_interface_version == 5 ? \ memset(&(dominfo.v2d5), 0, sizeof(xen_v2d5_getdomaininfo)) : \ - memset(&(dominfo.v2), 0, sizeof(xen_v2_getdomaininfo)))))) + memset(&(dominfo.v2), 0, sizeof(xen_v2_getdomaininfo))))))) #define XEN_GETDOMAININFO_DOMAIN(dominfo) \ (hypervisor_version < 2 ? \ dominfo.v0.domain : \ + (dom_interface_version >= 8 ? \ + dominfo.v2d8.domain : \ (dom_interface_version >= 7 ? \ dominfo.v2d7.domain : \ (dom_interface_version == 6 ? \ dominfo.v2d6.domain : \ (dom_interface_version == 5 ? \ dominfo.v2d5.domain : \ - dominfo.v2.domain)))) + dominfo.v2.domain))))) #define XEN_GETDOMAININFO_CPUTIME(dominfo) \ (hypervisor_version < 2 ? \ dominfo.v0.cpu_time : \ + (dom_interface_version >= 8 ? \ + dominfo.v2d8.cpu_time : \ (dom_interface_version >= 7 ? \ dominfo.v2d7.cpu_time : \ (dom_interface_version == 6 ? \ dominfo.v2d6.cpu_time : \ (dom_interface_version == 5 ? \ dominfo.v2d5.cpu_time : \ - dominfo.v2.cpu_time)))) + dominfo.v2.cpu_time))))) #define XEN_GETDOMAININFO_CPUCOUNT(dominfo) \ (hypervisor_version < 2 ? \ dominfo.v0.nr_online_vcpus : \ + (dom_interface_version >= 8 ? \ + dominfo.v2d8.nr_online_vcpus : \ (dom_interface_version >= 7 ? \ dominfo.v2d7.nr_online_vcpus : \ (dom_interface_version == 6 ? \ dominfo.v2d6.nr_online_vcpus : \ (dom_interface_version == 5 ? \ dominfo.v2d5.nr_online_vcpus : \ - dominfo.v2.nr_online_vcpus)))) + dominfo.v2.nr_online_vcpus))))) #define XEN_GETDOMAININFO_MAXCPUID(dominfo) \ (hypervisor_version < 2 ? \ dominfo.v0.max_vcpu_id : \ + (dom_interface_version >= 8 ? \ + dominfo.v2d8.max_vcpu_id : \ (dom_interface_version >= 7 ? \ dominfo.v2d7.max_vcpu_id : \ (dom_interface_version == 6 ? \ dominfo.v2d6.max_vcpu_id : \ (dom_interface_version == 5 ? \ dominfo.v2d5.max_vcpu_id : \ - dominfo.v2.max_vcpu_id)))) + dominfo.v2.max_vcpu_id))))) #define XEN_GETDOMAININFO_FLAGS(dominfo) \ (hypervisor_version < 2 ? \ dominfo.v0.flags : \ + (dom_interface_version >= 8 ? \ + dominfo.v2d8.flags : \ (dom_interface_version >= 7 ? \ dominfo.v2d7.flags : \ (dom_interface_version == 6 ? \ dominfo.v2d6.flags : \ (dom_interface_version == 5 ? \ dominfo.v2d5.flags : \ - dominfo.v2.flags)))) + dominfo.v2.flags))))) #define XEN_GETDOMAININFO_TOT_PAGES(dominfo) \ (hypervisor_version < 2 ? \ dominfo.v0.tot_pages : \ + (dom_interface_version >= 8 ? \ + dominfo.v2d8.tot_pages : \ (dom_interface_version >= 7 ? \ dominfo.v2d7.tot_pages : \ (dom_interface_version == 6 ? \ dominfo.v2d6.tot_pages : \ (dom_interface_version == 5 ? \ dominfo.v2d5.tot_pages : \ - dominfo.v2.tot_pages)))) + dominfo.v2.tot_pages))))) #define XEN_GETDOMAININFO_MAX_PAGES(dominfo) \ (hypervisor_version < 2 ? \ dominfo.v0.max_pages : \ + (dom_interface_version >= 8 ? \ + dominfo.v2d8.max_pages : \ (dom_interface_version >= 7 ? \ dominfo.v2d7.max_pages : \ (dom_interface_version == 6 ? \ dominfo.v2d6.max_pages : \ (dom_interface_version == 5 ? \ dominfo.v2d5.max_pages : \ - dominfo.v2.max_pages)))) + dominfo.v2.max_pages))))) #define XEN_GETDOMAININFO_UUID(dominfo) \ (hypervisor_version < 2 ? \ dominfo.v0.handle : \ + (dom_interface_version >= 8 ? \ + dominfo.v2d8.handle : \ (dom_interface_version >= 7 ? \ dominfo.v2d7.handle : \ (dom_interface_version == 6 ? \ dominfo.v2d6.handle : \ (dom_interface_version == 5 ? \ dominfo.v2d5.handle : \ - dominfo.v2.handle)))) + dominfo.v2.handle))))) static int @@ -2129,12 +2180,20 @@ xenHypervisorInit(void) /* Xen 4.1 * sysctl version 8 -> xen-unstable c/s 21118:28e5409e3fb3 * domctl version 7 -> xen-unstable c/s 21212:de94884a669c + * domctl version 8 -> xen-unstable c/s 23874:651aed73b39c */ sys_interface_version = 8; /* XEN_SYSCTL_INTERFACE_VERSION */ if (virXen_getdomaininfo(fd, 0, &info) == 1) { dom_interface_version = 7; /* XEN_DOMCTL_INTERFACE_VERSION */ - VIR_DEBUG("Using hypervisor call v2, sys ver8 dom ver7\n"); - goto done; + if (virXen_getvcpusinfo(fd, 0, 0, ipt, NULL, 0) == 0){ + VIR_DEBUG("Using hypervisor call v2, sys ver8 dom ver7"); + goto done; + } + dom_interface_version = 8; /* XEN_DOMCTL_INTERFACE_VERSION */ + if (virXen_getvcpusinfo(fd, 0, 0, ipt, NULL, 0) == 0){ + VIR_DEBUG("Using hypervisor call v2, sys ver8 dom ver8"); + goto done; + } } hypervisor_version = 1; ++++++ 61f2b6ba-no-unlimited-mig2file-speed.patch ++++++ commit 61f2b6ba5fdef0613d6351b99913b5ef468144ce Author: Eric Blake <[email protected]> Date: Tue Nov 8 12:01:48 2011 -0700 qemu: fix domjobabort regression This reverts commit ef1065cf5ac; see also this bug report: https://bugzilla.redhat.com/show_bug.cgi?id=751900 In qemu 0.15.1 and earlier, during migration to file, the qemu_savevm_state_begin and qemu_savevm_state_iterate methods will both process as much migration data as possible until either 1. The file descriptor returns EAGAIN 2. The bandwidth rate limit is reached If we set the rate limit to ULONG_MAX, test 2 never becomes true. We're passing a plain file descriptor to QEMU and POSIX does not support EAGAIN on regular files / block devices, so test 1 never becomes true either. In the 'virsh save --bypass-cache' case, we pass a pipe instead of a regular fd, but using a pipe adds I/O overhead, so always passing a pipe just so qemu can see EAGAIN doesn't seem nice. The ultimate fix needs to come from qemu - background migration must respect asynchronous abort requests, or else periodically return control to the main handling loop without an EAGAIN and without waiting to hit an insanely large amount of data. But until a version of qemu is fixed to support "unlimited" data rates while still allowing cancellation, the best we can do is avoid the automatic use of unlimited rates from within libvirt (users can still explicitly change the migration rates, if they are aware that they are giving up the ability to cancel a job). Reverting the lone use of QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX is the simplest patch; this slows migration back down to a default 32M/sec cap, but also ensures that the main qemu processing loop will still be responsive to cancellation requests. Hopefully upstream qemu will provide us a means of safely using unlimited speed, including a runtime probe of that capability. * src/qemu/qemu_migration.c (qemuMigrationToFile): Revert attempt to use unlimited migration bandwidth when migrating to file. Signed-off-by: Daniel Veillard <[email protected]> Signed-off-by: Eric Blake <[email protected]> Index: libvirt-0.9.6/src/qemu/qemu_migration.c =================================================================== --- libvirt-0.9.6.orig/src/qemu/qemu_migration.c +++ libvirt-0.9.6/src/qemu/qemu_migration.c @@ -2718,16 +2718,6 @@ qemuMigrationToFile(struct qemud_driver bool restoreLabel = false; virCommandPtr cmd = NULL; int pipeFD[2] = { -1, -1 }; - unsigned long saveMigBandwidth = priv->migMaxBandwidth; - - /* Increase migration bandwidth to unlimited since target is a file. - * Failure to change migration speed is not fatal. */ - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) == 0) { - qemuMonitorSetMigrationSpeed(priv->mon, - QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX); - priv->migMaxBandwidth = QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX; - qemuDomainObjExitMonitorWithDriver(driver, vm); - } if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATE_QEMU_FD) && (!compressor || pipe(pipeFD) == 0)) { @@ -2839,13 +2829,6 @@ qemuMigrationToFile(struct qemud_driver ret = 0; cleanup: - /* Restore max migration bandwidth */ - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) == 0) { - qemuMonitorSetMigrationSpeed(priv->mon, saveMigBandwidth); - priv->migMaxBandwidth = saveMigBandwidth; - qemuDomainObjExitMonitorWithDriver(driver, vm); - } - VIR_FORCE_CLOSE(pipeFD[0]); VIR_FORCE_CLOSE(pipeFD[1]); virCommandFree(cmd); ++++++ 9ae4ac7a-PolicyKit.patch ++++++ commit 9ae4ac7ac07d872cd32d0a3a1b1b44730b04bda7 Author: Jim Fehlig <[email protected]> Date: Tue Jan 3 11:35:06 2012 -0700 PolicyKit: Check auth before asking client to obtain it I previously mentioned [1] a PolicyKit issue where libvirt would proceed with authentication even though polkit-auth failed: testusr xen134:~> virsh list --all Attempting to obtain authorization for org.libvirt.unix.manage. polkit-grant-helper: given auth type (8 -> yes) is bogus Failed to obtain authorization for org.libvirt.unix.manage. Id Name State ---------------------------------- 0 Domain-0 running - sles11sp1-pv shut off AFAICT, libvirt attempts to obtain a privilege it already has, causing polkit-auth to fail with above message. Instead of calling obtain and then checking auth, IMO the workflow should be for the server to check auth first, and if that fails ask the client to obtain it and check again. This workflow also allows for checking only successful exit of polkit-auth in virConnectAuthGainPolkit(). [1] https://www.redhat.com/archives/libvir-list/2011-December/msg00837.html Index: libvirt-0.9.6/src/remote/remote_driver.c =================================================================== --- libvirt-0.9.6.orig/src/remote/remote_driver.c +++ libvirt-0.9.6/src/remote/remote_driver.c @@ -2952,6 +2952,14 @@ remoteAuthPolkit (virConnectPtr conn, st }; VIR_DEBUG("Client initialize PolicyKit-0 authentication"); + /* Check auth first and if it succeeds we are done. */ + memset (&ret, 0, sizeof ret); + if (call (conn, priv, 0, REMOTE_PROC_AUTH_POLKIT, + (xdrproc_t) xdr_void, (char *)NULL, + (xdrproc_t) xdr_remote_auth_polkit_ret, (char *) &ret) == 0) + goto out; + + /* Auth failed. Ask client to obtain it and check again. */ if (auth && auth->cb) { /* Check if the necessary credential type for PolicyKit is supported */ for (i = 0 ; i < auth->ncredtype ; i++) { @@ -2969,9 +2977,11 @@ remoteAuthPolkit (virConnectPtr conn, st } } else { VIR_DEBUG("Client auth callback does not support PolicyKit"); + return -1; } } else { VIR_DEBUG("No auth callback provided"); + return -1; } memset (&ret, 0, sizeof ret); @@ -2981,6 +2991,7 @@ remoteAuthPolkit (virConnectPtr conn, st return -1; /* virError already set by call */ } +out: VIR_DEBUG("PolicyKit-0 authentication complete"); return 0; } Index: libvirt-0.9.6/src/libvirt.c =================================================================== --- libvirt-0.9.6.orig/src/libvirt.c +++ libvirt-0.9.6/src/libvirt.c @@ -129,8 +129,7 @@ static int virConnectAuthGainPolkit(cons return -1; } - if (!WIFEXITED(status) || - (WEXITSTATUS(status) != 0 && WEXITSTATUS(status) != 1)) { + if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { return -1; } ++++++ a495365d-sexpr-empty-str.patch ++++++ commit a495365d09138bf0f07504cfe9b6ea2de858e18e Author: Jim Fehlig <[email protected]> Date: Fri Nov 18 14:54:38 2011 -0700 Don't copy sexpr node value that is an empty string Xen4.1 initializes some unspecified sexpr config items to an empty string, unlike previous Xen versions that would leave the item unset. E.g. the kernel item for an HVM guest (non-direct kernel boot): Xen4.0 and earlier ... (image (hvm (kernel ) ... Xen4.1 ... (image (hvm (kernel '') ... The empty string for kernel causes some grief in subsequent parsing where existence of specified kernel is checked, e.g. if (!def->os.kernel) ... This patch solves the problem in sexpr_node_copy() by not copying a node containing an empty string. diff --git a/src/util/sexpr.c b/src/util/sexpr.c index 0e30087..3523d76 100644 --- a/src/util/sexpr.c +++ b/src/util/sexpr.c @@ -519,7 +519,7 @@ int sexpr_node_copy(const struct sexpr *sexpr, const char *node, char **dst) { const char *val = sexpr_node(sexpr, node); - if (val) { + if (val && *val) { *dst = strdup(val); if (!(*dst)) return -1; ++++++ ae1232b2-CVE-2011-4600.patch ++++++ commit ae1232b298323dd7bef909426e2ebafa6bca9157 Author: Laine Stump <[email protected]> Date: Tue Dec 6 15:13:50 2011 -0500 network: don't add iptables rules for externally managed networks This patch addresses https://bugzilla.redhat.com/show_bug.cgi?id=760442 When a network has any forward type other than route, nat or none, the network configuration should be done completely external to libvirt - libvirt only uses these types to allow configuring guests in a manner that isn't tied to a specific host (all the host-specific information, in particular interface names, port profile data, and bandwidth configuration is in the network definition, and the guest configuration only references it). Due to a bug in the bridge network driver, libvirt was adding iptables rules for networks with forward type='bridge' etc. any time libvirtd was restarted while one of these networks was active. This patch eliminates that error by only "reloading" iptables rules if forward type is route, nat, or none. Index: libvirt-0.9.6/src/network/bridge_driver.c =================================================================== --- libvirt-0.9.6.orig/src/network/bridge_driver.c +++ libvirt-0.9.6/src/network/bridge_driver.c @@ -1480,14 +1480,22 @@ networkReloadIptablesRules(struct networ VIR_INFO("Reloading iptables rules"); for (i = 0 ; i < driver->networks.count ; i++) { - virNetworkObjLock(driver->networks.objs[i]); - if (virNetworkObjIsActive(driver->networks.objs[i])) { - networkRemoveIptablesRules(driver, driver->networks.objs[i]); - if (networkAddIptablesRules(driver, driver->networks.objs[i]) < 0) { + virNetworkObjPtr network = driver->networks.objs[i]; + + virNetworkObjLock(network); + if (virNetworkObjIsActive(network) && + ((network->def->forwardType == VIR_NETWORK_FORWARD_NONE) || + (network->def->forwardType == VIR_NETWORK_FORWARD_NAT) || + (network->def->forwardType == VIR_NETWORK_FORWARD_ROUTE))) { + /* Only the three L3 network types that are configured by libvirt + * need to have iptables rules reloaded. + */ + networkRemoveIptablesRules(driver, network); + if (networkAddIptablesRules(driver, network) < 0) { /* failed to add but already logged */ } } - virNetworkObjUnlock(driver->networks.objs[i]); + virNetworkObjUnlock(network); } } ++++++ beeea90a-xen-hvm-console.patch ++++++ Index: libvirt-0.9.6/src/xen/xend_internal.c =================================================================== --- libvirt-0.9.6.orig/src/xen/xend_internal.c +++ libvirt-0.9.6/src/xen/xend_internal.c @@ -1761,7 +1761,10 @@ xenDaemonDomainFetch(virConnectPtr conn, id = xenGetDomIdFromSxpr(root, priv->xendConfigVersion); xenUnifiedLock(priv); - tty = xenStoreDomainGetConsolePath(conn, id); + if (sexpr_lookup(root, "domain/image/hvm")) + tty = xenStoreDomainGetSerialConsolePath(conn, id); + else + tty = xenStoreDomainGetConsolePath(conn, id); vncport = xenStoreDomainGetVNCPort(conn, id); xenUnifiedUnlock(priv); if (!(def = xenParseSxpr(root, Index: libvirt-0.9.6/src/xen/xs_internal.h =================================================================== --- libvirt-0.9.6.orig/src/xen/xs_internal.h +++ libvirt-0.9.6/src/xen/xs_internal.h @@ -45,6 +45,8 @@ int xenStoreDomainGetVNCPort int domid); char * xenStoreDomainGetConsolePath(virConnectPtr conn, int domid); +char * xenStoreDomainGetSerialConsolePath(virConnectPtr conn, + int domid); char * xenStoreDomainGetNetworkID(virConnectPtr conn, int id, const char *mac); Index: libvirt-0.9.6/src/xen/xs_internal.c =================================================================== --- libvirt-0.9.6.orig/src/xen/xs_internal.c +++ libvirt-0.9.6/src/xen/xs_internal.c @@ -852,6 +852,25 @@ char * xenStoreDomainGetConsole return virDomainDoStoreQuery(conn, domid, "console/tty"); } +/** + * xenStoreDomainGetSerailConsolePath: + * @conn: the hypervisor connection + * @domid: id of the domain + * + * Return the path to the pseudo TTY on which the guest domain's + * serial console is attached. + * + * Returns the path to the serial console. It is the callers + * responsibilty to free() the return string. Returns NULL + * on error + * + * The caller must hold the lock on the privateData + * associated with the 'conn' parameter. + */ +char * xenStoreDomainGetSerialConsolePath(virConnectPtr conn, int domid) { + return virDomainDoStoreQuery(conn, domid, "serial/0/tty"); +} + /* * xenStoreDomainGetNetworkID: ++++++ bonding-miimon-xml-parsing.patch ++++++ >From 03f8b5ab87fba421614128fd620a67793d1aba79 Mon Sep 17 00:00:00 2001 From: Marius Tomaschewski <[email protected]> Date: Thu, 16 Jun 2011 16:47:53 +0200 Subject: [PATCH] bonding interface miimon parameter parsing success Report success at the end of bonding interface miimon parameter parsing, when some of the optional parameters were missed, but no problems were found. --- src/conf/interface_conf.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) Index: libvirt-0.9.6/src/conf/interface_conf.c =================================================================== --- libvirt-0.9.6.orig/src/conf/interface_conf.c +++ libvirt-0.9.6/src/conf/interface_conf.c @@ -621,6 +621,7 @@ virInterfaceDefParseBond(virInterfaceDef ret = -1; goto error; } + ret = 0; /* no problem found, report success */ } else if (virXPathNode("./arpmon[1]", ctxt) != NULL) { ++++++ d8916dc8-def-qemu-migspeed.patch ++++++ commit d8916dc8e2f612ab3ce46f32c4bfeb0bd73f6007 Author: Jim Fehlig <[email protected]> Date: Thu Dec 15 11:25:07 2011 -0700 Fix default migration speed in qemu driver In commit 6f84e110 I mistakenly set default migration speed to 33554432 Mb! The units of migMaxBandwidth is Mb, with conversion handled in qemuMonitor{JSON,Text}SetMigrationSpeed(). Also, remove definition of QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX since it is no longer used after reverting commit ef1065cf. Index: libvirt-0.9.6/src/qemu/qemu_domain.h =================================================================== --- libvirt-0.9.6.orig/src/qemu/qemu_domain.h +++ libvirt-0.9.6/src/qemu/qemu_domain.h @@ -36,14 +36,7 @@ (1 << VIR_DOMAIN_VIRT_KVM) | \ (1 << VIR_DOMAIN_VIRT_XEN)) -# define QEMU_DOMAIN_DEFAULT_MIG_BANDWIDTH_MAX (32 << 20) -# if ULONG_MAX == 4294967295 -/* Qemu has a 64-bit limit, but we are limited by our historical choice of - * representing bandwidth in a long instead of a 64-bit int. */ -# define QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX ULONG_MAX -# else -# define QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX (INT64_MAX / (1024 * 1024)) -# endif +# define QEMU_DOMAIN_DEFAULT_MIG_BANDWIDTH_MAX 32 # define JOB_MASK(job) (1 << (job - 1)) # define DEFAULT_JOB_MASK \ ++++++ install-apparmor-profiles.patch ++++++ --- /var/tmp/diff_new_pack.I0nnCU/_old 2012-01-19 18:05:49.000000000 +0100 +++ /var/tmp/diff_new_pack.I0nnCU/_new 2012-01-19 18:05:49.000000000 +0100 @@ -1,7 +1,7 @@ -Index: libvirt-0.9.4/examples/apparmor/Makefile.am +Index: libvirt-0.9.6/examples/apparmor/Makefile.am =================================================================== ---- libvirt-0.9.4.orig/examples/apparmor/Makefile.am -+++ libvirt-0.9.4/examples/apparmor/Makefile.am +--- libvirt-0.9.6.orig/examples/apparmor/Makefile.am ++++ libvirt-0.9.6/examples/apparmor/Makefile.am @@ -1,8 +1,39 @@ ## Copyright (C) 2005-2011 Red Hat, Inc. ## See COPYING.LIB for the License of this software @@ -47,10 +47,10 @@ + rm -f $(DESTDIR)$(sysconfdir)/apparmor.d/libvirt/TEMPLATE + +endif -Index: libvirt-0.9.4/examples/apparmor/usr.lib.libvirt.virt-aa-helper.in +Index: libvirt-0.9.6/examples/apparmor/usr.lib.libvirt.virt-aa-helper.in =================================================================== --- /dev/null -+++ libvirt-0.9.4/examples/apparmor/usr.lib.libvirt.virt-aa-helper.in ++++ libvirt-0.9.6/examples/apparmor/usr.lib.libvirt.virt-aa-helper.in @@ -0,0 +1,40 @@ +# Last Modified: Fri Aug 19 11:21:48 2011 +#include <tunables/global> @@ -92,9 +92,9 @@ + /var/lib/kvm/images/ r, + /var/lib/kvm/images/** r, +} -Index: libvirt-0.9.4/examples/apparmor/usr.lib.libvirt.virt-aa-helper +Index: libvirt-0.9.6/examples/apparmor/usr.lib.libvirt.virt-aa-helper =================================================================== ---- libvirt-0.9.4.orig/examples/apparmor/usr.lib.libvirt.virt-aa-helper +--- libvirt-0.9.6.orig/examples/apparmor/usr.lib.libvirt.virt-aa-helper +++ /dev/null @@ -1,38 +0,0 @@ -# Last Modified: Mon Apr 5 15:10:27 2010 @@ -135,9 +135,9 @@ - /var/lib/libvirt/images/ r, - /var/lib/libvirt/images/** r, -} -Index: libvirt-0.9.4/examples/apparmor/usr.sbin.libvirtd +Index: libvirt-0.9.6/examples/apparmor/usr.sbin.libvirtd =================================================================== ---- libvirt-0.9.4.orig/examples/apparmor/usr.sbin.libvirtd +--- libvirt-0.9.6.orig/examples/apparmor/usr.sbin.libvirtd +++ /dev/null @@ -1,52 +0,0 @@ -# Last Modified: Mon Apr 5 15:03:58 2010 @@ -192,11 +192,11 @@ - change_profile -> @{LIBVIRT}-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*, - -} -Index: libvirt-0.9.4/examples/apparmor/usr.sbin.libvirtd.in +Index: libvirt-0.9.6/examples/apparmor/usr.sbin.libvirtd.in =================================================================== --- /dev/null -+++ libvirt-0.9.4/examples/apparmor/usr.sbin.libvirtd.in -@@ -0,0 +1,52 @@ ++++ libvirt-0.9.6/examples/apparmor/usr.sbin.libvirtd.in +@@ -0,0 +1,55 @@ +# Last Modified: Fri Aug 19 11:20:36 2011 +#include <tunables/global> +@{LIBVIRT}="libvirt" @@ -235,6 +235,7 @@ + /sbin/* Ux, + /usr/bin/* Ux, + /usr/sbin/* Ux, ++ /usr/lib/PolicyKit/polkit-read-auth-helper Px, + + # force the use of virt-aa-helper + audit deny /sbin/apparmor_parser rwxl, @@ -244,15 +245,17 @@ + audit deny /sys/kernel/security/apparmor/.* rwxl, + /sys/kernel/security/apparmor/profiles r, + @libdir@/libvirt/* Pxr, ++ @libdir@/libvirt/libvirt_parthelper Ux, ++ @libdir@/libvirt/libvirt_iohelper Ux, + + # allow changing to our UUID-based named profiles + change_profile -> @{LIBVIRT}-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*, + +} -Index: libvirt-0.9.4/examples/apparmor/libvirt-qemu +Index: libvirt-0.9.6/examples/apparmor/libvirt-qemu =================================================================== ---- libvirt-0.9.4.orig/examples/apparmor/libvirt-qemu -+++ libvirt-0.9.4/examples/apparmor/libvirt-qemu +--- libvirt-0.9.6.orig/examples/apparmor/libvirt-qemu ++++ libvirt-0.9.6/examples/apparmor/libvirt-qemu @@ -52,6 +52,7 @@ # access to firmware's etc /usr/share/kvm/** r, ++++++ relax-qemu-usergroup-check.patch ++++++ Allow qemu driver (and hence libvirtd) to load when qemu user:group does not exist. The kvm package, which may not exist on a xen host, creates qemu user:group. A better (future) solution would be to build the libvirtd drivers as loadable modules instead of built-in to the daemon. Then the qemu driver would only be loaded when needed, which would never be the case on a xen-only configuration. Index: libvirt-0.9.6/src/qemu/qemu_conf.c =================================================================== --- libvirt-0.9.6.orig/src/qemu/qemu_conf.c +++ libvirt-0.9.6/src/qemu/qemu_conf.c @@ -255,9 +255,7 @@ int qemudLoadDriverConfig(struct qemud_d return -1; } if (virGetUserID(user, &driver->user) < 0) { - VIR_FREE(user); - virConfFree(conf); - return -1; + VIR_WARN("User %s does not exist! Continuing...", user); } VIR_FREE(user); @@ -270,9 +268,7 @@ int qemudLoadDriverConfig(struct qemud_d return -1; } if (virGetGroupID(group, &driver->group) < 0) { - VIR_FREE(group); - virConfFree(conf); - return -1; + VIR_WARN("Group %s does not exist! Continuing...", group); } VIR_FREE(group); ++++++ use-init-script-redhat.patch ++++++ --- /var/tmp/diff_new_pack.I0nnCU/_old 2012-01-19 18:05:49.000000000 +0100 +++ /var/tmp/diff_new_pack.I0nnCU/_new 2012-01-19 18:05:49.000000000 +0100 @@ -1,7 +1,7 @@ -Index: libvirt-0.9.4/tools/Makefile.am +Index: libvirt-0.9.6/tools/Makefile.am =================================================================== ---- libvirt-0.9.4.orig/tools/Makefile.am -+++ libvirt-0.9.4/tools/Makefile.am +--- libvirt-0.9.6.orig/tools/Makefile.am ++++ libvirt-0.9.6/tools/Makefile.am @@ -152,16 +152,17 @@ uninstall-local: uninstall-init if LIBVIRT_INIT_SCRIPT_RED_HAT @@ -26,10 +26,10 @@ BUILT_SOURCES += libvirt-guests.init -Index: libvirt-0.9.4/tools/libvirt-guests.sysconf +Index: libvirt-0.9.6/tools/libvirt-guests.sysconf =================================================================== ---- libvirt-0.9.4.orig/tools/libvirt-guests.sysconf -+++ libvirt-0.9.4/tools/libvirt-guests.sysconf +--- libvirt-0.9.6.orig/tools/libvirt-guests.sysconf ++++ libvirt-0.9.6/tools/libvirt-guests.sysconf @@ -1,18 +1,28 @@ +## Path: System/Virtualization/libvirt + @@ -80,10 +80,10 @@ # If non-zero, try to bypass the file system cache when saving and # restoring guests, even though this may give slower operation for # some file systems. -Index: libvirt-0.9.4/tools/libvirt-guests.init.sh +Index: libvirt-0.9.6/tools/libvirt-guests.init.sh =================================================================== ---- libvirt-0.9.4.orig/tools/libvirt-guests.init.sh -+++ libvirt-0.9.4/tools/libvirt-guests.init.sh +--- libvirt-0.9.6.orig/tools/libvirt-guests.init.sh ++++ libvirt-0.9.6/tools/libvirt-guests.init.sh @@ -4,10 +4,10 @@ # ### BEGIN INIT INFO @@ -226,10 +226,10 @@ esac -exit $RETVAL +rc_exit -Index: libvirt-0.9.4/daemon/Makefile.am +Index: libvirt-0.9.6/daemon/Makefile.am =================================================================== ---- libvirt-0.9.4.orig/daemon/Makefile.am -+++ libvirt-0.9.4/daemon/Makefile.am +--- libvirt-0.9.6.orig/daemon/Makefile.am ++++ libvirt-0.9.6/daemon/Makefile.am @@ -252,16 +252,12 @@ install-logrotate: $(LOGROTATE_CONFS) if LIBVIRT_INIT_SCRIPT_RED_HAT ++++++ xen-name-for-devid.patch ++++++ --- /var/tmp/diff_new_pack.I0nnCU/_old 2012-01-19 18:05:49.000000000 +0100 +++ /var/tmp/diff_new_pack.I0nnCU/_new 2012-01-19 18:05:49.000000000 +0100 @@ -25,7 +25,7 @@ virDomainDeviceDefPtr dev, char *class, char *ref, -@@ -2749,7 +2750,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr +@@ -2752,7 +2753,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr sexpr = virBufferContentAndReset(&buf); @@ -34,7 +34,7 @@ /* device doesn't exist, define it */ ret = xend_op(domain->conn, domain->name, "op", "device_create", "config", sexpr, NULL); -@@ -2870,7 +2871,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr +@@ -2873,7 +2874,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr sexpr = virBufferContentAndReset(&buf); @@ -43,7 +43,7 @@ virXendError(VIR_ERR_OPERATION_INVALID, "%s", _("requested device does not exist")); goto cleanup; -@@ -2965,7 +2966,7 @@ xenDaemonDetachDeviceFlags(virDomainPtr +@@ -2968,7 +2969,7 @@ xenDaemonDetachDeviceFlags(virDomainPtr def, xml, VIR_DOMAIN_XML_INACTIVE))) goto cleanup; @@ -52,7 +52,7 @@ goto cleanup; if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) { -@@ -3915,6 +3916,7 @@ struct xenUnifiedDriver xenDaemonDriver +@@ -3918,6 +3919,7 @@ struct xenUnifiedDriver xenDaemonDriver */ static int virDomainXMLDevID(virDomainPtr domain, @@ -60,7 +60,7 @@ virDomainDeviceDefPtr dev, char *class, char *ref, -@@ -3923,8 +3925,12 @@ virDomainXMLDevID(virDomainPtr domain, +@@ -3926,8 +3928,12 @@ virDomainXMLDevID(virDomainPtr domain, xenUnifiedPrivatePtr priv = domain->conn->privateData; char *xref; char *tmp; @@ -73,7 +73,7 @@ if (dev->data.disk->driverName && STREQ(dev->data.disk->driverName, "tap")) strcpy(class, "tap"); -@@ -3934,19 +3940,21 @@ virDomainXMLDevID(virDomainPtr domain, +@@ -3937,19 +3943,21 @@ virDomainXMLDevID(virDomainPtr domain, else strcpy(class, "vbd"); ++++++ xen-pv-cdrom.patch ++++++ --- /var/tmp/diff_new_pack.I0nnCU/_old 2012-01-19 18:05:49.000000000 +0100 +++ /var/tmp/diff_new_pack.I0nnCU/_new 2012-01-19 18:05:49.000000000 +0100 @@ -1,7 +1,7 @@ -Index: libvirt-0.9.1/src/xenxs/xen_sxpr.c +Index: libvirt-0.9.6/src/xenxs/xen_sxpr.c =================================================================== ---- libvirt-0.9.1.orig/src/xenxs/xen_sxpr.c -+++ libvirt-0.9.1/src/xenxs/xen_sxpr.c +--- libvirt-0.9.6.orig/src/xenxs/xen_sxpr.c ++++ libvirt-0.9.6/src/xenxs/xen_sxpr.c @@ -324,7 +324,7 @@ error: static int xenParseSxprDisks(virDomainDefPtr def, ++++++ xend-disk-order.patch ++++++ --- /var/tmp/diff_new_pack.I0nnCU/_old 2012-01-19 18:05:49.000000000 +0100 +++ /var/tmp/diff_new_pack.I0nnCU/_new 2012-01-19 18:05:49.000000000 +0100 @@ -1,7 +1,7 @@ -Index: libvirt-0.9.1/src/xenxs/xen_sxpr.c +Index: libvirt-0.9.6/src/xenxs/xen_sxpr.c =================================================================== ---- libvirt-0.9.1.orig/src/xenxs/xen_sxpr.c -+++ libvirt-0.9.1/src/xenxs/xen_sxpr.c +--- libvirt-0.9.6.orig/src/xenxs/xen_sxpr.c ++++ libvirt-0.9.6/src/xenxs/xen_sxpr.c @@ -342,20 +342,24 @@ xenParseSxprDisks(virDomainDefPtr def, const char *src = NULL; const char *dst = NULL; -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
