diff options
author | Johannes Berg <johannes.berg@intel.com> | 2014-01-07 17:21:34 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2014-01-10 14:12:58 -0500 |
commit | 85ca8fc74671def6041fb12c0a7d3423da56ffd3 (patch) | |
tree | 933e2c462951f7ad364be6edef2ad96f6bffd207 | |
parent | de0421d53bfb5f7783e5228f8cf49f2ae7140d54 (diff) |
mac80211_hwsim: verify wmediumd socket
There can't be two wmediumd instances controlling hwsim,
so reject registration from a second one and verify in
the commands that it's the correct instance calling.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r-- | drivers/net/wireless/mac80211_hwsim.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c index 1c51c33c385f..4ee88a9b095d 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c | |||
@@ -2112,6 +2112,9 @@ static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2, | |||
2112 | int i; | 2112 | int i; |
2113 | bool found = false; | 2113 | bool found = false; |
2114 | 2114 | ||
2115 | if (info->snd_portid != wmediumd_portid) | ||
2116 | return -EINVAL; | ||
2117 | |||
2115 | if (!info->attrs[HWSIM_ATTR_ADDR_TRANSMITTER] || | 2118 | if (!info->attrs[HWSIM_ATTR_ADDR_TRANSMITTER] || |
2116 | !info->attrs[HWSIM_ATTR_FLAGS] || | 2119 | !info->attrs[HWSIM_ATTR_FLAGS] || |
2117 | !info->attrs[HWSIM_ATTR_COOKIE] || | 2120 | !info->attrs[HWSIM_ATTR_COOKIE] || |
@@ -2185,6 +2188,9 @@ static int hwsim_cloned_frame_received_nl(struct sk_buff *skb_2, | |||
2185 | void *frame_data; | 2188 | void *frame_data; |
2186 | struct sk_buff *skb = NULL; | 2189 | struct sk_buff *skb = NULL; |
2187 | 2190 | ||
2191 | if (info->snd_portid != wmediumd_portid) | ||
2192 | return -EINVAL; | ||
2193 | |||
2188 | if (!info->attrs[HWSIM_ATTR_ADDR_RECEIVER] || | 2194 | if (!info->attrs[HWSIM_ATTR_ADDR_RECEIVER] || |
2189 | !info->attrs[HWSIM_ATTR_FRAME] || | 2195 | !info->attrs[HWSIM_ATTR_FRAME] || |
2190 | !info->attrs[HWSIM_ATTR_RX_RATE] || | 2196 | !info->attrs[HWSIM_ATTR_RX_RATE] || |
@@ -2237,6 +2243,9 @@ out: | |||
2237 | static int hwsim_register_received_nl(struct sk_buff *skb_2, | 2243 | static int hwsim_register_received_nl(struct sk_buff *skb_2, |
2238 | struct genl_info *info) | 2244 | struct genl_info *info) |
2239 | { | 2245 | { |
2246 | if (wmediumd_portid) | ||
2247 | return -EBUSY; | ||
2248 | |||
2240 | wmediumd_portid = info->snd_portid; | 2249 | wmediumd_portid = info->snd_portid; |
2241 | 2250 | ||
2242 | printk(KERN_DEBUG "mac80211_hwsim: received a REGISTER, " | 2251 | printk(KERN_DEBUG "mac80211_hwsim: received a REGISTER, " |