1. 01 7月, 2011 16 次提交
    • E
      virsh: avoid integer overflow · 6f9432fc
      Eric Blake 提交于
      Detected by Coverity.  info.nrVirtCpu is unsigned short, but if
      cpumaplen is int, then the product of the two in vshMalloc risks
      unintended sign extension.  cmdVcpuinfo had already solved this
      by using size_t cpumaplen.
      
      * tools/virsh.c (cmdVcpuPin): Use correct type.
      6f9432fc
    • D
      Fix stream procedure number for virDomainMigratePrepareTunnel3 · 1414cc5f
      Daniel P. Berrange 提交于
      The virDomainMigratePrepareTunnel3 impl in the remote driver
      was using the procedure number for the virDomainMigratePrepareTunnel
      method. This doesn't work out so well, because it makes the server
      ignore & drop all stream packets
      
      * src/remote/remote_driver.c: Fix procedure for PrepareTunnel3
      1414cc5f
    • D
      Send back an error if we get unexpected stream control message · cfd4370a
      Daniel P. Berrange 提交于
      We ignore any stream data packets which come in for streams which
      are not registered, since these packets are async and do not have
      a reply. If we get a stream control packet though we must send back
      an actual error, otherwise a (broken) client may hang forever
      making it hard to diagnose the client bug.
      
      * src/rpc/virnetserverprogram.c: Send back error for unexpected
        stream control messages
      cfd4370a
    • D
      Fix release of virNetMessagePtr instances in streams processing · c69ba670
      Daniel P. Berrange 提交于
      If a message packet for a invalid stream is received it is just
      free'd. This is not good because it doesn't let the client RPC
      request counter decrement. If a stream is shutdown with pending
      packets the message also isn't released properly because of an
      incorrect header type
      
      * daemon/stream.c: Fix message header type
      * src/rpc/virnetserverprogram.c: Send dummy reply instead of
        free'ing ignored stream message
      c69ba670
    • D
      Add missing include of signal.h in virnetsocket.c · f1c2c0e2
      Daniel P. Berrange 提交于
      virNetSocketFree uses kill(SIGTERM) so we must include
      signal.h for the definitions
      
      * src/rpc/virnetsocket.c: Include signal.h
      f1c2c0e2
    • D
      Add test case for parsing JSON docs · 06da1805
      Daniel P. Berrange 提交于
      While investigating some memory leaks it was unclear whether the
      JSON code correctly free'd all memory during parsing. Add a test
      case which can be run under valgrind to clearly demonstrate that
      the parser is leak free.
      
      * tests/Makefile.am: Add 'jsontest'
      * tests/jsontest.c: A few simple JSON parsing tests
      06da1805
    • D
      Fix potential crash when saving guests · e44bec2e
      Daniel P. Berrange 提交于
      The qemudDomainSaveFlag method will call EndJob on the 'vm'
      object it is passed in. This can result in the 'vm' object
      being free'd if the last reference is removed. Thus no caller
      of 'qemudDomainSaveFlag' must *ever* reference 'vm' again
      upon return.
      
      Unfortunately qemudDomainSave and qemuDomainManagedSave
      both call 'virDomainObjUnlock', which can result in a
      crash. This is non-deterministic since it involves a race
      with the monitor I/O thread.
      
      Fix this by making qemudDomainSaveFlag responsible for
      calling virDomainObjUnlock instead.
      
      * src/qemu/qemu_driver.c: Fix potential use after free
        when saving guests
      e44bec2e
    • D
      Fix uninitialized value in QEMU monitor FD sending code · f870c99b
      Daniel P. Berrange 提交于
      The 'char control[CMSG_SPACE(sizeof(int))];' was not being
      wiped, so could potentially contain uninitialized bytes.
      While this was harmless in this case, it caused complaints
      from valgrind
      
      * src/qemu/qemu_monitor.c: memset 'control' variable
        in qemuMonitorIOWriteWithFD
      f870c99b
    • D
      Fix leak of JSON object for events · 5ab8746f
      Daniel P. Berrange 提交于
      The event handler functions do not free the virJSONValuePtr
      object. Every event received from a VM thus caused a memory
      leak
      
      * src/qemu/qemu_monitor_json.c: Fix leak of event object
      5ab8746f
    • D
      Remove bogus warning message in JSON code · 09a882bd
      Daniel P. Berrange 提交于
      * src/util/json.c: Remove warning message
      09a882bd
    • D
      Fix use of uninitialized memory when releasing PCI slots · 56a77b49
      Daniel P. Berrange 提交于
      The 'function' field in the PCI address was not correctly
      initialized, so it was building the wrong address address
      string and so not removing all functions from the in use
      list.
      
      * src/qemu/qemu_command.c: Fix initialization of PCI function
      56a77b49
    • D
      Fix leak of virStreamPtr object with callback added in fdstream impl · 9f40b80b
      Daniel P. Berrange 提交于
      When adding a callback to an FD stream, we take an extra reference
      on the virStreamPtr instance. We forgot to registered a free function
      with the callback, so when the callback was removed, the extra
      reference held on virStreamPtr was not released.
      
      * src/fdstream.c: Use a free callback to release reference on
        virStreamPtr when removing callback
      9f40b80b
    • D
      Fix leak of mdnsGroupName in virNetServer object · 92fa2e58
      Daniel P. Berrange 提交于
      * src/rpc/virnetserver.c: Free mdnsGroupName
      92fa2e58
    • D
      Fix release of filtered stream messages · df65adf1
      Daniel P. Berrange 提交于
      The stream code was reusing a stream message object before
      it was removed from the linked list of filtered messages.
      This caused any later queued messages to be completely lost.
      
      * daemon/stream.c: Delay reuse of stream message until
        after it is removed from the queue
      df65adf1
    • D
      Ensure RPC message is cleared before being reused · d840fe93
      Daniel P. Berrange 提交于
      To save on memory reallocation, virNetMessage instances that
      have been transmitted, may be reused for a subsequent incoming
      message. We forgot to clear out the old data of the message
      fully, which caused later confusion upon read.
      
      * src/rpc/virnetserverclient.c: memset entire message before
        reusing it
      d840fe93
    • D
      Fix hardcoded limit on client requests in RPC code · 27111b35
      Daniel P. Berrange 提交于
      The virNetServerClient object had a hardcoded limit of 10 requests
      per client. Extend constructor to allow it to be passed in as a
      configurable variable. Wire this up to the 'max_client_requests'
      config parameter in libvirtd
      
      * daemon/libvirtd.c: Pass max_client_requests into services
      * src/rpc/virnetserverservice.c, src/rpc/virnetserverservice.h: Pass
        nrequests_client_max to clients
      * src/rpc/virnetserverclient.c, src/rpc/virnetserverclient.h: Allow
        configurable request limit
      27111b35
  2. 30 6月, 2011 5 次提交
  3. 29 6月, 2011 19 次提交
    • E
      build: avoid pod2man on tarball · f1fea71d
      Eric Blake 提交于
      virt-sanlock-cleanup.8 has static contents (no dependency on
      configure), but is generated by pod2man (a perl dependency that
      maintainers must have, but which ordinary tarball users need
      not have).  Therefore, ensure that it is always part of the
      tarball, even though it is only conditionally installed.
      
      This is similar to commit 6db98a2d, but made simpler by the fact
      that the .8 page is static content.
      
      * tools/Makefile.am (EXTRA_DIST): Add virt-sanlock-cleanup.8.
      f1fea71d
    • M
      sysinfo: fix illegal NULL return · 72882bc9
      Minoru Usui 提交于
      If virSysinfoParse{BIOS,System,Processor,Memory}()
      can't find newline('\n'), these return NULL.
      This patch fixes this.
      Signed-off-by: NMinoru Usui <usui@mxm.nes.nec.co.jp>
      72882bc9
    • D
      Ensure that EOF is dispatched to the stream callback · 516235c0
      Daniel P. Berrange 提交于
      When the remote client receives end of file on the stream
      it never invokes the stream callback. Applications relying
      on async event driven I/O will thus never see the EOF
      condition on the stream
      
      * src/rpc/virnetclient.c, src/rpc/virnetclientstream.c:
        Ensure EOF is dispatched
      516235c0
    • D
      Fix locking wrt virNetClientStreamPtr object · 8a4e2874
      Daniel P. Berrange 提交于
      The client stream object can be used independently of the
      virNetClientPtr object, so must have full locking of its
      own and not rely on any caller.
      
      * src/remote/remote_driver.c: Remove locking around stream
        callback
      * src/rpc/virnetclientstream.c: Add locking to all APIs
        and callbacks
      8a4e2874
    • D
      Avoid referencing NULL pointer when copying stream error · 7a779ef6
      Daniel P. Berrange 提交于
      * src/rpc/virnetclientstream.c: Avoid referencing NULL
      7a779ef6
    • D
      Avoid free'ing a filtered RPC message in the server · c9ede1cf
      Daniel P. Berrange 提交于
      When a filter steals an RPC message, that message must
      not be freed, except by the filter code itself
      
      * src/rpc/virnetserverclient.c: Don't free stolen RPC
        messages
      c9ede1cf
    • D
      Improve two log messages in virNetMessage · b7337d03
      Daniel P. Berrange 提交于
      Improve log messages issued when encountering a bogus
      message length to include the actual length and the
      limit violated
      
      * src/rpc/virnetmessage.c: Improve log messages
      b7337d03
    • D
      Ensure empty payload is written upon stream completion · 59b877b6
      Daniel P. Berrange 提交于
      On stream completion it is neccessary to send back a
      message with an empty payload. The message header was
      not being filled out correctly, since we were not writing
      any payload. Add a method for encoding an empty payload
      which updates the message headers correctly.
      
      * src/rpc/virnetmessage.c, src/rpc/virnetmessage.h: Add
        a virNetMessageEncodePayloadEmpty method
      * src/rpc/virnetserverprogram.c: Write empty payload on
        stream completion
      59b877b6
    • D
      Lower logging level when failing to register socket watch · d550277c
      Daniel P. Berrange 提交于
      The RPC client treats failure to register a socket watch
      as non-fatal, since we do not mandate that a libvirt client
      application provide an event loop implementation. It is
      thus inappropriate to a log a message at VIR_LOG_WARN
      
      * src/rpc/virnetsocket.c: Lower logging level
      d550277c
    • D
      Fix propagation of RPC errors from streams · 16c6e2b4
      Daniel P. Berrange 提交于
      If a streams error is raised, virNetClientIOEventLoop
      returns 0, but an error is set. Check for this and
      propagate it if present
      
      * src/rpc/virnetclient.c: Propagate streams error
      16c6e2b4
    • D
      Fix crash when aborting a stream from a I/O callback · d9709343
      Daniel P. Berrange 提交于
      If a callback being invoked from a stream issues a virStreamAbort
      operation, the stream data will be free'd but the callback will
      then still try to use this. Delay free'ing of the stream data when
      a callback is dispatching
      
      * src/fdstream.c: Delay stream free when callback is active
      d9709343
    • M
      screenshot: Set access rights to temporary file · c72aecc5
      Michal Privoznik 提交于
      Although we create a temporary file, it is owned by root:root and have
      rights 0600. In case qemu does not run under root, it is unable to write
      to that file and thus we transfer 0B sized file.
      c72aecc5
    • M
      dnsmasq: Fix errno handling and don't unlink non-existing files · 8cce5436
      Matthias Bolte 提交于
      addnhostsSave and hostsfileSave expect < 0 return value on error from
      addnhostsWrite and hostsfileWrite but then pass err instead of -err
      to virReportSystemError that expects an errno value.
      
      Also addnhostsWrite returns -ENOMEM and errno, change this to -errno.
      
      addnhostsWrite and hostsfileWrite tried to unlink the tempfile after
      renaming it, making both fail on the final step. Remove the unnecessary
      unlink calls.
      8cce5436
    • E
      maint: improve makefile whitespace · 9fdeaeef
      Eric Blake 提交于
      None of these instances cause any semantic differences, but
      consistency is nice.
      
      * src/Makefile.am: Replace leading spaces with tabs.
      9fdeaeef
    • O
      tests: Fix memory leak in virnetmessagetest · a2753079
      Osier Yang 提交于
      Detected when playing with "make -C tests valgrind".
      a2753079
    • O
      conf: Fix memory leak in virNetworkDNSDefFormat · c9f604fc
      Osier Yang 提交于
      c9f604fc
    • M
      eb9dee2b
    • M
      network: Fix dnsmasq hostsfile creation logic and related tests · 9523b3c3
      Matthias Bolte 提交于
      networkSaveDnsmasqHostsfile was added in 8fa9c221 (Apr 2010).
      It has a force flag. If the dnsmasq hostsfile already exists force
      needs to be true to overwrite it. networkBuildDnsmasqArgv sets force
      to false, networkDefine sets it to true. This results in the
      hostsfile being written only in networkDefine in the common case.
      If no error occurred networkSaveDnsmasqHostsfile returns true and
      networkBuildDnsmasqArgv adds the --dhcp-hostsfile to the dnsmasq
      command line.
      
      networkSaveDnsmasqHostsfile was changed in 89ae9849 (24 Jun 2011)
      to return a new dnsmasqContext instead of reusing one. This change broke
      the logic of the force flag as now networkSaveDnsmasqHostsfile returns
      NULL on error, but the early return -- if force was not set and the
      hostsfile exists -- returns 0. This turned the early return in an error
      case and networkBuildDnsmasqArgv didn't add the --dhcp-hostsfile option
      anymore if the hostsfile already exists. It did because networkDefine
      created the hostsfile already.
      
      Then 9d4e2845 fixed the return 0 case in networkSaveDnsmasqHostsfile
      but didn't apply the force option correctly to the new addnhosts file.
      Now force doesn't control an early return anymore, but influences the
      handling of the hostsfile context creation and dnsmasqSave is always
      called now. This commit also added test cases that reveal several
      problems. First, the tests now calls functions that try to write the
      dnsmasq config files to disk. If someone runs this tests as root this
      might overwrite actively used dnsmasq config files, this is a no-go. Also
      the tests depend on configure --localstatedir, this needs to be fixed as
      well, because it makes the tests fail when localstatedir is different
      from /var.
      
      This patch does several things to fix this:
      
      1) Move dnsmasqContext creation and saving out of networkBuildDnsmasqArgv
      to the caller to separate the command line generation from the config
      file writing. This makes the command line generation testable without the
      risk of interfering with system files, because the tests just don't call
      dnsmasqSave.
      
      2) This refactoring of networkSaveDnsmasqHostsfile makes the force flag
      useless as the saving happens somewhere else now. This fixes the wrong
      usage of the force flag in combination with then newly added addnhosts
      file by removing the force flag.
      
      3) Adapt the wrong test cases to the correct behavior, by adding the
      missing --dhcp-hostsfile option. Both affected tests contain DHCP host
      elements but missed the necessary --dhcp-hostsfile option.
      
      4) Rename networkSaveDnsmasqHostsfile to networkBuildDnsmasqHostsfile,
      because it doesn't save the dnsmasqContext anymore.
      
      5) Move all directory creations in dnsmasq context handling code from
      the *New functions to dnsmasqSave to avoid directory creations in system
      paths in the test cases.
      
      6) Now that networkBuildDnsmasqArgv doesn't create the dnsmasqContext
      anymore the test case can create one with the localstatedir that is
      expected by the tests instead of the configure --localstatedir given one.
      9523b3c3
    • M
      Fix compilation with systemtap 1.3 · c565b67a
      Matthias Bolte 提交于
      Version 1.3 of <sys/sdt.h> uses this macro
      
        #define STAP_CAST(t) (size_t)t
      
      that breaks like this if t is a function
      
        remote.c:1775: error: cast from function call of type 'const char *'
        to non-matching type 'long unsigned int' [-Wbad-function-cast]
      
      For that to work it should probably look like this
      
        #define STAP_CAST(t) ((size_t)(t))
      
      In systemtap 1.4 this was completely rewritten.
      
      Anyway, before commit df0b57a9 t was always a variable, but now
      also a function is used here, namely virNetSASLSessionGetIdentity.
      
      Use an intermediate variable to avoid this problem.
      c565b67a