]> git.baikalelectronics.ru Git - kernel.git/commit
tipc: fix failed service subscription deletion
authorTuong Lien <tuong.t.lien@dektech.com.au>
Wed, 13 May 2020 12:33:18 +0000 (19:33 +0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 13 May 2020 19:33:19 +0000 (12:33 -0700)
commit9a1bb50d7e71baba2084d042c57846e3c64f5779
tree8f13d79174ad684bf549f4beb3b4007bd5cf968e
parent9fa3e746866b6876fb8085db3200b107f293d12b
tipc: fix failed service subscription deletion

When a service subscription is expired or canceled by user, it needs to
be deleted from the subscription list, so that new subscriptions can be
registered (max = 65535 per net). However, there are two issues in code
that can cause such an unused subscription to persist:

1) The 'tipc_conn_delete_sub()' has a loop on the subscription list but
it makes a break shortly when the 1st subscription differs from the one
specified, so the subscription will not be deleted.

2) In case a subscription is canceled, the code to remove the
'TIPC_SUB_CANCEL' flag from the subscription filter does not work if it
is a local subscription (i.e. the little endian isn't involved). So, it
will be no matches when looking for the subscription to delete later.

The subscription(s) will be removed eventually when the user terminates
its topology connection but that could be a long time later. Meanwhile,
the number of available subscriptions may be exhausted.

This commit fixes the two issues above, so as needed a subscription can
be deleted correctly.

Acked-by: Ying Xue <ying.xue@windriver.com>
Acked-by: Jon Maloy <jmaloy@redhat.com>
Signed-off-by: Tuong Lien <tuong.t.lien@dektech.com.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/subscr.h
net/tipc/topsrv.c