diff --git a/src/system/kernel/thread.cpp b/src/system/kernel/thread.cpp index 7e2706aa85..a28c39147b 100644 --- a/src/system/kernel/thread.cpp +++ b/src/system/kernel/thread.cpp @@ -743,7 +743,7 @@ receive_data_etc(thread_id *_sender, void *buffer, size_t bufferSize, return status; } - if (buffer != NULL && bufferSize != 0) { + if (buffer != NULL && bufferSize != 0 && thread->msg.buffer != NULL) { size = min_c(bufferSize, thread->msg.size); status = cbuf_user_memcpy_from_chain(buffer, thread->msg.buffer, 0, size); diff --git a/src/system/kernel/util/cbuf.c b/src/system/kernel/util/cbuf.c index 636da5b08c..133dc27605 100644 --- a/src/system/kernel/util/cbuf.c +++ b/src/system/kernel/util/cbuf.c @@ -529,6 +529,8 @@ cbuf_user_memcpy_from_chain(void *_dest, cbuf *chain, size_t offset, size_t leng int bufferOffset; int err; + if (length == 0) + return B_OK; if (chain == NULL) return B_BAD_VALUE;