diff --git a/kernel/syscall/skeleton.cc b/kernel/syscall/skeleton.cc index d8708ac..7cd8b02 100644 --- a/kernel/syscall/skeleton.cc +++ b/kernel/syscall/skeleton.cc @@ -247,11 +247,13 @@ int receive(Vault& v, void* buffer, size_t size) { if (ipc == nullptr) return -1; size_t copy_len = (size < ipc->size) ? size:ipc->size; - // Buffer holen + size_t total_len = (Page::offset(ipc->ptr)+copy_len); + uint8_t num_pages = (total_len/4096)+1; - for(uint32_t i=0; i<(copy_len/4096)+1; i++){ + 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, buffer, copy_len)) { + if (!copy_from_phys(v, paddr+offset, buffer, 4096-offset)) { return -3; } }