blockjob: update nodes head while removing all bdrv
commitd876bf676f5e7c6aa9ac64555e48cba8734ecb2f
authorSergio Lopez <slp@redhat.com>
Wed, 11 Sep 2019 10:03:16 +0000 (11 12:03 +0200)
committerMax Reitz <mreitz@redhat.com>
Mon, 16 Sep 2019 13:31:12 +0000 (16 15:31 +0200)
treea59919ba03b035259cabd05193df4ac224cbd7ed
parentc34dc07f9f01cf686e512f939aece744723072cd
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>
blockjob.c