Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 444653f6 authored by David S. Miller's avatar David S. Miller
Browse files

genetlink: Stop using NLA_PUT*().



These macros contain a hidden goto, and are thus extremely error
prone and make code hard to audit.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1e6428d8
Loading
Loading
Loading
Loading
+20 −15
Original line number Original line Diff line number Diff line
@@ -635,11 +635,12 @@ static int ctrl_fill_info(struct genl_family *family, u32 pid, u32 seq,
	if (hdr == NULL)
	if (hdr == NULL)
		return -1;
		return -1;


	NLA_PUT_STRING(skb, CTRL_ATTR_FAMILY_NAME, family->name);
	if (nla_put_string(skb, CTRL_ATTR_FAMILY_NAME, family->name) ||
	NLA_PUT_U16(skb, CTRL_ATTR_FAMILY_ID, family->id);
	    nla_put_u16(skb, CTRL_ATTR_FAMILY_ID, family->id) ||
	NLA_PUT_U32(skb, CTRL_ATTR_VERSION, family->version);
	    nla_put_u32(skb, CTRL_ATTR_VERSION, family->version) ||
	NLA_PUT_U32(skb, CTRL_ATTR_HDRSIZE, family->hdrsize);
	    nla_put_u32(skb, CTRL_ATTR_HDRSIZE, family->hdrsize) ||
	NLA_PUT_U32(skb, CTRL_ATTR_MAXATTR, family->maxattr);
	    nla_put_u32(skb, CTRL_ATTR_MAXATTR, family->maxattr))
		goto nla_put_failure;


	if (!list_empty(&family->ops_list)) {
	if (!list_empty(&family->ops_list)) {
		struct nlattr *nla_ops;
		struct nlattr *nla_ops;
@@ -657,8 +658,9 @@ static int ctrl_fill_info(struct genl_family *family, u32 pid, u32 seq,
			if (nest == NULL)
			if (nest == NULL)
				goto nla_put_failure;
				goto nla_put_failure;


			NLA_PUT_U32(skb, CTRL_ATTR_OP_ID, ops->cmd);
			if (nla_put_u32(skb, CTRL_ATTR_OP_ID, ops->cmd) ||
			NLA_PUT_U32(skb, CTRL_ATTR_OP_FLAGS, ops->flags);
			    nla_put_u32(skb, CTRL_ATTR_OP_FLAGS, ops->flags))
				goto nla_put_failure;


			nla_nest_end(skb, nest);
			nla_nest_end(skb, nest);
		}
		}
@@ -682,9 +684,10 @@ static int ctrl_fill_info(struct genl_family *family, u32 pid, u32 seq,
			if (nest == NULL)
			if (nest == NULL)
				goto nla_put_failure;
				goto nla_put_failure;


			NLA_PUT_U32(skb, CTRL_ATTR_MCAST_GRP_ID, grp->id);
			if (nla_put_u32(skb, CTRL_ATTR_MCAST_GRP_ID, grp->id) ||
			NLA_PUT_STRING(skb, CTRL_ATTR_MCAST_GRP_NAME,
			    nla_put_string(skb, CTRL_ATTR_MCAST_GRP_NAME,
				       grp->name);
					   grp->name))
				goto nla_put_failure;


			nla_nest_end(skb, nest);
			nla_nest_end(skb, nest);
		}
		}
@@ -710,8 +713,9 @@ static int ctrl_fill_mcgrp_info(struct genl_multicast_group *grp, u32 pid,
	if (hdr == NULL)
	if (hdr == NULL)
		return -1;
		return -1;


	NLA_PUT_STRING(skb, CTRL_ATTR_FAMILY_NAME, grp->family->name);
	if (nla_put_string(skb, CTRL_ATTR_FAMILY_NAME, grp->family->name) ||
	NLA_PUT_U16(skb, CTRL_ATTR_FAMILY_ID, grp->family->id);
	    nla_put_u16(skb, CTRL_ATTR_FAMILY_ID, grp->family->id))
		goto nla_put_failure;


	nla_grps = nla_nest_start(skb, CTRL_ATTR_MCAST_GROUPS);
	nla_grps = nla_nest_start(skb, CTRL_ATTR_MCAST_GROUPS);
	if (nla_grps == NULL)
	if (nla_grps == NULL)
@@ -721,9 +725,10 @@ static int ctrl_fill_mcgrp_info(struct genl_multicast_group *grp, u32 pid,
	if (nest == NULL)
	if (nest == NULL)
		goto nla_put_failure;
		goto nla_put_failure;


	NLA_PUT_U32(skb, CTRL_ATTR_MCAST_GRP_ID, grp->id);
	if (nla_put_u32(skb, CTRL_ATTR_MCAST_GRP_ID, grp->id) ||
	NLA_PUT_STRING(skb, CTRL_ATTR_MCAST_GRP_NAME,
	    nla_put_string(skb, CTRL_ATTR_MCAST_GRP_NAME,
		       grp->name);
			   grp->name))
		goto nla_put_failure;


	nla_nest_end(skb, nest);
	nla_nest_end(skb, nest);
	nla_nest_end(skb, nla_grps);
	nla_nest_end(skb, nla_grps);