diff --git a/src/system/kernel/thread.cpp b/src/system/kernel/thread.cpp index 4c274aedea..2187757e42 100644 --- a/src/system/kernel/thread.cpp +++ b/src/system/kernel/thread.cpp @@ -2855,15 +2855,16 @@ _user_receive_data(thread_id *_userSender, void *buffer, size_t bufferSize) thread_id sender; status_t code; - if (!IS_USER_ADDRESS(_userSender) + if ((!IS_USER_ADDRESS(_userSender) && _userSender != NULL) || !IS_USER_ADDRESS(buffer)) return B_BAD_ADDRESS; code = receive_data_etc(&sender, buffer, bufferSize, B_KILL_CAN_INTERRUPT); // supports userland buffers - if (user_memcpy(_userSender, &sender, sizeof(thread_id)) < B_OK) - return B_BAD_ADDRESS; + if (_userSender != NULL) + if (user_memcpy(_userSender, &sender, sizeof(thread_id)) < B_OK) + return B_BAD_ADDRESS; return code; } diff --git a/src/system/libroot/os/thread.c b/src/system/libroot/os/thread.c index 45a9c2e205..51ce429155 100644 --- a/src/system/libroot/os/thread.c +++ b/src/system/libroot/os/thread.c @@ -179,10 +179,6 @@ send_data(thread_id thread, int32 code, const void *buffer, size_t bufferSize) int32 receive_data(thread_id *_sender, void *buffer, size_t bufferSize) { - if (_sender == NULL) { - thread_id id; - return _kern_receive_data(&id, buffer, bufferSize); - } return _kern_receive_data(_sender, buffer, bufferSize); }