[haiku-commits] haiku: hrev52612 - in src/add-ons/kernel/file_systems/userlandfs: kernel_add_on private

  • From: Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 30 Nov 2018 17:02:47 -0500 (EST)

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;


Other related posts:

  • » [haiku-commits] haiku: hrev52612 - in src/add-ons/kernel/file_systems/userlandfs: kernel_add_on private - Axel Dörfler