diff --git a/src/system/kernel/device_manager/IORequest.cpp b/src/system/kernel/device_manager/IORequest.cpp index d80ba2a2b2..1c0ae43139 100644 --- a/src/system/kernel/device_manager/IORequest.cpp +++ b/src/system/kernel/device_manager/IORequest.cpp @@ -1281,6 +1281,16 @@ IORequest::_CopySimple(void* bounceBuffer, generic_addr_t external, size_t size, { TRACE(" IORequest::_CopySimple(%p, %#" B_PRIxGENADDR ", %lu, %d)\n", bounceBuffer, external, size, copyIn); + if (IS_USER_ADDRESS(external)) { + status_t status = B_OK; + if (copyIn) + status = user_memcpy(bounceBuffer, (void*)(addr_t)external, size); + else + status = user_memcpy((void*)(addr_t)external, bounceBuffer, size); + if (status < B_OK) + return status; + return B_OK; + } if (copyIn) memcpy(bounceBuffer, (void*)(addr_t)external, size); else