1. 30 6月, 2016 1 次提交
  2. 16 12月, 2015 4 次提交
    • E
      CVE-2015-5313: storage: don't allow '/' in filesystem volume names · 6ae43393
      Eric Blake 提交于
      The libvirt file system storage driver determines what file to
      act on by concatenating the pool location with the volume name.
      If a user is able to pick names like "../../../etc/passwd", then
      they can escape the bounds of the pool.  For that matter,
      virStoragePoolListVolumes() doesn't descend into subdirectories,
      so a user really shouldn't use a name with a slash.
      
      Normally, only privileged users can coerce libvirt into creating
      or opening existing files using the virStorageVol APIs; and such
      users already have full privilege to create any domain XML (so it
      is not an escalation of privilege).  But in the case of
      fine-grained ACLs, it is feasible that a user can be granted
      storage_vol:create but not domain:write, and it violates
      assumptions if such a user can abuse libvirt to access files
      outside of the storage pool.
      
      Therefore, prevent all use of volume names that contain "/",
      whether or not such a name is actually attempting to escape the
      pool.
      
      This changes things from:
      
      $ virsh vol-create-as default ../../../../../../etc/haha --capacity 128
      Vol ../../../../../../etc/haha created
      $ rm /etc/haha
      
      to:
      
      $ virsh vol-create-as default ../../../../../../etc/haha --capacity 128
      error: Failed to create vol ../../../../../../etc/haha
      error: Requested operation is not valid: volume name '../../../../../../etc/haha' cannot contain '/'
      Signed-off-by: NEric Blake <eblake@redhat.com>
      (cherry picked from commit 034e47c3)
      6ae43393
    • M
      util: Prepare URI formatting for libxml2 >= 2.9.2 · aaf8c5dc
      Martin Kletzander 提交于
      Since commit 8eb55d782a2b9afacc7938694891cc6fad7b42a5 libxml2 removes
      two slashes from the URI when there is no server part.  This is fixed
      with beb7281055dbf0ed4d041022a67c6c5cfd126f25, but only if the calling
      application calls xmlSaveUri() on URI that xmlURIParse() parsed.  And
      that is not the case in virURIFormat().  virURIFormat() accepts
      virURIPtr that can be created without parsing it and we do that when we
      format network storage paths for gluster for example.  Even though
      virStorageSourceParseBackingURI() uses virURIParse(), it throws that data
      structure right away.
      
      Since we want to format URIs as URIs and not absolute URIs or opaque
      URIs (see RFC 3986), we can specify that with a special hack thanks to
      commit beb7281055dbf0ed4d041022a67c6c5cfd126f25, by setting port to -1.
      
      This fixes qemuxml2argvtest test where the disk-drive-network-gluster
      case was failing.
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      (cherry picked from commit 8f17d0ea)
      aaf8c5dc
    • D
      avoid using deprecated udev logging functions · dd2b5251
      Daniel P. Berrange 提交于
      In systemd >= 218, the udev_set_log_fn method has been marked
      deprecated and turned into a no-op. Nothing in the udev client
      library will print to stderr by default anymore, so we can
      just stop installing a logging hook for new enough udev.
      
      (cherry picked from commit a93a3b97)
      dd2b5251
    • J
      qemu_driver: Resolve Coverity CONSTANT_EXPRESSION_RESULT · 11b1dd70
      John Ferlan 提交于
      The call to virDomainSnapshotRedefinePrep() had a spurrious ! in front of
      it which caused Coverity to complan that the expression is always false.
      
      (cherry picked from commit 9d7254de)
      11b1dd70
  3. 03 9月, 2015 1 次提交
    • M
      remoteClientCloseFunc: Don't mangle connection object refcount · 42e0a5bf
      Michal Privoznik 提交于
      Well, in 8ad126e6 we tried to fix a memory corruption problem.
      However, the fix was not as good as it could be. I mean, the
      commit has one line more than it should. I've noticed this output
      just recently:
      
        # ./run valgrind --leak-check=full --show-reachable=yes ./tools/virsh domblklist gentoo
        ==17019== Memcheck, a memory error detector
        ==17019== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
        ==17019== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
        ==17019== Command: /home/zippy/work/libvirt/libvirt.git/tools/.libs/virsh domblklist gentoo
        ==17019==
        Target     Source
        ------------------------------------------------
        fda        /var/lib/libvirt/images/fd.img
        vda        /var/lib/libvirt/images/gentoo.qcow2
        hdc        /home/zippy/tmp/install-amd64-minimal-20150402.iso
      
        ==17019== Thread 2:
        ==17019== Invalid read of size 4
        ==17019==    at 0x4EFF5B4: virObjectUnref (virobject.c:258)
        ==17019==    by 0x5038CFF: remoteClientCloseFunc (remote_driver.c:552)
        ==17019==    by 0x5069D57: virNetClientCloseLocked (virnetclient.c:685)
        ==17019==    by 0x506C848: virNetClientIncomingEvent (virnetclient.c:1852)
        ==17019==    by 0x5082136: virNetSocketEventHandle (virnetsocket.c:1913)
        ==17019==    by 0x4ECD64E: virEventPollDispatchHandles (vireventpoll.c:509)
        ==17019==    by 0x4ECDE02: virEventPollRunOnce (vireventpoll.c:658)
        ==17019==    by 0x4ECBF00: virEventRunDefaultImpl (virevent.c:308)
        ==17019==    by 0x130386: vshEventLoop (vsh.c:1864)
        ==17019==    by 0x4F1EB07: virThreadHelper (virthread.c:206)
        ==17019==    by 0xA8462D3: start_thread (in /lib64/libpthread-2.20.so)
        ==17019==    by 0xAB441FC: clone (in /lib64/libc-2.20.so)
        ==17019==  Address 0x139023f4 is 4 bytes inside a block of size 240 free'd
        ==17019==    at 0x4C2B1F0: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
        ==17019==    by 0x4EA8949: virFree (viralloc.c:582)
        ==17019==    by 0x4EFF6D0: virObjectUnref (virobject.c:273)
        ==17019==    by 0x4FE74D6: virConnectClose (libvirt.c:1390)
        ==17019==    by 0x13342A: virshDeinit (virsh.c:406)
        ==17019==    by 0x134A37: main (virsh.c:950)
      
      The problem is, when registering remoteClientCloseFunc(), it's
      conn->closeCallback which is ref'd. But in the function itself
      it's conn->closeCallback->conn what is unref'd. This is causing
      imbalance in reference counting. Moreover, there's no need for
      the remote driver to increase/decrease conn refcount since it's
      not used anywhere. It's just merely passed to client registered
      callback. And for that purpose it's correctly ref'd in
      virConnectRegisterCloseCallback() and then unref'd in
      virConnectUnregisterCloseCallback().
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      (cherry picked from commit e6893007)
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      42e0a5bf
  4. 30 1月, 2015 1 次提交
    • M
      xend: Don't crash in virDomainXMLDevID · b0f598e8
      Michal Privoznik 提交于
      The function is called from all {Attach,Update,Detach}Device APIs to
      create config strings that are later passed to the xend to perform the
      desired action. The function is intended to handle all supported
      devices. However, as of 5b05358a we
      are trying to get disk driver of the device without checking if the
      device really is a disk. This leads to an segmentation fault:
      
        #0 0x00007ffff7571815 in virDomainDiskGetDriver () from /usr/lib/libvirt.so.0
        #1 0x00007fffeb9ad471 in ?? () from /usr/lib/libvirt/connection-driver/libvirt_driver_xen.so
        #2 0x00007fffeb9b1062 in xenDaemonAttachDeviceFlags () from /usr/lib/libvirt/connection-driver/libvirt_driver_xen.so
        #3 0x00007fffeb9a8a86 in ?? () from /usr/lib/libvirt/connection-driver/libvirt_driver_xen.so
        #4 0x00007ffff7609266 in virDomainAttachDevice () from /usr/lib/libvirt.so.0
        #5 0x0000555555593c9d in ?? ()
        #6 0x00007ffff76743c9 in virNetServerProgramDispatch () from /usr/lib/libvirt.so.0
        #7 0x00005555555a678d in ?? ()
        #8 0x00007ffff755460e in ?? () from /usr/lib/libvirt.so.0
        #9 0x00007ffff7553b06 in ?? () from /usr/lib/libvirt.so.0
        #10 0x00007ffff4998b50 in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
        #11 0x00007ffff46e30ed in clone () from /lib/x86_64-linux-gnu/libc.so.6
        #12 0x0000000000000000 in ?? ()
      Reported-by: NXiaolin Su <linxxnil@126.com>
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      (cherry picked from commit cd7702d4)
      b0f598e8
  5. 23 1月, 2015 2 次提交
  6. 23 12月, 2014 3 次提交
    • M
      wireshark: Honor API change coming with 1.12 release · 6a3b2c09
      Michal Privoznik 提交于
      https://bugs.gentoo.org/show_bug.cgi?id=508336
      
      At wireshark, they have this promise to change public dissector APIs
      only with minor version number change. Which they did when releasing
      the version of 1.12.
      
      Firstly, they've changed tvb_memdup() in
      a0c53ffaa1bb46d8c9db2ec739401aa411c9790e so now it takes four arguments
      instead of three. The new argument is placed at the very beginning of
      the list of arguments and basically says the scope where we'd like to
      allocate the memory. According to the documentation NULL should be the
      default value.
      
      Then, the tcp_dissect_pdus() signature changed too. Well, the function
      that actually dissects reassembled packets as tcp_dissect_pdus()
      reorder TCP packets into one big chunk and then calls a user function
      to dissect the PDU at once. The change is dated back to
      8081cf1d90397cbbb4404f9720595e1537ed5e14.
      
      Then, WS_DLL_PUBLIC_NOEXTERN was replaced with WS_DLL_PUBLIC_DEF in
      5d87a8c46171f572568db5a47c093423482e342f.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      (cherry picked from commit e74fa570)
      6a3b2c09
    • M
      wireshark: Include more of libvirt internals · 3f874370
      Michal Privoznik 提交于
      The rationale is to not duplicate code which is done in
      packet-libvirt.h for instance. Moreover, this way we can drop
      __attribute_((unused)) used int packet-libvirt.c in favor of
      ATTRIBUTE_UNUSED.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      (cherry picked from commit 906d0abf)
      3f874370
    • P
      qemu: migration: Unlock vm on failed ACL check in protocol v2 APIs · bad50b75
      Peter Krempa 提交于
      Avoid leaving the domain locked on a failed ACL check in
      qemuDomainMigratePerform() and qemuDomainMigrateFinish2().
      
      Introduced in commit abf75aea (Add ACL checks into the QEMU driver).
      
      (cherry picked from commit 2bdcd29c)
      bad50b75
  7. 13 11月, 2014 1 次提交
    • L
      util: eliminate "use after free" in callers of virNetDevLinkDump · 16d10743
      Laine Stump 提交于
      virNetDevLinkDump() gets a message from netlink into "resp", then
      calls nlmsg_parse() to fill the table "tb" with pointers into resp. It
      then returns tb to its caller, but not before freeing the buffer at
      resp. That means that all the callers of virNetDevLinkDump() are
      examining memory that has already been freed. This can be verified by
      filling the buffer at resp with garbage prior to freeing it (or, I
      suppose, just running libvirtd under valgrind) then performing some
      operation that calls virNetDevLinkDump().
      
      The upstream commit log incorrectly states that the code has been like
      this ever since virNetDevLinkDump() was written. In reality, the
      problem was introduced with commit e95de74d, first in libvirt-1.0.5,
      which was attempting to eliminate a typecast that caused compiler
      warnings. It has only been pure luck (or maybe a lack of heavy load,
      and/or maybe an allocation algorithm in malloc() that delays re-use of
      just-freed memory) that has kept this from causing errors, for example
      when configuring a PCI passthrough or macvtap passthrough network
      interface.
      
      The solution taken in this patch is the simplest - just return resp to
      the caller along with tb, then have the caller free it after they are
      finished using the data (pointers) in tb. I alternately could have
      made a cleaner interface by creating a new struct that put tb and resp
      together along with a vir*Free() function for it, but this function is
      only used in a couple places, and I'm not sure there will be
      additional new uses of virNetDevLinkDump(), so the value of adding a
      new type, extra APIs, etc. is dubious.
      
      (cherry picked from commit f9f9699f)
      16d10743
  8. 07 11月, 2014 1 次提交
    • E
      CVE-2014-7823: dumpxml: security hole with migratable flag · 59fff7ff
      Eric Blake 提交于
      Commit 28f8dfdc (v1.0.0) introduced a security hole: in at least
      the qemu implementation of virDomainGetXMLDesc, the use of the
      flag VIR_DOMAIN_XML_MIGRATABLE (which is usable from a read-only
      connection) triggers the implicit use of VIR_DOMAIN_XML_SECURE
      prior to calling qemuDomainFormatXML.  However, the use of
      VIR_DOMAIN_XML_SECURE is supposed to be restricted to read-write
      clients only.  This patch treats the migratable flag as requiring
      the same permissions, rather than analyzing what might break if
      migratable xml no longer includes secret information.
      
      Fortunately, the information leak is low-risk: all that is gated
      by the VIR_DOMAIN_XML_SECURE flag is the VNC connection password;
      but VNC passwords are already weak (FIPS forbids their use, and
      on a non-FIPS machine, anyone stupid enough to trust a max-8-byte
      password sent in plaintext over the network deserves what they
      get).  SPICE offers better security than VNC, and all other
      secrets are properly protected by use of virSecret associations
      rather than direct output in domain XML.
      
      * src/remote/remote_protocol.x (REMOTE_PROC_DOMAIN_GET_XML_DESC):
      Tighten rules on use of migratable flag.
      * src/libvirt-domain.c (virDomainGetXMLDesc): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      (cherry picked from commit b1674ad5)
      
      Conflicts:
      	src/libvirt-domain.c - file split from older src/libvirt.c
      Signed-off-by: NEric Blake <eblake@redhat.com>
      59fff7ff
  9. 02 10月, 2014 1 次提交
  10. 18 9月, 2014 1 次提交
  11. 10 7月, 2014 1 次提交
    • E
      build: package .pc files for mingw64 · 87eac029
      Eric Blake 提交于
      Commit 65d8c92a fixed the mingw spec file for 32-bit builds,
      but forgot to make the adjustment for 64-bit builds:
      
      Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/eblake/rpmbuild/BUILDROOT/mingw-libvirt-1.2.7-1.fc20.eblake1404944503.x86_64
      error: Installed (but unpackaged) file(s) found:
         /usr/x86_64-w64-mingw32/sys-root/mingw/lib/pkgconfig/libvirt-lxc.pc
         /usr/x86_64-w64-mingw32/sys-root/mingw/lib/pkgconfig/libvirt-qemu.pc
      
      * mingw-libvirt.spec.in (%files): List missing .pc files.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      (cherry picked from commit ddf6b139)
      87eac029
  12. 02 7月, 2014 1 次提交
  13. 01 7月, 2014 14 次提交
    • P
      qemu: copy: Accept 'format' parameter when copying to a non-existing img · 42619ed0
      Peter Krempa 提交于
      We have the following matrix of possible arguments handled by the logic
      statement touched by this patch:
             | flags & _REUSE_EXT | !(flags & _REUSE_EXT)
      -------+--------------------+----------------------
       format| (1)                | (2)
      -------+--------------------+----------------------
      !format| (3)                | (4)
      -------+--------------------+----------------------
      
      In cases 1 and 2 the user provided a format, in cases 3 and 4 not. The
      user requests to use a pre-existing image in 1 and 3 and libvirt will
      create a new image in 2 and 4.
      
      The difference between cases 3 and 4 is that for 3 the format is probed
      from the user-provided image, whereas in 4 we just use the existing disk
      format.
      
      The current code would treat cases 1,3 and 4 correctly but in case 2 the
      format provided by the user would be ignored.
      
      The particular piece of code was broken in commit 35c7701c
      but since it was introduced a few commits before that it was never
      released as working.
      42619ed0
    • P
      storage: gluster: Fix header reader function · f412fc9f
      Peter Krempa 提交于
      Advance the right pointer to actually append to the buffer. We were
      lucky that all reads were completed in one try.
      f412fc9f
    • P
      conf: storage: Add volume feature formatter for gluster pools · 88f3f7c3
      Peter Krempa 提交于
      Libvirt didn't output feature flags for images stored on native gluster.
      Fix this trivially by adding a feature formatter callback.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1095035
      88f3f7c3
    • M
      build: link libvirt_conf with libxml · fb62d311
      Martin Kletzander 提交于
      Since there is code using functions from the libxml library,
      libvirt_conf should have that in LIBADD so it can be linked against
      even without libvirt_util (which usually deals with the error itself,
      since libvirt_util has libxml in LIBADD).  The same applies to
      storage_backend.c.
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      fb62d311
    • M
      vboxsnapshotxmltest: Don't write to a file in abs_srcdir · 7315189e
      Michal Privoznik 提交于
      In the test, the snapshot XML is written into a file that's located
      under:
      
        abs_srcdir/vboxsnapshotxmldata/testResult.vbox
      
      However, the abs_srcdir doesn't have to be necessarily writable. It
      should have been abs_builddir instead. Moreover, the label in the func
      creating the file is called 'fail' while it fulfils the duty of
      'cleanup' label.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      7315189e
    • M
      securityselinuxlabeltest: Don't create dummy file in the srcdir · e5f5805f
      Michal Privoznik 提交于
      At the very beginning of the test we check if the underlying
      filesystem supports extended attributes as they are used to store fake
      SELinux labels. In order to check that, a dummy file is created and
      semi-random attribute is set. However, the file is created under:
      
        abs_srcdir "/securityselinuxlabeldata/testxattr"
      
      which has two problems: abs_srcdir is not required to be writable, so
      it should have been abs_builddir. The second one is - there's no
      "securityselinuxlabeldata" folder under abs_builddir. The problem was
      introduced in caf164f1.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      e5f5805f
    • J
      Report one error less when getting net dev speed · 1c7601f5
      Ján Tomko 提交于
      virFileReadAll already logs an error. If reading the 'speed' file
      fails with EINVAL, we log an error even though we ignore it. If it
      fails with other errors, we log two errors.
      
      Use virFileReadAllQuiet - ignore EINVAL and report just one error
      in other cases.
      
      Fixes this error on libvirtd startup:
      2014-06-30 12:47:14.583+0000: 20971: error : virFileReadAll:1297 :
      Failed to read file '/sys/class/net/wlan0/speed': Invalid argument
      1c7601f5
    • J
      Introduce virFileReadAllQuiet · f638c13e
      Ján Tomko 提交于
      Just like virFileReadAll, but returns -errno instead
      of reporting errors. Useful for ignoring some errors.
      f638c13e
    • J
      Only detect PCI Express devices as root in udev nodedev driver · 5de9b502
      Ján Tomko 提交于
      This stops the error message spam when running unprivileged
      libvirtd:
      2014-06-30 12:38:47.990+0000: 631: error : virPCIDeviceConfigOpen:300 :
      Failed to open config space file
      '/sys/bus/pci/devices/0000:00:00.0/config': Permission denied
      
      Reported by Daniel Berrange:
      https://www.redhat.com/archives/libvir-list/2014-June/msg01082.html
      5de9b502
    • J
      Track privileged state in udev nodedev driver · 1229ef49
      Ján Tomko 提交于
      Remember if libvirtd is running as root or not.
      1229ef49
    • J
      libxl: add PV console if not explicitly specified · ec7b9225
      Jim Fehlig 提交于
      Xen PV domains always have a PV console, so add one to the domain
      config via post-parse callback if not explicitly specified in
      the XML.  The legacy Xen driver behaves similarly, causing a
      regression when switching to the new Xen toolstack.  I.e.
      
        virsh console pv-domain
      
      will no longer work after upgrading a xm/xend stack to xl/libxl.
      ec7b9225
    • J
      build: fix 'make syntax-check' after commit c6cf5df3 · dc165342
      Jim Fehlig 提交于
      The commit caused prohibit_long_lines to fail in src/Makefile.am.
      dc165342
    • J
      vbox: fix linker error · c6cf5df3
      Jim Fehlig 提交于
      Noticed the following error when building the vbox driver
      in the openSUSE build service
      
      CCLD     vboxsnapshotxmltest
      /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld:
      ../src/.libs/libvirt_driver_vbox_impl.a
      (libvirt_driver_vbox_impl_la-vbox_snapshot_conf.o):
      undefined reference to symbol 'xmlXPathRegisterNs@@LIBXML2_2.4.30'
      /usr/lib64/libxml2.so: error adding symbols: DSO missing from command line
      collect2: error: ld returned 1 exit status
      
      Fixed by adding LIBXML_LIBS to libvirt_driver_vbox_impl_la_LIBADD
      c6cf5df3
    • D
      libxl: don't break the build on Xen>=4.5 because of libxl_vcpu_setaffinity() · bfc72e99
      Dario Faggioli 提交于
      libxl interface for vcpu pinning is changing in Xen 4.5. Basically,
      libxl_set_vcpuaffinity() now wants one more parameter. That is
      representative of 'VCPU soft affinity', which libvirt does not use.
      
      To mark such change, the macro LIBXL_HAVE_VCPUINFO_SOFT_AFFINITY is
      defined. Use it as a gate and, if present, re-#define the calls from
      the old to the new interface, to avoid breaking the build.
      Signed-off-by: NDario Faggioli <dario.faggioli@citrix.com>
      Cc: Jim Fehlig <jfehlig@suse.com>
      Cc: Ian Campbell <Ian.Campbell@citrix.com>
      Cc: Ian Jackson <Ian.Jackson@eu.citrix.com>
      bfc72e99
  14. 30 6月, 2014 2 次提交
  15. 27 6月, 2014 6 次提交
    • R
      bhyve: fix build by fixing typo in variable name · b963ca06
      Roman Bogorodskiy 提交于
      Commit 80d0918b introduced a typo in variable name:
      
      s/failIncomaptible/failIncompatible/
      
      Pushed under the build breaker rule.
      b963ca06
    • J
      cpu: Add new Broadwell CPU model · 04533767
      Jiri Denemark 提交于
      04533767
    • P
      net: merge virNetworkGetDHCPLeases and virNetworkGetDHCPLeasesForMAC · 02bffd47
      Peter Krempa 提交于
      Instead of maintaining two very similar APIs, add the "@mac" parameter
      to virNetworkGetDHCPLeases and kill virNetworkGetDHCPLeasesForMAC. Both
      of those functions would return data the same way, so making @mac an
      optional filter simplifies a lot of stuff.
      02bffd47
    • J
      Add test for type none model dac seclabel · 96f62755
      Ján Tomko 提交于
      96f62755
    • J
      test: add user_xattr check for securityselinuxlabeltest · caf164f1
      Jincheng Miao 提交于
      libvirt unit test used setxattr with "user.libvirt.selinux" name to
      emulate setfilecon of selinux. But for some old kernel filesystem
      (like 2.6.32-431.el6.x86_64), if the filesystem is not mounted with
      user_xattr flag, the setxattr with "user.libvirt.selinux" will fail.
      
      So adding testUserXattrEnabled() in securityselinuxlabeltest.c,
      if user_xattr is not enabled, skip this case.
      
      The user_xattr is departed in newer kernel, therefore this commit is
      only for the compatablity for old kernel.
      Signed-off-by: NJincheng Miao <jmiao@redhat.com>
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Tested-by: NScott Sullivan <ssullivan@liquidweb.com>
      caf164f1
    • E
      docs: publish correct enum values · 9b291bbe
      Eric Blake 提交于
      We publish libvirt-api.xml for others to use, and in fact, the
      libvirt-python bindings use it to generate python constants that
      correspond to our enum values.  However, we had an off-by-one bug
      that any enum that relied on C's rules for implicit initialization
      of the first enum member to 0 got listed in the xml as having a
      value of 1 (and all later members of the enum were equally
      botched).
      
      The fix is simple - since we add one to the previous value when
      encountering an enum without an initializer, the previous value
      must start at -1 so that the first enum member is assigned 0.
      
      The python generator code has had the off-by-one ever since DV
      first wrote it years ago, but most of our public enums were immune
      because they had an explicit = 0 initializer.  The only affected
      enums are:
      - virDomainEventGraphicsAddressType (such as
      VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_IPV4), since commit 987e31ed
      (libvirt v0.8.0)
      - virDomainCoreDumpFormat (such as VIR_DOMAIN_CORE_DUMP_FORMAT_RAW),
      since commit 9fbaff00 (libvirt v1.2.3)
      - virIPAddrType (such as VIR_IP_ADDR_TYPE_IPV4), since commit
      03e0e79e (not yet released)
      
      Thanks to Nehal J Wani for reporting the problem on IRC, and
      for helping me zero in on the culprit function.
      
      * docs/apibuild.py (CParser.parseEnumBlock): Fix implicit enum
      values.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      9b291bbe
反馈
建议
客服 返回
顶部