On 16/09/2020 10:04, Jan Beulich wrote:
On 10.09.2020 22:22, Oleksandr Tyshchenko wrote:
@@ -1325,7 +1327,7 @@ static int hvm_send_buffered_ioreq(struct
hvm_ioreq_server *s, ioreq_t *p)
new.read_pointer = old.read_pointer - n * IOREQ_BUFFER_SLOT_NUM;
new.write_pointer = old.write_pointer - n * IOREQ_BUFFER_SLOT_NUM;
- cmpxchg(&pg->ptrs.full, old.full, new.full);
+ guest_cmpxchg64(d, &pg->ptrs.full, old.full, new.full);
But the memory we're updating is shared with s->emulator, not with d,
if I'm not mistaken.
It is unfortunately shared with both s->emulator and d when using the
legacy interface.
For Arm, there is no plan to support the legacy interface, so we should
s->emulator and we should be fully protected.
Cheers,
--
Julien Grall