On 12/21/2016 09:40 PM, Jon Maloy wrote:
> In commit 6f00089c7372 ("tipc: remove SS_DISCONNECTING state") the
> check for socket type is in the wrong place, causing a closing socket
> to always send out a FIN message even when the socket was never
> connected. This is normally harmless, since the destination node for
> such messages most often is zero, and the message will be dropped, but
> it is still a wrong and confusing behavior.
>
> We fix this in this commit.
>
Shouldn't this be sent to "net" instead as we are in merge window and
let this be applied early?
Please add fixes tag:
Fixes: 6f00089c7372 ("tipc: remove SS_DISCONNECTING state")
> Signed-off-by: Jon Maloy <[email protected]>
Reviewed-by: Parthasarathy Bhuvaragan
<[email protected]>
/Partha
> ---
> net/tipc/socket.c | 24 +++++++++++++-----------
> 1 file changed, 13 insertions(+), 11 deletions(-)
>
> diff --git a/net/tipc/socket.c b/net/tipc/socket.c
> index 333c5da..800caaa 100644
> --- a/net/tipc/socket.c
> +++ b/net/tipc/socket.c
> @@ -441,15 +441,19 @@ static void __tipc_shutdown(struct socket *sock, int
> error)
> while ((skb = __skb_dequeue(&sk->sk_receive_queue)) != NULL) {
> if (TIPC_SKB_CB(skb)->bytes_read) {
> kfree_skb(skb);
> - } else {
> - if (!tipc_sk_type_connectionless(sk) &&
> - sk->sk_state != TIPC_DISCONNECTING) {
> - tipc_set_sk_state(sk, TIPC_DISCONNECTING);
> - tipc_node_remove_conn(net, dnode, tsk->portid);
> - }
> - tipc_sk_respond(sk, skb, error);
> + continue;
> + }
> + if (!tipc_sk_type_connectionless(sk) &&
> + sk->sk_state != TIPC_DISCONNECTING) {
> + tipc_set_sk_state(sk, TIPC_DISCONNECTING);
> + tipc_node_remove_conn(net, dnode, tsk->portid);
> }
> + tipc_sk_respond(sk, skb, error);
> }
> +
> + if (tipc_sk_type_connectionless(sk))
> + return;
> +
> if (sk->sk_state != TIPC_DISCONNECTING) {
> skb = tipc_msg_create(TIPC_CRITICAL_IMPORTANCE,
> TIPC_CONN_MSG, SHORT_H_SIZE, 0, dnode,
> @@ -457,10 +461,8 @@ static void __tipc_shutdown(struct socket *sock, int
> error)
> tsk->portid, error);
> if (skb)
> tipc_node_xmit_skb(net, skb, dnode, tsk->portid);
> - if (!tipc_sk_type_connectionless(sk)) {
> - tipc_node_remove_conn(net, dnode, tsk->portid);
> - tipc_set_sk_state(sk, TIPC_DISCONNECTING);
> - }
> + tipc_node_remove_conn(net, dnode, tsk->portid);
> + tipc_set_sk_state(sk, TIPC_DISCONNECTING);
> }
> }
>
>
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today.http://sdm.link/intel
_______________________________________________
tipc-discussion mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tipc-discussion