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

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

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
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -582,11 +582,13 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
		goto nla_put_failure;
	}

	NLA_PUT(skb, HWSIM_ATTR_ADDR_TRANSMITTER,
		     sizeof(struct mac_address), data->addresses[1].addr);
	if (nla_put(skb, HWSIM_ATTR_ADDR_TRANSMITTER,
		    sizeof(struct mac_address), data->addresses[1].addr))
		goto nla_put_failure;

	/* 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
	   wmediumd flags  */
@@ -597,7 +599,8 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
	if (info->flags & IEEE80211_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*/

@@ -606,12 +609,14 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
		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,
		     tx_attempts);
		    tx_attempts))
		goto nla_put_failure;

	/* 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_unicast(&init_net, skb, dst_pid);
@@ -1108,7 +1113,8 @@ static int mac80211_hwsim_testmode_cmd(struct ieee80211_hw *hw,
						nla_total_size(sizeof(u32)));
		if (!skb)
			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);
	default:
		return -EOPNOTSUPP;