• Tuong Lien's avatar
    tipc: fix partial topology connection closure · 980d6927
    Tuong Lien authored
    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 objects  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.
    Acked-by: default avatarJon Maloy <jmaloy@redhat.com>
    Acked-by: default avatarYing Xue <ying.xue@windriver.com>
    Signed-off-by: default avatarTuong Lien <tuong.t.lien@dektech.com.au>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    980d6927
topsrv.c 18.2 KB