diff mbox

[RFC] mac80211_hwsim: Implements a check for ATTR_FREQ inside hwsim_cloned_frame_received_nl

Message ID 1446238820-21004-1-git-send-email-arwelle@cert.org (mailing list archive)
State Changes Requested
Delegated to: Johannes Berg
Headers show

Commit Message

arwelle@cert.org Oct. 30, 2015, 9 p.m. UTC
From: Adam Welle <arwelle@cert.org>

If a frame is received from netlink with this value set it is checked against the current radio's frequency and discarded if different.

Signed-off-by: Adam Welle <arwelle@cert.org>
---
 drivers/net/wireless/mac80211_hwsim.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

Comments

Johannes Berg Nov. 2, 2015, 12:27 p.m. UTC | #1
On Fri, 2015-10-30 at 17:00 -0400, arwelle@cert.org wrote:
> From: Adam Welle <arwelle@cert.org>
> 
> If a frame is received from netlink with this value set it is checked 
> against the current radio's frequency and discarded if different.

Please line-break the commit log to <=72 characters/line.

> +	/* Check ATTR_FREQ if it exists, and throw away off-channel 
> packets */
> +	if (info->attrs[HWSIM_ATTR_FREQ])
> +		rx_status.freq = nla_get_u32(info
> ->attrs[HWSIM_ATTR_FREQ]);
> +	else
> +		rx_status.freq = data2->channel->center_freq;
> +
> +	/* Drop packet if not on the same frequency as this radio */
> +	if (rx_status.freq != data2->channel->center_freq)
> +		goto out;
> 
I think it'd make sense to have that check only in the case that the
attribute existed. I'm not too concerned about performance here, but
more generally it looks odd if you're checking when you know it can't
be different.

johannes
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index ee46f46..78faa72 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -2827,10 +2827,17 @@  static int hwsim_cloned_frame_received_nl(struct sk_buff *skb_2,
 
 	/* A frame is received from user space */
 	memset(&rx_status, 0, sizeof(rx_status));
-	/* TODO: Check ATTR_FREQ if it exists, and maybe throw away off-channel
-	 * packets?
-	 */
-	rx_status.freq = data2->channel->center_freq;
+
+	/* Check ATTR_FREQ if it exists, and throw away off-channel packets */
+	if (info->attrs[HWSIM_ATTR_FREQ])
+		rx_status.freq = nla_get_u32(info->attrs[HWSIM_ATTR_FREQ]);
+	else
+		rx_status.freq = data2->channel->center_freq;
+
+	/* Drop packet if not on the same frequency as this radio */
+	if (rx_status.freq != data2->channel->center_freq)
+		goto out;
+
 	rx_status.band = data2->channel->band;
 	rx_status.rate_idx = nla_get_u32(info->attrs[HWSIM_ATTR_RX_RATE]);
 	rx_status.signal = nla_get_u32(info->attrs[HWSIM_ATTR_SIGNAL]);