| From foo@baz Fri Nov 7 11:36:50 PST 2014 |
| From: Jon Paul Maloy <jon.maloy@ericsson.com> |
| Date: Fri, 17 Oct 2014 15:25:28 -0400 |
| Subject: tipc: fix bug in bundled buffer reception |
| |
| From: Jon Paul Maloy <jon.maloy@ericsson.com> |
| |
| [ Upstream commit 643566d4b47e2956110e79c0e6f65db9b9ea42c6 ] |
| |
| In commit ec8a2e5621db2da24badb3969eda7fd359e1869f ("tipc: same receive |
| code path for connection protocol and data messages") we omitted the |
| the possiblilty that an arriving message extracted from a bundle buffer |
| may be a multicast message. Such messages need to be to be delivered to |
| the socket via a separate function, tipc_sk_mcast_rcv(). As a result, |
| small multicast messages arriving as members of a bundle buffer will be |
| silently dropped. |
| |
| This commit corrects the error by considering this case in the function |
| tipc_link_bundle_rcv(). |
| |
| Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/tipc/link.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/net/tipc/link.c |
| +++ b/net/tipc/link.c |
| @@ -1936,7 +1936,12 @@ void tipc_link_bundle_rcv(struct sk_buff |
| } |
| omsg = buf_msg(obuf); |
| pos += align(msg_size(omsg)); |
| - if (msg_isdata(omsg) || (msg_user(omsg) == CONN_MANAGER)) { |
| + if (msg_isdata(omsg)) { |
| + if (unlikely(msg_type(omsg) == TIPC_MCAST_MSG)) |
| + tipc_sk_mcast_rcv(obuf); |
| + else |
| + tipc_sk_rcv(obuf); |
| + } else if (msg_user(omsg) == CONN_MANAGER) { |
| tipc_sk_rcv(obuf); |
| } else if (msg_user(omsg) == NAME_DISTRIBUTOR) { |
| tipc_named_rcv(obuf); |