1. 28 4月, 2016 5 次提交
    • P
      Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2016-04-28' into staging · 736f85d5
      Peter Maydell 提交于
      Fix dangling pointers and error message regressions
      
      # gpg: Signature made Thu 28 Apr 2016 07:25:51 BST using RSA key ID EB918653
      # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>"
      # gpg:                 aka "Markus Armbruster <armbru@pond.sub.org>"
      
      * remotes/armbru/tags/pull-error-2016-04-28:
        qom: -object error messages lost location, restore it
        replay: Fix dangling location bug in replay_configure()
        QemuOpts: Fix qemu_opts_foreach() dangling location regression
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      736f85d5
    • P
      Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-2.6-20160426' into staging · 61861eff
      Peter Maydell 提交于
      ppc patch queue for 2016-04-26 (last minute qemu-2.6 fix)
      
      This just has one, last-minute, fix for a serious regression of memory
      hotplug.
      
      Patch author's comment:
          Really sorry for the way last-minute fix, but without this memory
          hotplug is totally broken :( Hoping to get this in for Wednesday's
          RC4, which I think will be the final before release.
      
      # gpg: Signature made Tue 26 Apr 2016 03:52:20 BST using RSA key ID 20D9B392
      # gpg: Good signature from "David Gibson <david@gibson.dropbear.id.au>"
      # gpg:                 aka "David Gibson (Red Hat) <dgibson@redhat.com>"
      # gpg:                 aka "David Gibson (ozlabs.org) <dgibson@ozlabs.org>"
      # gpg: WARNING: This key is not certified with sufficiently trusted signatures!
      # gpg:          It is not certain that the signature belongs to the owner.
      # Primary key fingerprint: 75F4 6586 AE61 A66C C44E  87DC 6C38 CACA 20D9 B392
      
      * remotes/dgibson/tags/ppc-for-2.6-20160426:
        spapr_drc: fix aborts during DRC-count based hotplug
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      61861eff
    • M
      qom: -object error messages lost location, restore it · 51b9b478
      Markus Armbruster 提交于
      qemu_opts_foreach() runs its callback with the error location set to
      the option's location.  Any errors the callback reports use the
      option's location automatically.
      
      Commit 90998d58 moved the actual error reporting from "inside"
      qemu_opts_foreach() to after it.  Here's a typical hunk:
      
      	 if (qemu_opts_foreach(qemu_find_opts("object"),
          -                          object_create,
          -                          object_create_initial, NULL)) {
          +                          user_creatable_add_opts_foreach,
          +                          object_create_initial, &err)) {
          +        error_report_err(err);
      	     exit(1);
      	 }
      
      Before, object_create() reports from within qemu_opts_foreach(), using
      the option's location.  Afterwards, we do it after
      qemu_opts_foreach(), using whatever location happens to be current
      there.  Commonly a "none" location.
      
      This is because Error objects don't have location information.
      Problematic.
      
      Reproducer:
      
          $ qemu-system-x86_64 -nodefaults -display none -object secret,id=foo,foo=bar
          qemu-system-x86_64: Property '.foo' not found
      
      Note no location.  This commit restores it:
      
          qemu-system-x86_64: -object secret,id=foo,foo=bar: Property '.foo' not found
      
      Note that the qemu_opts_foreach() bug just fixed could mask the bug
      here: if the location it leaves dangling hasn't been clobbered, yet,
      it's the correct one.
      Reported-by: NEric Blake <eblake@redhat.com>
      Cc: Daniel P. Berrange <berrange@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <1461767349-15329-4-git-send-email-armbru@redhat.com>
      Reviewed-by: NDaniel P. Berrange <berrange@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      [Paragraph on Error added to commit message]
      51b9b478
    • M
      replay: Fix dangling location bug in replay_configure() · d9d3aaea
      Markus Armbruster 提交于
      replay_configure() pushes and pops a Location with automatic storage
      duration.  Except it fails to pop when -icount parameter "rr" isn't
      given.  cur_loc then points to unused stack space, and will most
      likely get clobbered in short order.
      
      Clobbered cur_loc can make loc_pop() and error_print_loc() crash or
      report bogus locations.
      
      Broken in commit 890ad550.
      
      I didn't take the time to find a reproducer.
      
      Cc: Eduardo Habkost <ehabkost@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <1461767349-15329-3-git-send-email-armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NEduardo Habkost <ehabkost@redhat.com>
      d9d3aaea
    • M
      QemuOpts: Fix qemu_opts_foreach() dangling location regression · 37f32349
      Markus Armbruster 提交于
      qemu_opts_foreach() pushes and pops a Location with automatic storage
      duration.  Except it fails to pop when @func() returns non-zero.
      cur_loc then points to unused stack space, and will most likely get
      clobbered in short order.
      
      Clobbered cur_loc can make loc_pop() and error_print_loc() crash or
      report bogus locations.
      
      Affects several qemu command line options as well as qemu-img,
      qemu-io, qemu-nbd -object, and blkdebug's configuration file.
      
      Broken in commit a4c7367f, v2.4.0.
      
      Reproducer:
          $ qemu-system-x86_64 -nodefaults -display none -object secret,id=foo,foo=bar
      
      main() reports "Property '.foo' not found" like this:
      
          if (qemu_opts_foreach(qemu_find_opts("object"),
                                user_creatable_add_opts_foreach,
                                object_create_delayed, &err)) {
              error_report_err(err);
              exit(1);
          }
      
      cur_loc then points to where qemu_opts_foreach()'s Location used to
      be, i.e. unused stack space.  With optimization, this Location doesn't
      get clobbered for me, and also happens to be the correct location.
      Without optimization, it does get clobbered in a way that makes
      error_report_err() report no location.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <1461767349-15329-2-git-send-email-armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      37f32349
  2. 26 4月, 2016 1 次提交
    • M
      spapr_drc: fix aborts during DRC-count based hotplug · df18b2db
      Michael Roth 提交于
      CPU/memory resources can be signalled en-masse via
      spapr_hotplug_req_add_by_count(), and when doing so, actually change
      the meaning of the 'drc' parameter passed to
      spapr_hotplug_req_event() to be a count rather than an index.
      
      f40eb921 added a hook in spapr_hotplug_req_event() to record when a
      device had been 'signalled' to the guest, but that code assumes that
      drc is always an index. In cases where it's a count, such as memory
      hotplug, the DRC lookup will fail, leading to an assert.
      
      Fix this by only explicitly setting the signalled state for cases where
      we are doing PCI hotplug.
      
      For other resources types, since we cannot selectively track whether a
      resource has been signalled in cases where we signal attach as a count,
      set the 'signalled' state to true immediately upon making the
      resource available via drck->attach().
      Reported-by: NBharata B Rao <bharata@linux.vnet.ibm.com>
      Cc: Bharata B Rao <bharata@linux.vnet.ibm.com>
      Cc: david@gibson.dropbear.id.au
      Cc: qemu-ppc@nongnu.org
      Signed-off-by: NMichael Roth <mdroth@linux.vnet.ibm.com>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      df18b2db
  3. 25 4月, 2016 2 次提交
    • G
      usb/uhci: move pid check · f419a626
      Gerd Hoffmann 提交于
      commit "5f77e06b usb: add pid check at the first of uhci_handle_td()"
      moved the pid verification to the start of the uhci_handle_td function,
      to simplify the error handling (we don't have to free stuff which we
      didn't allocate in the first place ...).
      
      Problem is now the check fires too often, it raises error IRQs even for
      TDs which we are not going to process because they are not set active.
      
      So, lets move down the check a bit, so it is done only for active TDs,
      but still before we are going to allocate stuff to process the requested
      transfer.
      Reported-by: NJoe Clifford <joe@thunderbug.co.uk>
      Tested-by: NJoe Clifford <joe@thunderbug.co.uk>
      Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
      Message-id: 1461321893-15811-1-git-send-email-kraxel@redhat.com
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      f419a626
    • P
      Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-2.6-20160423' into staging · 3123bd8e
      Peter Maydell 提交于
      ppc patch queue for 2016-03-23
      
      A single fix for a bug in parameter handling for the spapr PCI host
      bridge.
      
      # gpg: Signature made Sat 23 Apr 2016 07:55:29 BST using RSA key ID 20D9B392
      # gpg: Good signature from "David Gibson <david@gibson.dropbear.id.au>"
      # gpg:                 aka "David Gibson (Red Hat) <dgibson@redhat.com>"
      # gpg:                 aka "David Gibson (ozlabs.org) <dgibson@ozlabs.org>"
      # gpg: WARNING: This key is not certified with sufficiently trusted signatures!
      # gpg:          It is not certain that the signature belongs to the owner.
      # Primary key fingerprint: 75F4 6586 AE61 A66C C44E  87DC 6C38 CACA 20D9 B392
      
      * remotes/dgibson/tags/ppc-for-2.6-20160423:
        hw/ppc/spapr: Fix crash when specifying bad parameters to spapr-pci-host-bridge
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      3123bd8e
  4. 23 4月, 2016 1 次提交
    • T
      hw/ppc/spapr: Fix crash when specifying bad parameters to spapr-pci-host-bridge · da34fed7
      Thomas Huth 提交于
      QEMU currently crashes when using bad parameters for the
      spapr-pci-host-bridge device:
      
      $ qemu-system-ppc64 -device spapr-pci-host-bridge,buid=0x123,liobn=0x321,mem_win_addr=0x1,io_win_addr=0x10
      Segmentation fault
      
      The problem is that spapr_tce_find_by_liobn() might return NULL, but
      the code in spapr_populate_pci_dt() does not check for this condition
      and then tries to dereference this NULL pointer.
      Apart from that, the return value of spapr_populate_pci_dt() also
      has to be checked for all PCI buses, not only for the last one, to
      make sure we catch all errors.
      Signed-off-by: NThomas Huth <thuth@redhat.com>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      da34fed7
  5. 22 4月, 2016 9 次提交
    • P
      Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging · 53343338
      Peter Maydell 提交于
      Mirror block job fixes for 2.6.0-rc4
      
      # gpg: Signature made Fri 22 Apr 2016 15:46:41 BST using RSA key ID C88F2FD6
      # gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>"
      
      * remotes/kevin/tags/for-upstream:
        mirror: Workaround for unexpected iohandler events during completion
        aio-posix: Skip external nodes in aio_dispatch
        virtio: Mark host notifiers as external
        event-notifier: Add "is_external" parameter
        iohandler: Introduce iohandler_get_aio_context
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      53343338
    • F
      mirror: Workaround for unexpected iohandler events during completion · ab27c3b5
      Fam Zheng 提交于
      Commit 5a7e7a0b moved mirror_exit to a BH handler but didn't add any
      protection against new requests that could sneak in just before the
      BH is dispatched. For example (assuming a code base at that commit):
      
              main_loop_wait # 1
                os_host_main_loop_wait
                  g_main_context_dispatch
                    aio_ctx_dispatch
                      aio_dispatch
                        ...
                          mirror_run
                            bdrv_drain
          (a)               block_job_defer_to_main_loop
                qemu_iohandler_poll
                  virtio_queue_host_notifier_read
                    ...
                      virtio_submit_multiwrite
          (b)           blk_aio_multiwrite
      
              main_loop_wait # 2
                <snip>
                      aio_dispatch
                        aio_bh_poll
          (c)             mirror_exit
      
      At (a) we know the BDS has no pending request. However, the same
      main_loop_wait call is going to dispatch iohandlers (EventNotifier
      events), which may lead to a new I/O from guest. So the invariant is
      already broken at (c). Data loss.
      
      Commit f3926945 made iohandler to use aio API.  The order of
      virtio_queue_host_notifier_read and block_job_defer_to_main_loop within
      a main_loop_wait becomes unpredictable, and even worse, if the host
      notifier event arrives at the next main_loop_wait call, the
      unpredictable order between mirror_exit and
      virtio_queue_host_notifier_read is also a trouble. As shown below, this
      commit made the bug easier to trigger:
      
          - Bug case 1:
      
              main_loop_wait # 1
                os_host_main_loop_wait
                  g_main_context_dispatch
                    aio_ctx_dispatch (qemu_aio_context)
                      ...
                        mirror_run
                          bdrv_drain
          (a)             block_job_defer_to_main_loop
                    aio_ctx_dispatch (iohandler_ctx)
                      virtio_queue_host_notifier_read
                        ...
                          virtio_submit_multiwrite
          (b)               blk_aio_multiwrite
      
              main_loop_wait # 2
                ...
                      aio_dispatch
                        aio_bh_poll
          (c)             mirror_exit
      
          - Bug case 2:
      
              main_loop_wait # 1
                os_host_main_loop_wait
                  g_main_context_dispatch
                    aio_ctx_dispatch (qemu_aio_context)
                      ...
                        mirror_run
                          bdrv_drain
          (a)             block_job_defer_to_main_loop
      
              main_loop_wait # 2
                ...
                  aio_ctx_dispatch (iohandler_ctx)
                    virtio_queue_host_notifier_read
                      ...
                        virtio_submit_multiwrite
          (b)             blk_aio_multiwrite
                    aio_dispatch
                      aio_bh_poll
          (c)           mirror_exit
      
      In both cases, (b) breaks the invariant wanted by (a) and (c).
      
      Until then, the request loss has been silent. Later, 3f09bfbc added
      asserts at (c) to check the invariant (in
      bdrv_replace_in_backing_chain), and Max reported an assertion failure
      first visible there, by doing active committing while the guest is
      running bonnie++.
      
      2.5 added bdrv_drained_begin at (a) to protect the dataplane case from
      similar problems, but we never realize the main loop bug until now.
      
      As a bandage, this patch disables iohandler's external events
      temporarily together with bs->ctx.
      
      Launchpad Bug: 1570134
      
      Cc: qemu-stable@nongnu.org
      Signed-off-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      ab27c3b5
    • F
      aio-posix: Skip external nodes in aio_dispatch · 37989ced
      Fam Zheng 提交于
      aio_poll doesn't poll the external nodes so this should never be true,
      but aio_ctx_dispatch may get notified by the events from GSource. To
      make bdrv_drained_begin effective in main loop, we should check the
      is_external flag here too.
      
      Also do the check in aio_pending so aio_dispatch is not called
      superfluously, when there is no events other than external ones.
      Signed-off-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      37989ced
    • F
      virtio: Mark host notifiers as external · 14560d69
      Fam Zheng 提交于
      The effect of this change is the block layer drained section can work,
      for example when mirror job is being completed.
      Signed-off-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      14560d69
    • F
      event-notifier: Add "is_external" parameter · 54e18d35
      Fam Zheng 提交于
      All callers pass "false" keeping the old semantics. The windows
      implementation doesn't distinguish the flag yet. On posix, it is passed
      down to the underlying aio context.
      Signed-off-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      54e18d35
    • F
      iohandler: Introduce iohandler_get_aio_context · bcd82a96
      Fam Zheng 提交于
      Signed-off-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      bcd82a96
    • C
      util: align memory allocations to 2M on AArch64 · ee1e0f8e
      Christoffer Dall 提交于
      For KVM to use Transparent Huge Pages (THP) we have to ensure that the
      alignment of the userspace address of the KVM memory slot and the IPA
      that the guest sees for a memory region have the same offset from the 2M
      huge page size boundary.
      
      One way to achieve this is to always align the IPA region at a 2M
      boundary and ensure that the mmap alignment is also at 2M.
      
      Unfortunately, we were only doing this for __arm__, not for __aarch64__,
      so add this simple condition.
      
      This fixes a performance regression using KVM/ARM on AArch64 platforms
      that showed a performance penalty of more than 50%, introduced by the
      following commit:
      
      9fac18f0 (oslib: allocate PROT_NONE pages on top of RAM, 2015-09-10)
      
      We were only lucky before the above commit, because we were allocating
      large regions and naturally getting a 2M alignment on those allocations
      then.
      
      Cc: qemu-stable@nongnu.org
      Reported-by: NShih-Wei Li <shihwei@cs.columbia.edu>
      Signed-off-by: NChristoffer Dall <christoffer.dall@linaro.org>
      Reviewed-by: NPeter Maydell <peter.maydell@linaro.org>
      [PMM: wrapped long line]
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      ee1e0f8e
    • E
      nbd: Don't mishandle unaligned client requests · df7b97ff
      Eric Blake 提交于
      The NBD protocol does not (yet) force any alignment constraints
      on clients.  Even though qemu NBD clients always send requests
      that are aligned to 512 bytes, we must be prepared for non-qemu
      clients that don't care about alignment (even if it means they
      are less efficient).  Our use of blk_read() and blk_write() was
      silently operating on the wrong file offsets when the client
      made an unaligned request, corrupting the client's data (but
      as the client already has control over the file we are serving,
      I don't think it is a security hole, per se, just a data
      corruption bug).
      
      Note that in the case of NBD_CMD_READ, an unaligned length could
      cause us to return up to 511 bytes of uninitialized trailing
      garbage from blk_try_blockalign() - hopefully nothing sensitive
      from the heap's prior usage is ever leaked in that manner.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Tested-by: NKevin Wolf <kwolf@redhat.com>
      Message-id: 1461249750-31928-1-git-send-email-eblake@redhat.com
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      df7b97ff
    • P
      Update version for v2.6.0-rc3 release · 8d0d9b9f
      Peter Maydell 提交于
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      8d0d9b9f
  6. 21 4月, 2016 4 次提交
  7. 20 4月, 2016 14 次提交
  8. 19 4月, 2016 4 次提交
    • P
      Merge remote-tracking branch 'remotes/armbru/tags/pull-fw_cfg-2016-04-19' into staging · d4dffa4a
      Peter Maydell 提交于
      fw_cfg: Adopt /opt/RFQDN convention
      
      # gpg: Signature made Tue 19 Apr 2016 15:14:20 BST using RSA key ID EB918653
      # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>"
      # gpg:                 aka "Markus Armbruster <armbru@pond.sub.org>"
      
      * remotes/armbru/tags/pull-fw_cfg-2016-04-19:
        fw_cfg: Adopt /opt/RFQDN convention
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      d4dffa4a
    • M
      fw_cfg: Adopt /opt/RFQDN convention · 63d3145a
      Markus Armbruster 提交于
      FW CFG's primary user is QEMU, which uses it to expose configuration
      information (in the widest sense) to Firmware.  Thus the name FW CFG.
      
      FW CFG can also be used by others for their own purposes.  QEMU is
      merely acting as transport then.  Names starting with opt/ are
      reserved for such uses.  There is no provision, however, to guide safe
      sharing among different such users.
      
      Fix that, loosely following QMP precedence: names should start with
      opt/RFQDN/, where RFQDN is a reverse fully qualified domain name you
      control.
      
      Based on a more ambitious patch from Michael Tsirkin.
      
      Cc: Gerd Hoffmann <kraxel@redhat.com>
      Cc: Gabriel L. Somlo <somlo@cmu.edu>
      Cc: Laszlo Ersek <lersek@redhat.com>
      Cc: Michael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      Acked-by: NGabriel Somlo <somlo@cmu.edu>
      Reviewed-by: NLaszlo Ersek <lersek@redhat.com>
      63d3145a
    • P
      Merge remote-tracking branch 'remotes/kraxel/tags/pull-usb-20160419-1' into staging · ef5d5641
      Peter Maydell 提交于
      ehci: fix (s)iTD looping issue (CVE-2015-8558) in a different way.
      
      # gpg: Signature made Tue 19 Apr 2016 07:22:22 BST using RSA key ID D3E87138
      # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>"
      # gpg:                 aka "Gerd Hoffmann <gerd@kraxel.org>"
      # gpg:                 aka "Gerd Hoffmann (private) <kraxel@gmail.com>"
      
      * remotes/kraxel/tags/pull-usb-20160419-1:
        Revert "ehci: make idt processing more robust"
        ehci: apply limit to iTD/sidt descriptors
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      ef5d5641
    • P
      Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-2.6-20160419' into staging · bb97bfd9
      Peter Maydell 提交于
      ppc patch queueu for 2016-04-19
      
      A single fix for a regression since 2.5.  This should be the last ppc
      pull request for 2.6.
      
      # gpg: Signature made Tue 19 Apr 2016 02:48:30 BST using RSA key ID 20D9B392
      # gpg: Good signature from "David Gibson <david@gibson.dropbear.id.au>"
      # gpg:                 aka "David Gibson (Red Hat) <dgibson@redhat.com>"
      # gpg:                 aka "David Gibson (ozlabs.org) <dgibson@ozlabs.org>"
      # gpg: WARNING: This key is not certified with sufficiently trusted signatures!
      # gpg:          It is not certain that the signature belongs to the owner.
      # Primary key fingerprint: 75F4 6586 AE61 A66C C44E  87DC 6C38 CACA 20D9 B392
      
      * remotes/dgibson/tags/ppc-for-2.6-20160419:
        cuda: fix off-by-one error in SET_TIME command
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      bb97bfd9