diff options
author | Jon Maloy <jon.maloy@ericsson.com> | 2018-09-28 14:23:21 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-09-29 14:24:22 -0400 |
commit | 25b9221b959483f17c2964d0922869e16caa86b5 (patch) | |
tree | efe153ded226c9b0046ff7612fa90fb0883e93b2 /net/tipc/socket.c | |
parent | 39fdc9c71f652cdf056ec3341581bde805444b57 (diff) |
tipc: add SYN bit to connection setup messages
Messages intended for intitating a connection are currently
indistinguishable from regular datagram messages. The TIPC
protocol specification defines bit 17 in word 0 as a SYN bit
to allow sanity check of such messages in the listening socket,
but this has so far never been implemented.
We do that in this commit.
Acked-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/socket.c')
-rw-r--r-- | net/tipc/socket.c | 5 |
1 files changed, 5 insertions, 0 deletions
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; |