1. 01 8月, 2017 5 次提交
  2. 20 4月, 2017 1 次提交
  3. 19 4月, 2017 1 次提交
  4. 18 4月, 2017 4 次提交
    • P
      Merge remote-tracking branch 'remotes/famz/tags/block-pull-request' into staging · d1263f8f
      Peter Maydell 提交于
      # gpg: Signature made Tue 18 Apr 2017 15:58:32 BST
      # gpg:                using RSA key 0xCA35624C6A9171C6
      # gpg: Good signature from "Fam Zheng <famz@redhat.com>"
      # 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: 5003 7CB7 9706 0F76 F021  AD56 CA35 624C 6A91 71C6
      
      * remotes/famz/tags/block-pull-request:
        block: Drain BH in bdrv_drained_begin
        block: Walk bs->children carefully in bdrv_drain_recurse
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      d1263f8f
    • F
      block: Drain BH in bdrv_drained_begin · 91af091f
      Fam Zheng 提交于
      During block job completion, nothing is preventing
      block_job_defer_to_main_loop_bh from being called in a nested
      aio_poll(), which is a trouble, such as in this code path:
      
          qmp_block_commit
            commit_active_start
              bdrv_reopen
                bdrv_reopen_multiple
                  bdrv_reopen_prepare
                    bdrv_flush
                      aio_poll
                        aio_bh_poll
                          aio_bh_call
                            block_job_defer_to_main_loop_bh
                              stream_complete
                                bdrv_reopen
      
      block_job_defer_to_main_loop_bh is the last step of the stream job,
      which should have been "paused" by the bdrv_drained_begin/end in
      bdrv_reopen_multiple, but it is not done because it's in the form of a
      main loop BH.
      
      Similar to why block jobs should be paused between drained_begin and
      drained_end, BHs they schedule must be excluded as well.  To achieve
      this, this patch forces draining the BH in BDRV_POLL_WHILE.
      
      As a side effect this fixes a hang in block_job_detach_aio_context
      during system_reset when a block job is ready:
      
          #0  0x0000555555aa79f3 in bdrv_drain_recurse
          #1  0x0000555555aa825d in bdrv_drained_begin
          #2  0x0000555555aa8449 in bdrv_drain
          #3  0x0000555555a9c356 in blk_drain
          #4  0x0000555555aa3cfd in mirror_drain
          #5  0x0000555555a66e11 in block_job_detach_aio_context
          #6  0x0000555555a62f4d in bdrv_detach_aio_context
          #7  0x0000555555a63116 in bdrv_set_aio_context
          #8  0x0000555555a9d326 in blk_set_aio_context
          #9  0x00005555557e38da in virtio_blk_data_plane_stop
          #10 0x00005555559f9d5f in virtio_bus_stop_ioeventfd
          #11 0x00005555559fa49b in virtio_bus_stop_ioeventfd
          #12 0x00005555559f6a18 in virtio_pci_stop_ioeventfd
          #13 0x00005555559f6a18 in virtio_pci_reset
          #14 0x00005555559139a9 in qdev_reset_one
          #15 0x0000555555916738 in qbus_walk_children
          #16 0x0000555555913318 in qdev_walk_children
          #17 0x0000555555916738 in qbus_walk_children
          #18 0x00005555559168ca in qemu_devices_reset
          #19 0x000055555581fcbb in pc_machine_reset
          #20 0x00005555558a4d96 in qemu_system_reset
          #21 0x000055555577157a in main_loop_should_exit
          #22 0x000055555577157a in main_loop
          #23 0x000055555577157a in main
      
      The rationale is that the loop in block_job_detach_aio_context cannot
      make any progress in pausing/completing the job, because bs->in_flight
      is 0, so bdrv_drain doesn't process the block_job_defer_to_main_loop
      BH. With this patch, it does.
      Reported-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NFam Zheng <famz@redhat.com>
      Message-Id: <20170418143044.12187-3-famz@redhat.com>
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Tested-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NFam Zheng <famz@redhat.com>
      91af091f
    • F
      block: Walk bs->children carefully in bdrv_drain_recurse · 178bd438
      Fam Zheng 提交于
      The recursive bdrv_drain_recurse may run a block job completion BH that
      drops nodes. The coming changes will make that more likely and use-after-free
      would happen without this patch
      
      Stash the bs pointer and use bdrv_ref/bdrv_unref in addition to
      QLIST_FOREACH_SAFE to prevent such a case from happening.
      
      Since bdrv_unref accesses global state that is not protected by the AioContext
      lock, we cannot use bdrv_ref/bdrv_unref unconditionally.  Fortunately the
      protection is not needed in IOThread because only main loop can modify a graph
      with the AioContext lock held.
      Signed-off-by: NFam Zheng <famz@redhat.com>
      Message-Id: <20170418143044.12187-2-famz@redhat.com>
      Reviewed-by: NJeff Cody <jcody@redhat.com>
      Tested-by: NJeff Cody <jcody@redhat.com>
      Signed-off-by: NFam Zheng <famz@redhat.com>
      178bd438
    • G
      9pfs: local: set the path of the export root to "." · 9c6b899f
      Greg Kurz 提交于
      The local backend was recently converted to using "at*()" syscalls in order
      to ensure all accesses happen below the shared directory. This requires that
      we only pass relative paths, otherwise the dirfd argument to the "at*()"
      syscalls is ignored and the path is treated as an absolute path in the host.
      This is actually the case for paths in all fids, with the notable exception
      of the root fid, whose path is "/". This causes the following backend ops to
      act on the "/" directory of the host instead of the virtfs shared directory
      when the export root is involved:
      - lstat
      - chmod
      - chown
      - utimensat
      
      ie, chmod /9p_mount_point in the guest will be converted to chmod / in the
      host for example. This could cause security issues with a privileged QEMU.
      
      All "*at()" syscalls are being passed an open file descriptor. In the case
      of the export root, this file descriptor points to the path in the host that
      was passed to -fsdev.
      
      The fix is thus as simple as changing the path of the export root fid to be
      "." instead of "/".
      
      This is CVE-2017-7471.
      
      Cc: qemu-stable@nongnu.org
      Reported-by: NLéo Gaspard <leo@gaspard.io>
      Signed-off-by: NGreg Kurz <groug@kaod.org>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      9c6b899f
  5. 12 4月, 2017 1 次提交
  6. 11 4月, 2017 20 次提交
  7. 10 4月, 2017 8 次提交
    • P
      Merge remote-tracking branch 'remotes/gkurz/tags/for-upstream' into staging · c322fdd4
      Peter Maydell 提交于
      Fixes a memory leak.
      
      # gpg: Signature made Mon 10 Apr 2017 13:20:39 BST
      # gpg:                using DSA key 0x02FC3AEB0101DBC2
      # gpg: Good signature from "Greg Kurz <groug@kaod.org>"
      # gpg:                 aka "Greg Kurz <groug@free.fr>"
      # gpg:                 aka "Greg Kurz <gkurz@linux.vnet.ibm.com>"
      # gpg:                 aka "Gregory Kurz (Groug) <groug@free.fr>"
      # gpg:                 aka "[jpeg image of size 3330]"
      # gpg: WARNING: This key is not certified with a trusted signature!
      # gpg:          There is no indication that the signature belongs to the owner.
      # Primary key fingerprint: 2BD4 3B44 535E C0A7 9894  DBA2 02FC 3AEB 0101 DBC2
      
      * remotes/gkurz/tags/for-upstream:
        9pfs: xattr: fix memory leak in v9fs_list_xattr
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      c322fdd4
    • P
      Merge remote-tracking branch 'remotes/stsquad/tags/pull-mttcg-fixups-for-rc2-100417-1' into staging · 0a49bfa1
      Peter Maydell 提交于
      Final icount and misc MTTCG fixes for 2.9
      
      Minor differences from:
        Message-Id: <20170405132503.32125-1-alex.bennee@linaro.org>
      
        - dropped new feature patches
        - last minute typo fix from Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
      
      # gpg: Signature made Mon 10 Apr 2017 11:38:10 BST
      # gpg:                using RSA key 0xFBD0DB095A9E2A44
      # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>"
      # Primary key fingerprint: 6685 AE99 E751 67BC AFC8  DF35 FBD0 DB09 5A9E 2A44
      
      * remotes/stsquad/tags/pull-mttcg-fixups-for-rc2-100417-1:
        replay: assert time only goes forward
        cpus: call cpu_update_icount on read
        cpu-exec: update icount after each TB_EXIT
        cpus: introduce cpu_update_icount helper
        cpus: don't credit executed instructions before they have run
        cpus: move icount preparation out of tcg_exec_cpu
        cpus: check cpu->running in cpu_get_icount_raw()
        cpus: remove icount handling from qemu_tcg_cpu_thread_fn
        target/i386/misc_helper: wrap BQL around another IRQ generator
        cpus: fix wrong define name
        scripts/qemugdb/mtree.py: fix up mtree dump
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      0a49bfa1
    • P
      configure: on Windows minimum glib version must be 2.30 · ad04d8cb
      Peter Maydell 提交于
      In the 2.7 release we stated in the ChangeLog that the
      minimum glib version for Windows hosts was 2.30, but we
      didn't update configure to enforce this because we were
      very close to the release at the point where we noticed
      the issue, and it only affected building the test suite.
      We then forgot that we needed to do it. Fix the omission.
      
      (The reason for the 2.30 requirement is use of
      g_dir_make_tmp() -- our fallback implementation uses
      mkdtemp(), which isn't available on Windows.)
      Reported-by: NMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
      Reviewed-by: NStefan Weil <sw@weilnetz.de>
      Message-id: 1491224655-5776-1-git-send-email-peter.maydell@linaro.org
      ad04d8cb
    • A
      replay: assert time only goes forward · 982263ce
      Alex Bennée 提交于
      If we find ourselves trying to add an event to the log where time has
      gone backwards it is because a vCPU event has occurred and the
      main-loop is not yet aware of time moving forward. This should not
      happen and if it does its better to fail early than generate a log
      that will have weird behaviour.
      Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
      982263ce
    • A
      cpus: call cpu_update_icount on read · 1d05906b
      Alex Bennée 提交于
      This ensures each time the vCPU thread reads the icount we update the
      master timer_state.qemu_icount field. This way as long as updates are
      in BQL protected sections (which they should be) the main-loop can
      never come to update the log and find time has gone backwards.
      Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
      1d05906b
    • A
      cpu-exec: update icount after each TB_EXIT · eda5f7c6
      Alex Bennée 提交于
      There is no particular reason we shouldn't update the global system
      icount time as we exit each TranslationBlock run. This ensures the
      main-loop doesn't have to wait until we exit to the outer loop for
      executed instructions to be credited to timer_state.
      
      The prepare_icount_for_run function is slightly tweaked to match the
      logic we run in cpu_loop_exec_tb.
      
      Based on Paolo's original suggestion.
      Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
      eda5f7c6
    • A
      cpus: introduce cpu_update_icount helper · 512d3c80
      Alex Bennée 提交于
      By holding off updates to timer_state.qemu_icount we can run into
      trouble when the non-vCPU thread needs to know the time. This helper
      ensures we atomically update timers_state.qemu_icount based on what
      has been currently executed.
      Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
      512d3c80
    • A
      cpus: don't credit executed instructions before they have run · e4cd9657
      Alex Bennée 提交于
      Outside of the vCPU thread icount time will only be tracked against
      timers_state.qemu_icount. We no longer credit cycles until they have
      completed the run. Inside the vCPU thread we adjust for passage of
      time by looking at how many have run so far. This is only valid inside
      the vCPU thread while it is running.
      Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
      e4cd9657