diff options
Diffstat (limited to 'net/tipc')
| -rw-r--r-- | net/tipc/monitor.c | 3 | ||||
| -rw-r--r-- | net/tipc/socket.c | 3 | ||||
| -rw-r--r-- | net/tipc/udp_media.c | 5 | 
3 files changed, 8 insertions, 3 deletions
| diff --git a/net/tipc/monitor.c b/net/tipc/monitor.c index b62caa1c770c..ed97a5876ebe 100644 --- a/net/tipc/monitor.c +++ b/net/tipc/monitor.c @@ -728,12 +728,13 @@ int tipc_nl_add_monitor_peer(struct net *net, struct tipc_nl_msg *msg,  			     u32 bearer_id, u32 *prev_node)  {  	struct tipc_monitor *mon = tipc_monitor(net, bearer_id); -	struct tipc_peer *peer = mon->self; +	struct tipc_peer *peer;  	if (!mon)  		return -EINVAL;  	read_lock_bh(&mon->lock); +	peer = mon->self;  	do {  		if (*prev_node) {  			if (peer->addr == *prev_node) diff --git a/net/tipc/socket.c b/net/tipc/socket.c index c49b8df438cb..f9f5f3c3dab5 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c @@ -2180,7 +2180,8 @@ restart:  					      TIPC_CONN_MSG, SHORT_H_SIZE,  					      0, dnode, onode, dport, oport,  					      TIPC_CONN_SHUTDOWN); -			tipc_node_xmit_skb(net, skb, dnode, tsk->portid); +			if (skb) +				tipc_node_xmit_skb(net, skb, dnode, tsk->portid);  		}  		tsk->connected = 0;  		sock->state = SS_DISCONNECTING; diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c index b016c011970b..ae7e14cae085 100644 --- a/net/tipc/udp_media.c +++ b/net/tipc/udp_media.c @@ -396,10 +396,13 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b,  	tuncfg.encap_destroy = NULL;  	setup_udp_tunnel_sock(net, ub->ubsock, &tuncfg); -	if (enable_mcast(ub, remote)) +	err = enable_mcast(ub, remote); +	if (err)  		goto err;  	return 0;  err: +	if (ub->ubsock) +		udp_tunnel_sock_release(ub->ubsock);  	kfree(ub);  	return err;  } |