Re: [PATCH v2 net-next 1/2] tcp: add TCP_ZEROCOPY_RECEIVE support for zerocopy receive

From: Ka-Cheong Poon
Date: Thu Apr 26 2018 - 09:40:41 EST


On 04/26/2018 05:43 AM, Eric Dumazet wrote:
When adding tcp mmap() implementation, I forgot that socket lock
had to be taken before current->mm->mmap_sem. syzbot eventually caught
the bug.

Since we can not lock the socket in tcp mmap() handler we have to
split the operation in two phases.

1) mmap() on a tcp socket simply reserves VMA space, and nothing else.
This operation does not involve any TCP locking.

2) setsockopt(fd, IPPROTO_TCP, TCP_ZEROCOPY_RECEIVE, ...) implements
the transfert of pages from skbs to one VMA.
This operation only uses down_read(&current->mm->mmap_sem) after
holding TCP lock, thus solving the lockdep issue.


A quick question. Is it a normal practice to return a result
in setsockopt() given that the optval parameter is supposed to
be a const void *?




--
K. Poon
ka-cheong.poon@xxxxxxxxxx