mirror of https://github.com/xemu-project/xemu.git
xen: fix quad word bufioreq handling
We should not consume the second slot if it didn't get written yet. Normal writers - i.e. Xen - would not update write_pointer between the two writes, but the page may get fiddled with by the guest itself, and we're better off avoiding to enter an infinite loop in that case. Reported-by: yanghongke <yanghongke@huawei.com> Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Paul Durrant <paul.durrant@citrix.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
parent
7875efb9f6
commit
ff3b8b8f86
|
@ -1021,6 +1021,9 @@ static int handle_buffered_iopage(XenIOState *state)
|
||||||
xen_rmb();
|
xen_rmb();
|
||||||
qw = (req.size == 8);
|
qw = (req.size == 8);
|
||||||
if (qw) {
|
if (qw) {
|
||||||
|
if (rdptr + 1 == wrptr) {
|
||||||
|
hw_error("Incomplete quad word buffered ioreq");
|
||||||
|
}
|
||||||
buf_req = &buf_page->buf_ioreq[(rdptr + 1) %
|
buf_req = &buf_page->buf_ioreq[(rdptr + 1) %
|
||||||
IOREQ_BUFFER_SLOT_NUM];
|
IOREQ_BUFFER_SLOT_NUM];
|
||||||
req.data |= ((uint64_t)buf_req->data) << 32;
|
req.data |= ((uint64_t)buf_req->data) << 32;
|
||||||
|
|
Loading…
Reference in New Issue