|
@@ -1319,6 +1319,7 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen)
|
|
|
tsk->conn_type = dest->addr.name.name.type;
|
|
|
tsk->conn_instance = dest->addr.name.name.instance;
|
|
|
}
|
|
|
+ msg_set_syn(hdr, 1);
|
|
|
}
|
|
|
|
|
|
seq = &dest->addr.nameseq;
|
|
@@ -1478,6 +1479,7 @@ static void tipc_sk_finish_conn(struct tipc_sock *tsk, u32 peer_port,
|
|
|
struct net *net = sock_net(sk);
|
|
|
struct tipc_msg *msg = &tsk->phdr;
|
|
|
|
|
|
+ msg_set_syn(msg, 0);
|
|
|
msg_set_destnode(msg, peer_node);
|
|
|
msg_set_destport(msg, peer_port);
|
|
|
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)
|
|
|
return false;
|
|
|
case TIPC_LISTEN:
|
|
|
/* Accept only SYN message */
|
|
|
+ if (!msg_is_syn(hdr) &&
|
|
|
+ tipc_node_get_capabilities(net, onode) & TIPC_SYN_BIT)
|
|
|
+ return false;
|
|
|
if (!con_msg && !err)
|
|
|
return true;
|
|
|
return false;
|