aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/subscr.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/subscr.c')
-rw-r--r--net/tipc/subscr.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
index ab6eab4c45e2..ff123e56114a 100644
--- a/net/tipc/subscr.c
+++ b/net/tipc/subscr.c
@@ -274,7 +274,7 @@ static void subscr_cancel(struct tipc_subscr *s,
274{ 274{
275 struct subscription *sub; 275 struct subscription *sub;
276 struct subscription *sub_temp; 276 struct subscription *sub_temp;
277 __u32 type, lower, upper, timeout, filter; 277 __u32 type, lower, upper;
278 int found = 0; 278 int found = 0;
279 279
280 /* Find first matching subscription, exit if not found */ 280 /* Find first matching subscription, exit if not found */
@@ -282,18 +282,12 @@ static void subscr_cancel(struct tipc_subscr *s,
282 type = ntohl(s->seq.type); 282 type = ntohl(s->seq.type);
283 lower = ntohl(s->seq.lower); 283 lower = ntohl(s->seq.lower);
284 upper = ntohl(s->seq.upper); 284 upper = ntohl(s->seq.upper);
285 timeout = ntohl(s->timeout);
286 filter = ntohl(s->filter) & ~TIPC_SUB_CANCEL;
287 285
288 list_for_each_entry_safe(sub, sub_temp, &subscriber->subscription_list, 286 list_for_each_entry_safe(sub, sub_temp, &subscriber->subscription_list,
289 subscription_list) { 287 subscription_list) {
290 if ((type == sub->seq.type) && 288 if ((type == sub->seq.type) &&
291 (lower == sub->seq.lower) && 289 (lower == sub->seq.lower) &&
292 (upper == sub->seq.upper) && 290 (upper == sub->seq.upper)) {
293 (timeout == sub->timeout) &&
294 (filter == sub->filter) &&
295 !memcmp(s->usr_handle,sub->evt.s.usr_handle,
296 sizeof(s->usr_handle)) ){
297 found = 1; 291 found = 1;
298 break; 292 break;
299 } 293 }
@@ -310,7 +304,7 @@ static void subscr_cancel(struct tipc_subscr *s,
310 k_term_timer(&sub->timer); 304 k_term_timer(&sub->timer);
311 spin_lock_bh(subscriber->lock); 305 spin_lock_bh(subscriber->lock);
312 } 306 }
313 dbg("Cancel: removing sub %u,%u,%u from subscriber %p list\n", 307 dbg("Cancel: removing sub %u,%u,%u from subscriber %x list\n",
314 sub->seq.type, sub->seq.lower, sub->seq.upper, subscriber); 308 sub->seq.type, sub->seq.lower, sub->seq.upper, subscriber);
315 subscr_del(sub); 309 subscr_del(sub);
316} 310}
@@ -358,7 +352,8 @@ static struct subscription *subscr_subscribe(struct tipc_subscr *s,
358 sub->seq.upper = ntohl(s->seq.upper); 352 sub->seq.upper = ntohl(s->seq.upper);
359 sub->timeout = ntohl(s->timeout); 353 sub->timeout = ntohl(s->timeout);
360 sub->filter = ntohl(s->filter); 354 sub->filter = ntohl(s->filter);
361 if ((sub->filter && (sub->filter != TIPC_SUB_PORTS)) || 355 if ((!(sub->filter & TIPC_SUB_PORTS) ==
356 !(sub->filter & TIPC_SUB_SERVICE)) ||
362 (sub->seq.lower > sub->seq.upper)) { 357 (sub->seq.lower > sub->seq.upper)) {
363 warn("Subscription rejected, illegal request\n"); 358 warn("Subscription rejected, illegal request\n");
364 kfree(sub); 359 kfree(sub);