device_manager: IORequest: use user_memcpy() to access a user buffer.
* should fix #14164, but the case can't be reproduced easily it seems. Change-Id: I636db93cc1efe2784b2530dced6a900fbfe3dce8
This commit is contained in:
@@ -1281,6 +1281,16 @@ IORequest::_CopySimple(void* bounceBuffer, generic_addr_t external, size_t size,
|
|||||||
{
|
{
|
||||||
TRACE(" IORequest::_CopySimple(%p, %#" B_PRIxGENADDR ", %lu, %d)\n",
|
TRACE(" IORequest::_CopySimple(%p, %#" B_PRIxGENADDR ", %lu, %d)\n",
|
||||||
bounceBuffer, external, size, copyIn);
|
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)
|
if (copyIn)
|
||||||
memcpy(bounceBuffer, (void*)(addr_t)external, size);
|
memcpy(bounceBuffer, (void*)(addr_t)external, size);
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user