diff options
author | Craig Gallek <kraig@google.com> | 2017-10-19 15:00:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-10-22 02:03:51 +0100 |
commit | 1b5f962e71bfad6284574655c406597535c3ea7a (patch) | |
tree | 2f96c8a5f8251654c8aaf3874681cd04c02b24e8 /fs/ufs/util.c | |
parent | 66c54517540cedf5a22911c6b7f5c7d8b5d1e1be (diff) | |
download | linux-1b5f962e71bfad6284574655c406597535c3ea7a.tar.gz linux-1b5f962e71bfad6284574655c406597535c3ea7a.tar.bz2 linux-1b5f962e71bfad6284574655c406597535c3ea7a.zip |
soreuseport: fix initialization race
Syzkaller stumbled upon a way to trigger
WARNING: CPU: 1 PID: 13881 at net/core/sock_reuseport.c:41
reuseport_alloc+0x306/0x3b0 net/core/sock_reuseport.c:39
There are two initialization paths for the sock_reuseport structure in a
socket: Through the udp/tcp bind paths of SO_REUSEPORT sockets or through
SO_ATTACH_REUSEPORT_[CE]BPF before bind. The existing implementation
assumedthat the socket lock protected both of these paths when it actually
only protects the SO_ATTACH_REUSEPORT path. Syzkaller triggered this
double allocation by running these paths concurrently.
This patch moves the check for double allocation into the reuseport_alloc
function which is protected by a global spin lock.
Fixes: e32ea7e74727 ("soreuseport: fast reuseport UDP socket selection")
Fixes: c125e80b8868 ("soreuseport: fast reuseport TCP socket selection")
Signed-off-by: Craig Gallek <kraig@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'fs/ufs/util.c')
0 files changed, 0 insertions, 0 deletions