hrev52612 adds 1 changeset to branch 'master'
old head: f0a1a07c73fa7a5275a46184467ceb429634cdba
new head: cf6760f20ccec7f99cc6c25c80b922819e1928cf
overview:
https://git.haiku-os.org/haiku/log/?qt=range&q=cf6760f20cce+%5Ef0a1a07c73fa
----------------------------------------------------------------------------
cf6760f20cce: userlandfs: Read()/Write() with user_memcpy().
Change-Id: I8be72d5fb18228c0ee0394a3f906f7a50113d7ea
Reviewed-on: https://review.haiku-os.org/741
Reviewed-by: Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
[ Jérôme Duval <jerome.duval@xxxxxxxxx> ]
----------------------------------------------------------------------------
Revision: hrev52612
Commit: cf6760f20ccec7f99cc6c25c80b922819e1928cf
URL: https://git.haiku-os.org/haiku/commit/?id=cf6760f20cce
Author: Jérôme Duval <jerome.duval@xxxxxxxxx>
Date: Fri Nov 30 20:18:12 2018 UTC
Committer: Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Commit-Date: Fri Nov 30 22:02:42 2018 UTC
----------------------------------------------------------------------------
2 files changed, 14 insertions(+), 3 deletions(-)
.../file_systems/userlandfs/kernel_add_on/Volume.cpp | 7 +++++--
.../file_systems/userlandfs/private/RequestAllocator.cpp | 10 +++++++++-
----------------------------------------------------------------------------
diff --git
a/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.cpp
b/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.cpp
index e2e5b40071..21b9a76b3b 100644
--- a/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.cpp
+++ b/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.cpp
@@ -2179,8 +2179,11 @@ Volume::Read(void* _node, void* cookie, off_t pos, void*
buffer,
|| reply->bytesRead > bufferSize) {
return B_BAD_DATA;
}
- if (reply->bytesRead > 0)
- memcpy(buffer, readBuffer, reply->bytesRead);
+ if (reply->bytesRead > 0
+ && user_memcpy(buffer, readBuffer, reply->bytesRead) < B_OK) {
+ return B_BAD_ADDRESS;
+ }
+
*bytesRead = reply->bytesRead;
_SendReceiptAck(port);
return error;
diff --git
a/src/add-ons/kernel/file_systems/userlandfs/private/RequestAllocator.cpp
b/src/add-ons/kernel/file_systems/userlandfs/private/RequestAllocator.cpp
index 348b16232f..d78f7c7e27 100644
--- a/src/add-ons/kernel/file_systems/userlandfs/private/RequestAllocator.cpp
+++ b/src/add-ons/kernel/file_systems/userlandfs/private/RequestAllocator.cpp
@@ -6,6 +6,8 @@
#include <stdlib.h>
#include <KernelExport.h>
+#include <kernel.h>
+
#include "AreaSupport.h"
#include "Compatibility.h"
#include "Debug.h"
@@ -279,8 +281,14 @@ RequestAllocator::AllocateData(Address& address, const
void* data, int32 size,
deferredInit);
if (error != B_OK)
return error;
- if (size > 0)
+ if (size > 0) {
+#ifndef _KERNEL_MODE
memcpy(destination, data, size);
+#else
+ if (user_memcpy(destination, data, size) < B_OK)
+ return B_BAD_ADDRESS;
+#endif
+ }
} else
address.SetTo(-1, 0, 0);
return error;