tipc: involve reference counter for subscriber
authorYing Xue <ying.xue@windriver.com>
Mon, 4 May 2015 02:36:46 +0000 (10:36 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 4 May 2015 19:04:01 +0000 (15:04 -0400)
commit00bc00a9384c306cdd48611a53b955d936349bf6
treeb6e9a41331a0fa5b401fd6c3727ed11bf065b0fc
parent1b764828add9feaa18a8f916a79b954ac8a20a73
tipc: involve reference counter for subscriber

At present subscriber's lock is used to protect the subscription list
of subscriber as well as subscriptions linked into the list. While one
or all subscriptions are deleted through iterating the list, the
subscriber's lock must be held. Meanwhile, as deletion of subscription
may happen in subscription timer's handler, the lock must be grabbed
in the function as well. When subscription's timer is terminated with
del_timer_sync() during above iteration, subscriber's lock has to be
temporarily released, otherwise, deadlock may occur. However, the
temporary release may cause the double free of a subscription as the
subscription is not disconnected from the subscription list.

Now if a reference counter is introduced to subscriber, subscription's
timer can be asynchronously stopped with del_timer(). As a result, the
issue is not only able to be fixed, but also relevant code is pretty
readable and understandable.

Signed-off-by: Ying Xue <ying.xue@windriver.com>
Reviewed-by: Jon Maloy <jon.maloy@ericson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/subscr.c