Commit 633c9389 authored by David S. Miller's avatar David S. Miller

mac80211_hwsim: 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 d33e152e
...@@ -582,11 +582,13 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw, ...@@ -582,11 +582,13 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
goto nla_put_failure; goto nla_put_failure;
} }
NLA_PUT(skb, HWSIM_ATTR_ADDR_TRANSMITTER, if (nla_put(skb, HWSIM_ATTR_ADDR_TRANSMITTER,
sizeof(struct mac_address), data->addresses[1].addr); sizeof(struct mac_address), data->addresses[1].addr))
goto nla_put_failure;
/* We get the skb->data */ /* We get the skb->data */
NLA_PUT(skb, HWSIM_ATTR_FRAME, my_skb->len, my_skb->data); if (nla_put(skb, HWSIM_ATTR_FRAME, my_skb->len, my_skb->data))
goto nla_put_failure;
/* We get the flags for this transmission, and we translate them to /* We get the flags for this transmission, and we translate them to
wmediumd flags */ wmediumd flags */
...@@ -597,7 +599,8 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw, ...@@ -597,7 +599,8 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
if (info->flags & IEEE80211_TX_CTL_NO_ACK) if (info->flags & IEEE80211_TX_CTL_NO_ACK)
hwsim_flags |= HWSIM_TX_CTL_NO_ACK; hwsim_flags |= HWSIM_TX_CTL_NO_ACK;
NLA_PUT_U32(skb, HWSIM_ATTR_FLAGS, hwsim_flags); if (nla_put_u32(skb, HWSIM_ATTR_FLAGS, hwsim_flags))
goto nla_put_failure;
/* We get the tx control (rate and retries) info*/ /* We get the tx control (rate and retries) info*/
...@@ -606,12 +609,14 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw, ...@@ -606,12 +609,14 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
tx_attempts[i].count = info->status.rates[i].count; tx_attempts[i].count = info->status.rates[i].count;
} }
NLA_PUT(skb, HWSIM_ATTR_TX_INFO, if (nla_put(skb, HWSIM_ATTR_TX_INFO,
sizeof(struct hwsim_tx_rate)*IEEE80211_TX_MAX_RATES, sizeof(struct hwsim_tx_rate)*IEEE80211_TX_MAX_RATES,
tx_attempts); tx_attempts))
goto nla_put_failure;
/* We create a cookie to identify this skb */ /* We create a cookie to identify this skb */
NLA_PUT_U64(skb, HWSIM_ATTR_COOKIE, (unsigned long) my_skb); if (nla_put_u64(skb, HWSIM_ATTR_COOKIE, (unsigned long) my_skb))
goto nla_put_failure;
genlmsg_end(skb, msg_head); genlmsg_end(skb, msg_head);
genlmsg_unicast(&init_net, skb, dst_pid); genlmsg_unicast(&init_net, skb, dst_pid);
...@@ -1108,7 +1113,8 @@ static int mac80211_hwsim_testmode_cmd(struct ieee80211_hw *hw, ...@@ -1108,7 +1113,8 @@ static int mac80211_hwsim_testmode_cmd(struct ieee80211_hw *hw,
nla_total_size(sizeof(u32))); nla_total_size(sizeof(u32)));
if (!skb) if (!skb)
return -ENOMEM; return -ENOMEM;
NLA_PUT_U32(skb, HWSIM_TM_ATTR_PS, hwsim->ps); if (nla_put_u32(skb, HWSIM_TM_ATTR_PS, hwsim->ps))
goto nla_put_failure;
return cfg80211_testmode_reply(skb); return cfg80211_testmode_reply(skb);
default: default:
return -EOPNOTSUPP; return -EOPNOTSUPP;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment