From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> My rework of section adding combines overlapping or abutting regions, but checks they're actually the same underlying RAM block. Fix the case where two blocks abut but don't overlap; that new region should get added (but not combined), but my previous patch was disallowing it.
Fixes: c1ece84e7c9 Reported-by: Alex Williamson <alex.william...@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com> --- hw/virtio/vhost.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 250f886acb..fc9062a89f 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -595,10 +595,15 @@ static void vhost_region_add_section(struct vhost_dev *dev, prev_sec->offset_within_address_space, prev_sec->offset_within_region); } else { - error_report("%s: Overlapping but not coherent sections " - "at %"PRIx64, - __func__, mrs_gpa); - return; + /* abutting regions are fine, but overlapping ones with + * different blocks/offsets shouldn't happen + */ + if (mrs_gpa != prev_gpa_end + 1) { + error_report("%s: Overlapping but not coherent sections " + "at %"PRIx64, + __func__, mrs_gpa); + return; + } } } } -- 2.14.3