On 4/28/20 4:58 PM, Tuong Lien wrote: > When an application connects to the TIPC topology server and subscribes > to some services, a new connection is created along with some objects - > 'tipc_subscription' to store related data correspondingly... > However, there is one omission in the connection handling that when the > connection or application is orderly shutdown (e.g. via SIGQUIT, etc.), > the connection is not closed in kernel, the 'tipc_subscription' objects > are not freed too. > This results in: > - The maximum number of subscriptions (65535) will be reached soon, new > subscriptions will be rejected; > - TIPC module cannot be removed (unless the objectes are somehow forced > to release first); > > The commit fixes the issue by closing the connection if the 'recvmsg()' > returns '0' i.e. when the peer is shutdown gracefully. It also includes > the other unexpected cases. > > Signed-off-by: Tuong Lien <tuong.t.l...@dektech.com.au>
Acked-by: Ying Xue <ying....@windriver.com> > --- > net/tipc/topsrv.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/net/tipc/topsrv.c b/net/tipc/topsrv.c > index ad78f7cff379..c364335623ab 100644 > --- a/net/tipc/topsrv.c > +++ b/net/tipc/topsrv.c > @@ -405,10 +405,11 @@ static int tipc_conn_rcv_from_sock(struct tipc_conn > *con) > read_lock_bh(&sk->sk_callback_lock); > ret = tipc_conn_rcv_sub(srv, con, &s); > read_unlock_bh(&sk->sk_callback_lock); > + if (!ret) > + return 0; > } > - if (ret < 0) > - tipc_conn_close(con); > > + tipc_conn_close(con); > return ret; > } > > _______________________________________________ tipc-discussion mailing list tipc-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tipc-discussion