Commit 4d5cfcba2f6ec494d8810b9e3c0a7b06255c8067

Authored by Parthasarathy Bhuvaragan
Committed by David S. Miller
1 parent 286af315d3

tipc: fix connection abort during subscription cancel

In 'commit 7fe8097cef5f ("tipc: fix nullpointer bug when subscribing
to events")', we terminate the connection if the subscription
creation fails.
In the same commit, the subscription creation result was based on
the value of the subscription pointer (set in the function) instead
of the return code.

Unfortunately, the same function tipc_subscrp_create() handles
subscription cancel request. For a subscription cancellation request,
the subscription pointer cannot be set. Thus if a subscriber has
several subscriptions and cancels any of them, the connection is
terminated.

In this commit, we terminate the connection based on the return value
of tipc_subscrp_create().
Fixes: commit 7fe8097cef5f ("tipc: fix nullpointer bug when subscribing to events")

Reviewed-by:  Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: Parthasarathy Bhuvaragan <parthasarathy.bhuvaragan@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 1 changed file with 5 additions and 6 deletions Side-by-side Diff

... ... @@ -289,15 +289,14 @@
289 289 struct sockaddr_tipc *addr, void *usr_data,
290 290 void *buf, size_t len)
291 291 {
292   - struct tipc_subscriber *subscriber = usr_data;
  292 + struct tipc_subscriber *subscrb = usr_data;
293 293 struct tipc_subscription *sub = NULL;
294 294 struct tipc_net *tn = net_generic(net, tipc_net_id);
295 295  
296   - tipc_subscrp_create(net, (struct tipc_subscr *)buf, subscriber, &sub);
297   - if (sub)
298   - tipc_nametbl_subscribe(sub);
299   - else
300   - tipc_conn_terminate(tn->topsrv, subscriber->conid);
  296 + if (tipc_subscrp_create(net, (struct tipc_subscr *)buf, subscrb, &sub))
  297 + return tipc_conn_terminate(tn->topsrv, subscrb->conid);
  298 +
  299 + tipc_nametbl_subscribe(sub);
301 300 }
302 301  
303 302 /* Handle one request to establish a new subscriber */