Re: [tipc-discussion] [net] tipc: fix partial topology connection closure
On 4/28/20 4:58 AM, 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 --- 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_callback_lock); ret = tipc_conn_rcv_sub(srv, con, ); read_unlock_bh(>sk_callback_lock); + if (!ret) + return 0; } - if (ret < 0) - tipc_conn_close(con); + tipc_conn_close(con); return ret; } Acked-by: Jon Maloy ___ tipc-discussion mailing list tipc-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tipc-discussion
Re: [tipc-discussion] [net] tipc: fix partial topology connection closure
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 Acked-by: Ying Xue > --- > 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_callback_lock); > ret = tipc_conn_rcv_sub(srv, con, ); > read_unlock_bh(>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