diff options
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/msg.h | 10 | ||||
-rw-r--r-- | net/tipc/node.h | 12 | ||||
-rw-r--r-- | net/tipc/socket.c | 5 |
3 files changed, 22 insertions, 5 deletions
diff --git a/net/tipc/msg.h b/net/tipc/msg.h index a4e944d59394..cd64d7b2a0fe 100644 --- a/net/tipc/msg.h +++ b/net/tipc/msg.h | |||
@@ -216,6 +216,16 @@ static inline void msg_set_non_seq(struct tipc_msg *m, u32 n) | |||
216 | msg_set_bits(m, 0, 20, 1, n); | 216 | msg_set_bits(m, 0, 20, 1, n); |
217 | } | 217 | } |
218 | 218 | ||
219 | static inline int msg_is_syn(struct tipc_msg *m) | ||
220 | { | ||
221 | return msg_bits(m, 0, 17, 1); | ||
222 | } | ||
223 | |||
224 | static inline void msg_set_syn(struct tipc_msg *m, u32 d) | ||
225 | { | ||
226 | msg_set_bits(m, 0, 17, 1, d); | ||
227 | } | ||
228 | |||
219 | static inline int msg_dest_droppable(struct tipc_msg *m) | 229 | static inline int msg_dest_droppable(struct tipc_msg *m) |
220 | { | 230 | { |
221 | return msg_bits(m, 0, 19, 1); | 231 | return msg_bits(m, 0, 19, 1); |
diff --git a/net/tipc/node.h b/net/tipc/node.h index 48b3298a248d..03f5efb62cfb 100644 --- a/net/tipc/node.h +++ b/net/tipc/node.h | |||
@@ -45,6 +45,7 @@ | |||
45 | /* Optional capabilities supported by this code version | 45 | /* Optional capabilities supported by this code version |
46 | */ | 46 | */ |
47 | enum { | 47 | enum { |
48 | TIPC_SYN_BIT = (1), | ||
48 | TIPC_BCAST_SYNCH = (1 << 1), | 49 | TIPC_BCAST_SYNCH = (1 << 1), |
49 | TIPC_BCAST_STATE_NACK = (1 << 2), | 50 | TIPC_BCAST_STATE_NACK = (1 << 2), |
50 | TIPC_BLOCK_FLOWCTL = (1 << 3), | 51 | TIPC_BLOCK_FLOWCTL = (1 << 3), |
@@ -53,11 +54,12 @@ enum { | |||
53 | TIPC_LINK_PROTO_SEQNO = (1 << 6) | 54 | TIPC_LINK_PROTO_SEQNO = (1 << 6) |
54 | }; | 55 | }; |
55 | 56 | ||
56 | #define TIPC_NODE_CAPABILITIES (TIPC_BCAST_SYNCH | \ | 57 | #define TIPC_NODE_CAPABILITIES (TIPC_SYN_BIT | \ |
57 | TIPC_BCAST_STATE_NACK | \ | 58 | TIPC_BCAST_SYNCH | \ |
58 | TIPC_BCAST_RCAST | \ | 59 | TIPC_BCAST_STATE_NACK | \ |
59 | TIPC_BLOCK_FLOWCTL | \ | 60 | TIPC_BCAST_RCAST | \ |
60 | TIPC_NODE_ID128 | \ | 61 | TIPC_BLOCK_FLOWCTL | \ |
62 | TIPC_NODE_ID128 | \ | ||
61 | TIPC_LINK_PROTO_SEQNO) | 63 | TIPC_LINK_PROTO_SEQNO) |
62 | #define INVALID_BEARER_ID -1 | 64 | #define INVALID_BEARER_ID -1 |
63 | 65 | ||
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 094cfdc1e2b6..89d6dc0f456d 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -1319,6 +1319,7 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen) | |||
1319 | tsk->conn_type = dest->addr.name.name.type; | 1319 | tsk->conn_type = dest->addr.name.name.type; |
1320 | tsk->conn_instance = dest->addr.name.name.instance; | 1320 | tsk->conn_instance = dest->addr.name.name.instance; |
1321 | } | 1321 | } |
1322 | msg_set_syn(hdr, 1); | ||
1322 | } | 1323 | } |
1323 | 1324 | ||
1324 | seq = &dest->addr.nameseq; | 1325 | seq = &dest->addr.nameseq; |
@@ -1478,6 +1479,7 @@ static void tipc_sk_finish_conn(struct tipc_sock *tsk, u32 peer_port, | |||
1478 | struct net *net = sock_net(sk); | 1479 | struct net *net = sock_net(sk); |
1479 | struct tipc_msg *msg = &tsk->phdr; | 1480 | struct tipc_msg *msg = &tsk->phdr; |
1480 | 1481 | ||
1482 | msg_set_syn(msg, 0); | ||
1481 | msg_set_destnode(msg, peer_node); | 1483 | msg_set_destnode(msg, peer_node); |
1482 | msg_set_destport(msg, peer_port); | 1484 | msg_set_destport(msg, peer_port); |
1483 | msg_set_type(msg, TIPC_CONN_MSG); | 1485 | msg_set_type(msg, TIPC_CONN_MSG); |
@@ -2006,6 +2008,9 @@ static bool tipc_sk_filter_connect(struct tipc_sock *tsk, struct sk_buff *skb) | |||
2006 | return false; | 2008 | return false; |
2007 | case TIPC_LISTEN: | 2009 | case TIPC_LISTEN: |
2008 | /* Accept only SYN message */ | 2010 | /* Accept only SYN message */ |
2011 | if (!msg_is_syn(hdr) && | ||
2012 | tipc_node_get_capabilities(net, onode) & TIPC_SYN_BIT) | ||
2013 | return false; | ||
2009 | if (!con_msg && !err) | 2014 | if (!con_msg && !err) |
2010 | return true; | 2015 | return true; |
2011 | return false; | 2016 | return false; |