From 760c04c53a5b389c7b112fb4f3252cc34d68781f Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 31 Mar 2017 17:09:41 +0200 Subject: [PATCH] qemu-usb: respect size of assignment fixes vbox4 and vbox5 xhci support Issue #2362 --- repos/libports/src/lib/qemu-usb/qemu_emul.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/repos/libports/src/lib/qemu-usb/qemu_emul.cc b/repos/libports/src/lib/qemu-usb/qemu_emul.cc index 1f84f0f86..7f39870f2 100644 --- a/repos/libports/src/lib/qemu-usb/qemu_emul.cc +++ b/repos/libports/src/lib/qemu-usb/qemu_emul.cc @@ -556,8 +556,8 @@ struct Controller : public Qemu::Controller ptr = (void*)&Object_pool::p()->xhci_state()->ports[port]; } - uint64_t v = mmio.ops->read(ptr, reg, size); - *((uint32_t*)buf) = v; + uint64_t v = mmio.ops->read(ptr, reg, size); + memcpy(buf, &v, Genode::min(sizeof(v), size)); if (verbose_mmio) Genode::log(__func__, ": ", Hex(mmio.id), " offset: ", Hex(offset), " " @@ -571,9 +571,10 @@ struct Controller : public Qemu::Controller Genode::Lock::Guard g(_lock); Mmio &mmio = find_region(offset); Genode::off_t reg = offset - mmio.offset; - uint64_t v = *((uint64_t*)buf); + void *ptr = Object_pool::p()->xhci_state(); + uint64_t v = 0ULL; - void *ptr = Object_pool::p()->xhci_state(); + memcpy(&v, buf, Genode::min(sizeof(v), size)); /* * Handle port access