mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-11-07 04:09:21 +00:00
dcbnl: 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
60aed2abb3
commit
1eb4c97777
1 changed files with 42 additions and 30 deletions
|
@ -1205,13 +1205,15 @@ static int dcbnl_build_peer_app(struct net_device *netdev, struct sk_buff* skb,
|
|||
if (!app)
|
||||
goto nla_put_failure;
|
||||
|
||||
if (app_info_type)
|
||||
NLA_PUT(skb, app_info_type, sizeof(info), &info);
|
||||
|
||||
for (i = 0; i < app_count; i++)
|
||||
NLA_PUT(skb, app_entry_type, sizeof(struct dcb_app),
|
||||
&table[i]);
|
||||
if (app_info_type &&
|
||||
nla_put(skb, app_info_type, sizeof(info), &info))
|
||||
goto nla_put_failure;
|
||||
|
||||
for (i = 0; i < app_count; i++) {
|
||||
if (nla_put(skb, app_entry_type, sizeof(struct dcb_app),
|
||||
&table[i]))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
nla_nest_end(skb, app);
|
||||
}
|
||||
err = 0;
|
||||
|
@ -1230,8 +1232,8 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
|
|||
int dcbx;
|
||||
int err = -EMSGSIZE;
|
||||
|
||||
NLA_PUT_STRING(skb, DCB_ATTR_IFNAME, netdev->name);
|
||||
|
||||
if (nla_put_string(skb, DCB_ATTR_IFNAME, netdev->name))
|
||||
goto nla_put_failure;
|
||||
ieee = nla_nest_start(skb, DCB_ATTR_IEEE);
|
||||
if (!ieee)
|
||||
goto nla_put_failure;
|
||||
|
@ -1239,15 +1241,17 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
|
|||
if (ops->ieee_getets) {
|
||||
struct ieee_ets ets;
|
||||
err = ops->ieee_getets(netdev, &ets);
|
||||
if (!err)
|
||||
NLA_PUT(skb, DCB_ATTR_IEEE_ETS, sizeof(ets), &ets);
|
||||
if (!err &&
|
||||
nla_put(skb, DCB_ATTR_IEEE_ETS, sizeof(ets), &ets))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
if (ops->ieee_getpfc) {
|
||||
struct ieee_pfc pfc;
|
||||
err = ops->ieee_getpfc(netdev, &pfc);
|
||||
if (!err)
|
||||
NLA_PUT(skb, DCB_ATTR_IEEE_PFC, sizeof(pfc), &pfc);
|
||||
if (!err &&
|
||||
nla_put(skb, DCB_ATTR_IEEE_PFC, sizeof(pfc), &pfc))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
app = nla_nest_start(skb, DCB_ATTR_IEEE_APP_TABLE);
|
||||
|
@ -1278,15 +1282,17 @@ static int dcbnl_ieee_fill(struct sk_buff *skb, struct net_device *netdev)
|
|||
if (ops->ieee_peer_getets) {
|
||||
struct ieee_ets ets;
|
||||
err = ops->ieee_peer_getets(netdev, &ets);
|
||||
if (!err)
|
||||
NLA_PUT(skb, DCB_ATTR_IEEE_PEER_ETS, sizeof(ets), &ets);
|
||||
if (!err &&
|
||||
nla_put(skb, DCB_ATTR_IEEE_PEER_ETS, sizeof(ets), &ets))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
if (ops->ieee_peer_getpfc) {
|
||||
struct ieee_pfc pfc;
|
||||
err = ops->ieee_peer_getpfc(netdev, &pfc);
|
||||
if (!err)
|
||||
NLA_PUT(skb, DCB_ATTR_IEEE_PEER_PFC, sizeof(pfc), &pfc);
|
||||
if (!err &&
|
||||
nla_put(skb, DCB_ATTR_IEEE_PEER_PFC, sizeof(pfc), &pfc))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
if (ops->peer_getappinfo && ops->peer_getapptable) {
|
||||
|
@ -1340,10 +1346,11 @@ static int dcbnl_cee_pg_fill(struct sk_buff *skb, struct net_device *dev,
|
|||
ops->getpgtccfgtx(dev, i - DCB_PG_ATTR_TC_0,
|
||||
&prio, &pgid, &tc_pct, &up_map);
|
||||
|
||||
NLA_PUT_U8(skb, DCB_TC_ATTR_PARAM_PGID, pgid);
|
||||
NLA_PUT_U8(skb, DCB_TC_ATTR_PARAM_UP_MAPPING, up_map);
|
||||
NLA_PUT_U8(skb, DCB_TC_ATTR_PARAM_STRICT_PRIO, prio);
|
||||
NLA_PUT_U8(skb, DCB_TC_ATTR_PARAM_BW_PCT, tc_pct);
|
||||
if (nla_put_u8(skb, DCB_TC_ATTR_PARAM_PGID, pgid) ||
|
||||
nla_put_u8(skb, DCB_TC_ATTR_PARAM_UP_MAPPING, up_map) ||
|
||||
nla_put_u8(skb, DCB_TC_ATTR_PARAM_STRICT_PRIO, prio) ||
|
||||
nla_put_u8(skb, DCB_TC_ATTR_PARAM_BW_PCT, tc_pct))
|
||||
goto nla_put_failure;
|
||||
nla_nest_end(skb, tc_nest);
|
||||
}
|
||||
|
||||
|
@ -1356,7 +1363,8 @@ static int dcbnl_cee_pg_fill(struct sk_buff *skb, struct net_device *dev,
|
|||
else
|
||||
ops->getpgbwgcfgtx(dev, i - DCB_PG_ATTR_BW_ID_0,
|
||||
&tc_pct);
|
||||
NLA_PUT_U8(skb, i, tc_pct);
|
||||
if (nla_put_u8(skb, i, tc_pct))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
nla_nest_end(skb, pg);
|
||||
return 0;
|
||||
|
@ -1373,8 +1381,8 @@ static int dcbnl_cee_fill(struct sk_buff *skb, struct net_device *netdev)
|
|||
int dcbx, i, err = -EMSGSIZE;
|
||||
u8 value;
|
||||
|
||||
NLA_PUT_STRING(skb, DCB_ATTR_IFNAME, netdev->name);
|
||||
|
||||
if (nla_put_string(skb, DCB_ATTR_IFNAME, netdev->name))
|
||||
goto nla_put_failure;
|
||||
cee = nla_nest_start(skb, DCB_ATTR_CEE);
|
||||
if (!cee)
|
||||
goto nla_put_failure;
|
||||
|
@ -1401,7 +1409,8 @@ static int dcbnl_cee_fill(struct sk_buff *skb, struct net_device *netdev)
|
|||
|
||||
for (i = DCB_PFC_UP_ATTR_0; i <= DCB_PFC_UP_ATTR_7; i++) {
|
||||
ops->getpfccfg(netdev, i - DCB_PFC_UP_ATTR_0, &value);
|
||||
NLA_PUT_U8(skb, i, value);
|
||||
if (nla_put_u8(skb, i, value))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
nla_nest_end(skb, pfc_nest);
|
||||
}
|
||||
|
@ -1454,8 +1463,9 @@ static int dcbnl_cee_fill(struct sk_buff *skb, struct net_device *netdev)
|
|||
|
||||
for (i = DCB_FEATCFG_ATTR_ALL + 1; i <= DCB_FEATCFG_ATTR_MAX;
|
||||
i++)
|
||||
if (!ops->getfeatcfg(netdev, i, &value))
|
||||
NLA_PUT_U8(skb, i, value);
|
||||
if (!ops->getfeatcfg(netdev, i, &value) &&
|
||||
nla_put_u8(skb, i, value))
|
||||
goto nla_put_failure;
|
||||
|
||||
nla_nest_end(skb, feat);
|
||||
}
|
||||
|
@ -1464,15 +1474,17 @@ static int dcbnl_cee_fill(struct sk_buff *skb, struct net_device *netdev)
|
|||
if (ops->cee_peer_getpg) {
|
||||
struct cee_pg pg;
|
||||
err = ops->cee_peer_getpg(netdev, &pg);
|
||||
if (!err)
|
||||
NLA_PUT(skb, DCB_ATTR_CEE_PEER_PG, sizeof(pg), &pg);
|
||||
if (!err &&
|
||||
nla_put(skb, DCB_ATTR_CEE_PEER_PG, sizeof(pg), &pg))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
if (ops->cee_peer_getpfc) {
|
||||
struct cee_pfc pfc;
|
||||
err = ops->cee_peer_getpfc(netdev, &pfc);
|
||||
if (!err)
|
||||
NLA_PUT(skb, DCB_ATTR_CEE_PEER_PFC, sizeof(pfc), &pfc);
|
||||
if (!err &&
|
||||
nla_put(skb, DCB_ATTR_CEE_PEER_PFC, sizeof(pfc), &pfc))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
if (ops->peer_getappinfo && ops->peer_getapptable) {
|
||||
|
|
Loading…
Reference in a new issue