diff --git a/kernel/syscall/skeleton.cc b/kernel/syscall/skeleton.cc index 7cd8b02..061eb90 100644 --- a/kernel/syscall/skeleton.cc +++ b/kernel/syscall/skeleton.cc @@ -253,9 +253,10 @@ int receive(Vault& v, void* buffer, size_t size) { for(uint32_t i=0; iptr):0; //apply offset only on first page uintptr_t paddr = isMapped((ipc->ptr)+(i*4096), v.thread_list[ipc->pid]->paging_tree->l4); - if (!copy_from_phys(v, paddr+offset, buffer, 4096-offset)) { - return -3; - } + if(total_len - (i*4096) > 4096) + copy_from_phys(v, paddr+offset, buffer, 4096-offset); + else + copy_from_phys(v, paddr, buffer, total_len - (i*4096)); } return ipc->pid;