diff options
Diffstat (limited to 'net/tipc/netlink.c')
| -rw-r--r-- | net/tipc/netlink.c | 31 | 
1 files changed, 12 insertions, 19 deletions
diff --git a/net/tipc/netlink.c b/net/tipc/netlink.c index 7bda8e3d139..ad844d36534 100644 --- a/net/tipc/netlink.c +++ b/net/tipc/netlink.c @@ -44,17 +44,17 @@ static int handle_cmd(struct sk_buff *skb, struct genl_info *info)  	struct nlmsghdr *rep_nlh;  	struct nlmsghdr *req_nlh = info->nlhdr;  	struct tipc_genlmsghdr *req_userhdr = info->userhdr; -	int hdr_space = NLMSG_SPACE(GENL_HDRLEN + TIPC_GENL_HDRLEN); +	int hdr_space = nlmsg_total_size(GENL_HDRLEN + TIPC_GENL_HDRLEN);  	u16 cmd; -	if ((req_userhdr->cmd & 0xC000) && (!capable(CAP_NET_ADMIN))) +	if ((req_userhdr->cmd & 0xC000) && (!netlink_capable(skb, CAP_NET_ADMIN)))  		cmd = TIPC_CMD_NOT_NET_ADMIN;  	else  		cmd = req_userhdr->cmd;  	rep_buf = tipc_cfg_do_cmd(req_userhdr->dest, cmd, -			NLMSG_DATA(req_nlh) + GENL_HDRLEN + TIPC_GENL_HDRLEN, -			NLMSG_PAYLOAD(req_nlh, GENL_HDRLEN + TIPC_GENL_HDRLEN), +			nlmsg_data(req_nlh) + GENL_HDRLEN + TIPC_GENL_HDRLEN, +			nlmsg_attrlen(req_nlh, GENL_HDRLEN + TIPC_GENL_HDRLEN),  			hdr_space);  	if (rep_buf) { @@ -62,7 +62,7 @@ static int handle_cmd(struct sk_buff *skb, struct genl_info *info)  		rep_nlh = nlmsg_hdr(rep_buf);  		memcpy(rep_nlh, req_nlh, hdr_space);  		rep_nlh->nlmsg_len = rep_buf->len; -		genlmsg_unicast(&init_net, rep_buf, NETLINK_CB(skb).pid); +		genlmsg_unicast(&init_net, rep_buf, NETLINK_CB(skb).portid);  	}  	return 0; @@ -76,33 +76,26 @@ static struct genl_family tipc_genl_family = {  	.maxattr	= 0,  }; -static struct genl_ops tipc_genl_ops = { -	.cmd		= TIPC_GENL_CMD, -	.doit		= handle_cmd, +static struct genl_ops tipc_genl_ops[] = { +	{ +		.cmd		= TIPC_GENL_CMD, +		.doit		= handle_cmd, +	},  }; -static int tipc_genl_family_registered; -  int tipc_netlink_start(void)  {  	int res; -	res = genl_register_family_with_ops(&tipc_genl_family, -		&tipc_genl_ops, 1); +	res = genl_register_family_with_ops(&tipc_genl_family, tipc_genl_ops);  	if (res) { -		err("Failed to register netlink interface\n"); +		pr_err("Failed to register netlink interface\n");  		return res;  	} - -	tipc_genl_family_registered = 1;  	return 0;  }  void tipc_netlink_stop(void)  { -	if (!tipc_genl_family_registered) -		return; -  	genl_unregister_family(&tipc_genl_family); -	tipc_genl_family_registered = 0;  }  | 
