aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/msg.h10
-rw-r--r--net/tipc/node.h12
-rw-r--r--net/tipc/socket.c5
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
219static inline int msg_is_syn(struct tipc_msg *m)
220{
221 return msg_bits(m, 0, 17, 1);
222}
223
224static inline void msg_set_syn(struct tipc_msg *m, u32 d)
225{
226 msg_set_bits(m, 0, 17, 1, d);
227}
228
219static inline int msg_dest_droppable(struct tipc_msg *m) 229static 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 */
47enum { 47enum {
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;