Each process has its own "context" of execution which includes Data structures (page tables) used in Virtual to Physical address translation.
At any point of time, Virtual Address to Physical address mapping depends on the currently executing process at that time.
Take the following scenario :
A user-mode program (say "Process-A" with a single thread) initiates a read request and passes a User-space buffer address.
This read request reaches to Device Driver routine, which is running in Kernel mode. Now most likely, the actual read operation from Device hardware will take some time to complete. In this case, the Driver routine may not wait for the completion of operation. Instead, it will just start the read operation from the Device, and return immedietly. In this activity, the Operating System will also get notified that the read opeartion has started but not completed yet. The OS will put the Process-A in waiting state, and schedule some other Process (thread) in execution.
Later when the Device completes the reading operation, it will raise an Interrupt to notify this. At this time, any arbitrary process (say "Process-B") will be in execution. That is the Page tables will be reflecting Virtual to Physical address space mapping for Process-B. The Driver routine called for servicing this interrupt will be running in Context of Process-B.
At this point, accessing the virtual address provided by user-mode program at step-1 will access the Virtual Address corresponding to Process-B and not that of Process-A.
See the "Methods for Accessing Data Buffers" for different approches to transfer data to user-space from Kernel-mode routines.