mirror of https://gitee.com/openkylin/linux.git
team: 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: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ead9a76cee
commit
86ebb02dc7
|
@ -1248,7 +1248,8 @@ static int team_nl_fill_options_get(struct sk_buff *skb,
|
|||
if (IS_ERR(hdr))
|
||||
return PTR_ERR(hdr);
|
||||
|
||||
NLA_PUT_U32(skb, TEAM_ATTR_TEAM_IFINDEX, team->dev->ifindex);
|
||||
if (nla_put_u32(skb, TEAM_ATTR_TEAM_IFINDEX, team->dev->ifindex))
|
||||
goto nla_put_failure;
|
||||
option_list = nla_nest_start(skb, TEAM_ATTR_LIST_OPTION);
|
||||
if (!option_list)
|
||||
return -EMSGSIZE;
|
||||
|
@ -1263,24 +1264,31 @@ static int team_nl_fill_options_get(struct sk_buff *skb,
|
|||
option_item = nla_nest_start(skb, TEAM_ATTR_ITEM_OPTION);
|
||||
if (!option_item)
|
||||
goto nla_put_failure;
|
||||
NLA_PUT_STRING(skb, TEAM_ATTR_OPTION_NAME, option->name);
|
||||
if (nla_put_string(skb, TEAM_ATTR_OPTION_NAME, option->name))
|
||||
goto nla_put_failure;
|
||||
if (option->changed) {
|
||||
NLA_PUT_FLAG(skb, TEAM_ATTR_OPTION_CHANGED);
|
||||
if (nla_put_flag(skb, TEAM_ATTR_OPTION_CHANGED))
|
||||
goto nla_put_failure;
|
||||
option->changed = false;
|
||||
}
|
||||
if (option->removed)
|
||||
NLA_PUT_FLAG(skb, TEAM_ATTR_OPTION_REMOVED);
|
||||
if (option->removed &&
|
||||
nla_put_flag(skb, TEAM_ATTR_OPTION_REMOVED))
|
||||
goto nla_put_failure;
|
||||
switch (option->type) {
|
||||
case TEAM_OPTION_TYPE_U32:
|
||||
NLA_PUT_U8(skb, TEAM_ATTR_OPTION_TYPE, NLA_U32);
|
||||
if (nla_put_u8(skb, TEAM_ATTR_OPTION_TYPE, NLA_U32))
|
||||
goto nla_put_failure;
|
||||
team_option_get(team, option, &arg);
|
||||
NLA_PUT_U32(skb, TEAM_ATTR_OPTION_DATA, arg);
|
||||
if (nla_put_u32(skb, TEAM_ATTR_OPTION_DATA, arg))
|
||||
goto nla_put_failure;
|
||||
break;
|
||||
case TEAM_OPTION_TYPE_STRING:
|
||||
NLA_PUT_U8(skb, TEAM_ATTR_OPTION_TYPE, NLA_STRING);
|
||||
if (nla_put_u8(skb, TEAM_ATTR_OPTION_TYPE, NLA_STRING))
|
||||
goto nla_put_failure;
|
||||
team_option_get(team, option, &arg);
|
||||
NLA_PUT_STRING(skb, TEAM_ATTR_OPTION_DATA,
|
||||
(char *) arg);
|
||||
if (nla_put_string(skb, TEAM_ATTR_OPTION_DATA,
|
||||
(char *) arg))
|
||||
goto nla_put_failure;
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
|
@ -1420,7 +1428,8 @@ static int team_nl_fill_port_list_get(struct sk_buff *skb,
|
|||
if (IS_ERR(hdr))
|
||||
return PTR_ERR(hdr);
|
||||
|
||||
NLA_PUT_U32(skb, TEAM_ATTR_TEAM_IFINDEX, team->dev->ifindex);
|
||||
if (nla_put_u32(skb, TEAM_ATTR_TEAM_IFINDEX, team->dev->ifindex))
|
||||
goto nla_put_failure;
|
||||
port_list = nla_nest_start(skb, TEAM_ATTR_LIST_PORT);
|
||||
if (!port_list)
|
||||
return -EMSGSIZE;
|
||||
|
@ -1434,17 +1443,20 @@ static int team_nl_fill_port_list_get(struct sk_buff *skb,
|
|||
port_item = nla_nest_start(skb, TEAM_ATTR_ITEM_PORT);
|
||||
if (!port_item)
|
||||
goto nla_put_failure;
|
||||
NLA_PUT_U32(skb, TEAM_ATTR_PORT_IFINDEX, port->dev->ifindex);
|
||||
if (nla_put_u32(skb, TEAM_ATTR_PORT_IFINDEX, port->dev->ifindex))
|
||||
goto nla_put_failure;
|
||||
if (port->changed) {
|
||||
NLA_PUT_FLAG(skb, TEAM_ATTR_PORT_CHANGED);
|
||||
if (nla_put_flag(skb, TEAM_ATTR_PORT_CHANGED))
|
||||
goto nla_put_failure;
|
||||
port->changed = false;
|
||||
}
|
||||
if (port->removed)
|
||||
NLA_PUT_FLAG(skb, TEAM_ATTR_PORT_REMOVED);
|
||||
if (port->linkup)
|
||||
NLA_PUT_FLAG(skb, TEAM_ATTR_PORT_LINKUP);
|
||||
NLA_PUT_U32(skb, TEAM_ATTR_PORT_SPEED, port->speed);
|
||||
NLA_PUT_U8(skb, TEAM_ATTR_PORT_DUPLEX, port->duplex);
|
||||
if ((port->removed &&
|
||||
nla_put_flag(skb, TEAM_ATTR_PORT_REMOVED)) ||
|
||||
(port->linkup &&
|
||||
nla_put_flag(skb, TEAM_ATTR_PORT_LINKUP)) ||
|
||||
nla_put_u32(skb, TEAM_ATTR_PORT_SPEED, port->speed) ||
|
||||
nla_put_u8(skb, TEAM_ATTR_PORT_DUPLEX, port->duplex))
|
||||
goto nla_put_failure;
|
||||
nla_nest_end(skb, port_item);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue