summaryrefslogtreecommitdiffstats
path: root/hw/virtio
diff options
context:
space:
mode:
authorAlexander Duyck2020-07-20 19:51:15 +0200
committerMichael S. Tsirkin2020-07-22 13:57:07 +0200
commit20a4da0f23078deeff5ea6d1e12f47d968d7c3c9 (patch)
treeca99fcf6ed0a8096c6d1e3ebe58322e51b0c8258 /hw/virtio
parentvirtio: Drop broken and superfluous object_property_set_link() (diff)
downloadqemu-20a4da0f23078deeff5ea6d1e12f47d968d7c3c9.tar.gz
qemu-20a4da0f23078deeff5ea6d1e12f47d968d7c3c9.tar.xz
qemu-20a4da0f23078deeff5ea6d1e12f47d968d7c3c9.zip
virtio-balloon: Prevent guest from starting a report when we didn't request one
Based on code review it appears possible for the driver to force the device out of a stopped state when hinting by repeating the last ID it was provided. Prevent this by only allowing a transition to the start state when we are in the requested state. This way the driver is only allowed to send one descriptor that will transition the device into the start state. All others will leave it in the stop state once it has finished. Fixes: c13c4153f76d ("virtio-balloon: VIRTIO_BALLOON_F_FREE_PAGE_HINT") Acked-by: David Hildenbrand <david@redhat.com> Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com> Message-Id: <20200720175115.21935.99563.stgit@localhost.localdomain> Cc: qemu-stable@nongnu.org Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw/virtio')
-rw-r--r--hw/virtio/virtio-balloon.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index e670f1e595..ce70adcc69 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
@@ -526,7 +526,8 @@ static bool get_free_page_hints(VirtIOBalloon *dev)
ret = false;
goto out;
}
- if (id == dev->free_page_report_cmd_id) {
+ if (dev->free_page_report_status == FREE_PAGE_REPORT_S_REQUESTED &&
+ id == dev->free_page_report_cmd_id) {
dev->free_page_report_status = FREE_PAGE_REPORT_S_START;
} else {
/*