diff mbox

[v2] tipc: don't reject messages if reversal fails

Message ID 1428667098-9504-1-git-send-email-erik.hugne@ericsson.com
State Rejected, archived
Delegated to: David Miller
Headers show

Commit Message

Erik Hugne April 10, 2015, 11:58 a.m. UTC
From: Erik Hugne <erik.hugne@ericsson.com>

When we fail to deliver a message to a socket, it is subject to
message reversal. If the call to tipc_msg_reverse fails, we are
passing dnode uninitialized to tipc_link_xmit_skb which causes the
packet to either be dropped, or sent out to a random link. In the
worst case this leads to a link reset.
We fix this by only transmitting the message if reversal succeded.
Also, the redundant check for 'err' is removed, because if the message
was not consumed, it will always be set.

Signed-off-by: Erik Hugne <erik.hugne@ericsson.com>
---
v2: err check fix according to comments from Billie Alsup

 net/tipc/socket.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Erik Hugne April 10, 2015, 12:15 p.m. UTC | #1
Please ignore this, i meant to send it only to tipc-discussion for review first..

//E

On Fri, Apr 10, 2015 at 01:58:18PM +0200, erik.hugne@ericsson.com wrote:
> From: Erik Hugne <erik.hugne@ericsson.com>
> 
> When we fail to deliver a message to a socket, it is subject to
> message reversal. If the call to tipc_msg_reverse fails, we are
> passing dnode uninitialized to tipc_link_xmit_skb which causes the
> packet to either be dropped, or sent out to a random link. In the
> worst case this leads to a link reset.
> We fix this by only transmitting the message if reversal succeded.
> Also, the redundant check for 'err' is removed, because if the message
> was not consumed, it will always be set.
> 
> Signed-off-by: Erik Hugne <erik.hugne@ericsson.com>
> ---
> v2: err check fix according to comments from Billie Alsup
> 
>  net/tipc/socket.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/net/tipc/socket.c b/net/tipc/socket.c
> index ee90d74..d215f73 100644
> --- a/net/tipc/socket.c
> +++ b/net/tipc/socket.c
> @@ -1701,7 +1701,7 @@ static int tipc_backlog_rcv(struct sock *sk, struct sk_buff *skb)
>  			atomic_add(truesize, dcnt);
>  		return 0;
>  	}
> -	if (!err || tipc_msg_reverse(tsk_own_node(tsk), skb, &dnode, -err))
> +	if (tipc_msg_reverse(tsk_own_node(tsk), skb, &dnode, -err))
>  		tipc_link_xmit_skb(net, skb, dnode, tsk->portid);
>  	return 0;
>  }
> -- 
> 2.1.4
> 
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index ee90d74..d215f73 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -1701,7 +1701,7 @@  static int tipc_backlog_rcv(struct sock *sk, struct sk_buff *skb)
 			atomic_add(truesize, dcnt);
 		return 0;
 	}
-	if (!err || tipc_msg_reverse(tsk_own_node(tsk), skb, &dnode, -err))
+	if (tipc_msg_reverse(tsk_own_node(tsk), skb, &dnode, -err))
 		tipc_link_xmit_skb(net, skb, dnode, tsk->portid);
 	return 0;
 }