aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/msg.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/msg.c')
-rw-r--r--net/tipc/msg.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/net/tipc/msg.c b/net/tipc/msg.c
index 0c6dad8180a0..3bb499c61918 100644
--- a/net/tipc/msg.c
+++ b/net/tipc/msg.c
@@ -511,15 +511,18 @@ bool tipc_msg_lookup_dest(struct net *net, struct sk_buff *skb,
511{ 511{
512 struct tipc_msg *msg = buf_msg(skb); 512 struct tipc_msg *msg = buf_msg(skb);
513 u32 dport; 513 u32 dport;
514 u32 own_addr = tipc_own_addr(net);
514 515
515 if (!msg_isdata(msg)) 516 if (!msg_isdata(msg))
516 return false; 517 return false;
517 if (!msg_named(msg)) 518 if (!msg_named(msg))
518 return false; 519 return false;
520 if (msg_errcode(msg))
521 return false;
519 *err = -TIPC_ERR_NO_NAME; 522 *err = -TIPC_ERR_NO_NAME;
520 if (skb_linearize(skb)) 523 if (skb_linearize(skb))
521 return false; 524 return false;
522 if (msg_reroute_cnt(msg) > 0) 525 if (msg_reroute_cnt(msg))
523 return false; 526 return false;
524 *dnode = addr_domain(net, msg_lookup_scope(msg)); 527 *dnode = addr_domain(net, msg_lookup_scope(msg));
525 dport = tipc_nametbl_translate(net, msg_nametype(msg), 528 dport = tipc_nametbl_translate(net, msg_nametype(msg),
@@ -527,6 +530,8 @@ bool tipc_msg_lookup_dest(struct net *net, struct sk_buff *skb,
527 if (!dport) 530 if (!dport)
528 return false; 531 return false;
529 msg_incr_reroute_cnt(msg); 532 msg_incr_reroute_cnt(msg);
533 if (*dnode != own_addr)
534 msg_set_prevnode(msg, own_addr);
530 msg_set_destnode(msg, *dnode); 535 msg_set_destnode(msg, *dnode);
531 msg_set_destport(msg, dport); 536 msg_set_destport(msg, dport);
532 *err = TIPC_OK; 537 *err = TIPC_OK;