diff options
-rw-r--r-- | net/tipc/bcast.c | 5 | ||||
-rw-r--r-- | net/tipc/bcast.h | 2 | ||||
-rw-r--r-- | net/tipc/socket.c | 2 |
3 files changed, 6 insertions, 3 deletions
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c index 5264a8ff6e01..88edfb358ae7 100644 --- a/net/tipc/bcast.c +++ b/net/tipc/bcast.c | |||
@@ -760,7 +760,7 @@ u32 tipc_bcast_get_broadcast_ratio(struct net *net) | |||
760 | return bb->rc_ratio; | 760 | return bb->rc_ratio; |
761 | } | 761 | } |
762 | 762 | ||
763 | void tipc_mcast_filter_msg(struct sk_buff_head *defq, | 763 | void tipc_mcast_filter_msg(struct net *net, struct sk_buff_head *defq, |
764 | struct sk_buff_head *inputq) | 764 | struct sk_buff_head *inputq) |
765 | { | 765 | { |
766 | struct sk_buff *skb, *_skb, *tmp; | 766 | struct sk_buff *skb, *_skb, *tmp; |
@@ -775,6 +775,9 @@ void tipc_mcast_filter_msg(struct sk_buff_head *defq, | |||
775 | return; | 775 | return; |
776 | 776 | ||
777 | node = msg_orignode(hdr); | 777 | node = msg_orignode(hdr); |
778 | if (node == tipc_own_addr(net)) | ||
779 | return; | ||
780 | |||
778 | port = msg_origport(hdr); | 781 | port = msg_origport(hdr); |
779 | 782 | ||
780 | /* Has the twin SYN message already arrived ? */ | 783 | /* Has the twin SYN message already arrived ? */ |
diff --git a/net/tipc/bcast.h b/net/tipc/bcast.h index 484bde289d3a..dadad953e2be 100644 --- a/net/tipc/bcast.h +++ b/net/tipc/bcast.h | |||
@@ -101,7 +101,7 @@ int tipc_bclink_reset_stats(struct net *net); | |||
101 | u32 tipc_bcast_get_broadcast_mode(struct net *net); | 101 | u32 tipc_bcast_get_broadcast_mode(struct net *net); |
102 | u32 tipc_bcast_get_broadcast_ratio(struct net *net); | 102 | u32 tipc_bcast_get_broadcast_ratio(struct net *net); |
103 | 103 | ||
104 | void tipc_mcast_filter_msg(struct sk_buff_head *defq, | 104 | void tipc_mcast_filter_msg(struct net *net, struct sk_buff_head *defq, |
105 | struct sk_buff_head *inputq); | 105 | struct sk_buff_head *inputq); |
106 | 106 | ||
107 | static inline void tipc_bcast_lock(struct net *net) | 107 | static inline void tipc_bcast_lock(struct net *net) |
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index a7b3e1a070e4..8ac8ddf1e324 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -2166,7 +2166,7 @@ static void tipc_sk_filter_rcv(struct sock *sk, struct sk_buff *skb, | |||
2166 | tipc_group_filter_msg(grp, &inputq, xmitq); | 2166 | tipc_group_filter_msg(grp, &inputq, xmitq); |
2167 | 2167 | ||
2168 | if (unlikely(!grp) && mtyp == TIPC_MCAST_MSG) | 2168 | if (unlikely(!grp) && mtyp == TIPC_MCAST_MSG) |
2169 | tipc_mcast_filter_msg(&tsk->mc_method.deferredq, &inputq); | 2169 | tipc_mcast_filter_msg(net, &tsk->mc_method.deferredq, &inputq); |
2170 | 2170 | ||
2171 | /* Validate and add to receive buffer if there is space */ | 2171 | /* Validate and add to receive buffer if there is space */ |
2172 | while ((skb = __skb_dequeue(&inputq))) { | 2172 | while ((skb = __skb_dequeue(&inputq))) { |