]> git.ipfire.org Git - thirdparty/qemu.git/commit
blockjob: update nodes head while removing all bdrv
authorSergio Lopez <slp@redhat.com>
Wed, 11 Sep 2019 10:03:16 +0000 (12:03 +0200)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Wed, 30 Oct 2019 16:34:26 +0000 (11:34 -0500)
commit86b0f4022bb43b16979ba5300e8d40a1e6d44b79
treead7d2c6d36a81baea626d5e469aed09aeb2744a6
parent2d86df1f78d71ca30a4bff84002ada70e6a04169
blockjob: update nodes head while removing all bdrv

block_job_remove_all_bdrv() iterates through job->nodes, calling
bdrv_root_unref_child() for each entry. The call to the latter may
reach child_job_[can_]set_aio_ctx(), which will also attempt to
traverse job->nodes, potentially finding entries that where freed
on previous iterations.

To avoid this situation, update job->nodes head on each iteration to
ensure that already freed entries are no longer linked to the list.

RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1746631
Signed-off-by: Sergio Lopez <slp@redhat.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190911100316.32282-1-mreitz@redhat.com
Reviewed-by: Sergio Lopez <slp@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
(cherry picked from commit d876bf676f5e7c6aa9ac64555e48cba8734ecb2f)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
blockjob.c