tipc: fix race between poll() and setsockopt()
authorJon Maloy <jon.maloy@ericsson.com>
Wed, 17 Jan 2018 15:42:46 +0000 (16:42 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 19 Jan 2018 20:12:21 +0000 (15:12 -0500)
commit60c2530696320ee6ffe4491c17079fa403790c98
tree619bdaecd86e48c1962a6866e40ada7e09c5addc
parent30c3e9d470358a6741e00e1034a1ea85c6a516f0
tipc: fix race between poll() and setsockopt()

Letting tipc_poll() dereference a socket's pointer to struct tipc_group
entails a race risk, as the group item may be deleted in a concurrent
tipc_sk_join() or tipc_sk_leave() thread.

We now move the 'open' flag in struct tipc_group to struct tipc_sock,
and let the former retain only a pointer to the moved field. This will
eliminate the race risk.

Reported-by: syzbot+799dafde0286795858ac@syzkaller.appspotmail.com
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/group.c
net/tipc/group.h
net/tipc/socket.c