]> git.baikalelectronics.ru Git - kernel.git/commit
sock: Make sock->sk_stamp thread-safe
authorDeepa Dinamani <deepa.kernel@gmail.com>
Fri, 28 Dec 2018 02:55:09 +0000 (18:55 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 1 Jan 2019 17:47:59 +0000 (09:47 -0800)
commit002ecf642740fd61b0b996dc1ae06f3ad85467bb
treef27788a1eb07823c642631cb4d27aa0c052e3095
parent26ffe2767a8925c71124ba37822974c6d58b1b79
sock: Make sock->sk_stamp thread-safe

Al Viro mentioned (Message-ID
<20170626041334.GZ10672@ZenIV.linux.org.uk>)
that there is probably a race condition
lurking in accesses of sk_stamp on 32-bit machines.

sock->sk_stamp is of type ktime_t which is always an s64.
On a 32 bit architecture, we might run into situations of
unsafe access as the access to the field becomes non atomic.

Use seqlocks for synchronization.
This allows us to avoid using spinlocks for readers as
readers do not need mutual exclusion.

Another approach to solve this is to require sk_lock for all
modifications of the timestamps. The current approach allows
for timestamps to have their own lock: sk_stamp_lock.
This allows for the patch to not compete with already
existing critical sections, and side effects are limited
to the paths in the patch.

The addition of the new field maintains the data locality
optimizations from
commit d696775c5971 ("net: reorganize struct sock for better data
locality")

Note that all the instances of the sk_stamp accesses
are either through the ioctl or the syscall recvmsg.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/sock.h
net/compat.c
net/core/sock.c
net/sunrpc/svcsock.c