Advertisement
Guest User

iksnagreb

a guest
Jul 11th, 2014
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. /*
  2.     Copies the answer back to the calling thread
  3.     */
  4.     if(message->origptr)
  5.     {
  6.         if((uintptr_t)message->origptr < vmm::user_space_base || (uintptr_t)message->origptr > vmm::user_space_limit)
  7.         {
  8.            
  9.         }
  10.         else
  11.         {
  12.             uintptr_t alignedptr = align4k((uintptr_t)message->origptr);
  13.  
  14.             uintptr_t phys = caller->proc->memmgr->get_context()->phys(alignedptr);
  15.  
  16.             if(phys)
  17.             {
  18.                 uintptr_t virt = kernel::vmmgr().alloc_vonly(bytes_to_pages(sizeof(kernel::ipc::answer_t)));
  19.  
  20.                 if(virt)
  21.                 {                                  
  22.                     if(kernel::vmmgr().map(virt, phys, vmm::present | vmm::write, bytes_to_pages(sizeof(kernel::ipc::answer_t))))
  23.                     {
  24.                         memcpy((void*)(virt + offset4k((uintptr_t)message->origptr)), (void*)&message->answer, sizeof(kernel::ipc::answer_t));
  25.                     }
  26.  
  27.                     kernel::vmmgr().umap(virt, bytes_to_pages(sizeof(kernel::ipc::answer_t)));
  28.                 }
  29.             }
  30.         }
  31.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement