Acked-by: Jon Maloy <jon.ma...@ericsson.com> Thank you, Cong.
///jon > -----Original Message----- > From: Cong Wang <xiyou.wangc...@gmail.com> > Sent: 17-Dec-18 02:25 > To: netdev@vger.kernel.org > Cc: Cong Wang <xiyou.wangc...@gmail.com>; Ying Xue > <ying....@windriver.com>; Jon Maloy <jon.ma...@ericsson.com> > Subject: [Patch net] tipc: check group dests after tipc_wait_for_cond() > > Similar to commit 143ece654f9f ("tipc: check tsk->group in > tipc_wait_for_cond()") we have to reload grp->dests too after we re-take > the sock lock. > This means we need to move the dsts check after tipc_wait_for_cond() too. > > Fixes: 75da2163dbb6 ("tipc: introduce communication groups") > Reported-and-tested-by: > syzbot+99f20222fc5018d2b...@syzkaller.appspotmail.com > Cc: Ying Xue <ying....@windriver.com> > Cc: Jon Maloy <jon.ma...@ericsson.com> > Signed-off-by: Cong Wang <xiyou.wangc...@gmail.com> > --- > net/tipc/socket.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/net/tipc/socket.c b/net/tipc/socket.c index > 656940692a44..8f34db2a9785 100644 > --- a/net/tipc/socket.c > +++ b/net/tipc/socket.c > @@ -1009,7 +1009,7 @@ static int tipc_send_group_bcast(struct socket > *sock, struct msghdr *m, > struct sock *sk = sock->sk; > struct net *net = sock_net(sk); > struct tipc_sock *tsk = tipc_sk(sk); > - struct tipc_nlist *dsts = tipc_group_dests(tsk->group); > + struct tipc_nlist *dsts; > struct tipc_mc_method *method = &tsk->mc_method; > bool ack = method->mandatory && method->rcast; > int blks = tsk_blocks(MCAST_H_SIZE + dlen); @@ -1018,9 +1018,6 > @@ static int tipc_send_group_bcast(struct socket *sock, struct msghdr *m, > struct sk_buff_head pkts; > int rc = -EHOSTUNREACH; > > - if (!dsts->local && !dsts->remote) > - return -EHOSTUNREACH; > - > /* Block or return if any destination link or member is congested */ > rc = tipc_wait_for_cond(sock, &timeout, > !tsk->cong_link_cnt && tsk->group && @@ - > 1028,6 +1025,10 @@ static int tipc_send_group_bcast(struct socket *sock, > struct msghdr *m, > if (unlikely(rc)) > return rc; > > + dsts = tipc_group_dests(tsk->group); > + if (!dsts->local && !dsts->remote) > + return -EHOSTUNREACH; > + > /* Complete message header */ > if (dest) { > msg_set_type(hdr, TIPC_GRP_MCAST_MSG); > -- > 2.19.2