The system task's do_copy function handles the task call initiated by sys_vircopy.
The sys_vircopy function just hides the task call from a server process (e.g., process manager) to the system task (the kernel). If the kernel needs to copy data to a user process, the sys_vircopy function is of no further use. The kernel already has privileges and access to functions to do the copying.
The function the system task already uses to handle the sys_vircopy is
PUBLIC int virtual_copy(src_addr, dst_addr, bytes) struct vir_addr *src_addr; /* source virtual address */ struct vir_addr *dst_addr; /* destination virtual address */ vir_bytes bytes; /* # of bytes to copy */
This function can be used for the system task handler for any new task call that copies data from one process to another.