diff options
Diffstat (limited to 'net/tipc')
| -rw-r--r-- | net/tipc/Kconfig | 1 | ||||
| -rw-r--r-- | net/tipc/bearer.c | 2 | ||||
| -rw-r--r-- | net/tipc/crypto.c | 2 | ||||
| -rw-r--r-- | net/tipc/group.c | 2 | ||||
| -rw-r--r-- | net/tipc/link.c | 2 | ||||
| -rw-r--r-- | net/tipc/netlink_compat.c | 12 | ||||
| -rw-r--r-- | net/tipc/socket.c | 4 | ||||
| -rw-r--r-- | net/tipc/udp_media.c | 8 | 
8 files changed, 22 insertions, 11 deletions
diff --git a/net/tipc/Kconfig b/net/tipc/Kconfig index 9dd780215eef..be1c4003d67d 100644 --- a/net/tipc/Kconfig +++ b/net/tipc/Kconfig @@ -6,6 +6,7 @@  menuconfig TIPC  	tristate "The TIPC Protocol"  	depends on INET +	depends on IPV6 || IPV6=n  	help  	  The Transparent Inter Process Communication (TIPC) protocol is  	  specially designed for intra cluster communication. This protocol diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index 808b147df7d5..650414110452 100644 --- a/net/tipc/bearer.c +++ b/net/tipc/bearer.c @@ -652,7 +652,7 @@ static int tipc_l2_device_event(struct notifier_block *nb, unsigned long evt,  			test_and_set_bit_lock(0, &b->up);  			break;  		} -		/* fall through */ +		fallthrough;  	case NETDEV_GOING_DOWN:  		clear_bit_unlock(0, &b->up);  		tipc_reset_bearer(net, b); diff --git a/net/tipc/crypto.c b/net/tipc/crypto.c index 001bcb0f2480..c38babaa4e57 100644 --- a/net/tipc/crypto.c +++ b/net/tipc/crypto.c @@ -757,10 +757,12 @@ static void tipc_aead_encrypt_done(struct crypto_async_request *base, int err)  	switch (err) {  	case 0:  		this_cpu_inc(tx->stats->stat[STAT_ASYNC_OK]); +		rcu_read_lock();  		if (likely(test_bit(0, &b->up)))  			b->media->send_msg(net, skb, b, &tx_ctx->dst);  		else  			kfree_skb(skb); +		rcu_read_unlock();  		break;  	case -EINPROGRESS:  		return; diff --git a/net/tipc/group.c b/net/tipc/group.c index 89257e2a980d..588c2d2b0c69 100644 --- a/net/tipc/group.c +++ b/net/tipc/group.c @@ -536,7 +536,7 @@ void tipc_group_filter_msg(struct tipc_group *grp, struct sk_buff_head *inputq,  				update = true;  				deliver = false;  			} -			/* Fall thru */ +			fallthrough;  		case TIPC_GRP_BCAST_MSG:  			m->bc_rcv_nxt++;  			ack = msg_grp_bc_ack_req(hdr); diff --git a/net/tipc/link.c b/net/tipc/link.c index 107578122973..b7362556da95 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c @@ -1239,7 +1239,7 @@ static bool tipc_data_input(struct tipc_link *l, struct sk_buff *skb,  			skb_queue_tail(mc_inputq, skb);  			return true;  		} -		/* fall through */ +		fallthrough;  	case CONN_MANAGER:  		skb_queue_tail(inputq, skb);  		return true; diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c index 217516357ef2..90e3c70a91ad 100644 --- a/net/tipc/netlink_compat.c +++ b/net/tipc/netlink_compat.c @@ -275,8 +275,9 @@ err_out:  static int tipc_nl_compat_dumpit(struct tipc_nl_compat_cmd_dump *cmd,  				 struct tipc_nl_compat_msg *msg)  { -	int err; +	struct nlmsghdr *nlh;  	struct sk_buff *arg; +	int err;  	if (msg->req_type && (!msg->req_size ||  			      !TLV_CHECK_TYPE(msg->req, msg->req_type))) @@ -305,6 +306,15 @@ static int tipc_nl_compat_dumpit(struct tipc_nl_compat_cmd_dump *cmd,  		return -ENOMEM;  	} +	nlh = nlmsg_put(arg, 0, 0, tipc_genl_family.id, 0, NLM_F_MULTI); +	if (!nlh) { +		kfree_skb(arg); +		kfree_skb(msg->rep); +		msg->rep = NULL; +		return -EMSGSIZE; +	} +	nlmsg_end(arg, nlh); +  	err = __tipc_nl_compat_dumpit(cmd, msg, arg);  	if (err) {  		kfree_skb(msg->rep); diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 07419f36116a..2679e97e0389 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c @@ -783,7 +783,7 @@ static __poll_t tipc_poll(struct file *file, struct socket *sock,  	case TIPC_ESTABLISHED:  		if (!tsk->cong_link_cnt && !tsk_conn_cong(tsk))  			revents |= EPOLLOUT; -		/* fall through */ +		fallthrough;  	case TIPC_LISTEN:  	case TIPC_CONNECTING:  		if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) @@ -2597,7 +2597,7 @@ static int tipc_connect(struct socket *sock, struct sockaddr *dest,  		 * case is EINPROGRESS, rather than EALREADY.  		 */  		res = -EINPROGRESS; -		/* fall through */ +		fallthrough;  	case TIPC_CONNECTING:  		if (!timeout) {  			if (previous == TIPC_CONNECTING) diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c index 53f0de0676b7..911d13cd2e67 100644 --- a/net/tipc/udp_media.c +++ b/net/tipc/udp_media.c @@ -660,6 +660,7 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b,  	struct udp_tunnel_sock_cfg tuncfg = {NULL};  	struct nlattr *opts[TIPC_NLA_UDP_MAX + 1];  	u8 node_id[NODE_ID_LEN] = {0,}; +	struct net_device *dev;  	int rmcast = 0;  	ub = kzalloc(sizeof(*ub), GFP_ATOMIC); @@ -714,8 +715,6 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b,  	rcu_assign_pointer(ub->bearer, b);  	tipc_udp_media_addr_set(&b->addr, &local);  	if (local.proto == htons(ETH_P_IP)) { -		struct net_device *dev; -  		dev = __ip_dev_find(net, local.ipv4.s_addr, false);  		if (!dev) {  			err = -ENODEV; @@ -738,9 +737,8 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b,  		b->mtu = b->media->mtu;  #if IS_ENABLED(CONFIG_IPV6)  	} else if (local.proto == htons(ETH_P_IPV6)) { -		struct net_device *dev; - -		dev = ipv6_dev_find(net, &local.ipv6); +		dev = ub->ifindex ? __dev_get_by_index(net, ub->ifindex) : NULL; +		dev = ipv6_dev_find(net, &local.ipv6, dev);  		if (!dev) {  			err = -ENODEV;  			goto err;  |