I am working on a research project, where I try to intercept the incoming tcp packets going to a specific process. I use the kernel version.

I tried to find out how the data is copied to the user level pointer in that function, but I could not find anything. I disabled CONFIG_NET_DMA. I was assuming that, before the function finished, the data to be transfered to the user space is located at msg->msg_iov->iov_base. I tried to copy this data to a kernel buffer using copy_from_user, but the data copied is not the same as the one which gets to the user application. Any ideas?