diff options
Diffstat (limited to 'net/wireless')
| -rw-r--r-- | net/wireless/debugfs.c | 10 | ||||
| -rw-r--r-- | net/wireless/nl80211.c | 60 | ||||
| -rw-r--r-- | net/wireless/util.c | 2 | ||||
| -rw-r--r-- | net/wireless/wext-core.c | 6 | 
4 files changed, 44 insertions, 34 deletions
diff --git a/net/wireless/debugfs.c b/net/wireless/debugfs.c index 39765bcfb47..920cabe0461 100644 --- a/net/wireless/debugfs.c +++ b/net/wireless/debugfs.c @@ -13,12 +13,6 @@  #include "core.h"  #include "debugfs.h" -static int cfg80211_open_file_generic(struct inode *inode, struct file *file) -{ -	file->private_data = inode->i_private; -	return 0; -} -  #define DEBUGFS_READONLY_FILE(name, buflen, fmt, value...)		\  static ssize_t name## _read(struct file *file, char __user *userbuf,	\  			    size_t count, loff_t *ppos)			\ @@ -33,7 +27,7 @@ static ssize_t name## _read(struct file *file, char __user *userbuf,	\  									\  static const struct file_operations name## _ops = {			\  	.read = name## _read,						\ -	.open = cfg80211_open_file_generic,				\ +	.open = simple_open,						\  	.llseek = generic_file_llseek,					\  }; @@ -102,7 +96,7 @@ static ssize_t ht40allow_map_read(struct file *file,  static const struct file_operations ht40allow_map_ops = {  	.read = ht40allow_map_read, -	.open = cfg80211_open_file_generic, +	.open = simple_open,  	.llseek = default_llseek,  }; diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 4c1eb9472dd..f432c57af05 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -1294,6 +1294,11 @@ static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)  			goto bad_res;  		} +		if (!netif_running(netdev)) { +			result = -ENETDOWN; +			goto bad_res; +		} +  		nla_for_each_nested(nl_txq_params,  				    info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS],  				    rem_txq_params) { @@ -2386,7 +2391,9 @@ nla_put_failure:  }  static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq, -				int flags, struct net_device *dev, +				int flags, +				struct cfg80211_registered_device *rdev, +				struct net_device *dev,  				const u8 *mac_addr, struct station_info *sinfo)  {  	void *hdr; @@ -2425,12 +2432,18 @@ static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,  	if (sinfo->filled & STATION_INFO_PLINK_STATE)  		NLA_PUT_U8(msg, NL80211_STA_INFO_PLINK_STATE,  			    sinfo->plink_state); -	if (sinfo->filled & STATION_INFO_SIGNAL) -		NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL, -			   sinfo->signal); -	if (sinfo->filled & STATION_INFO_SIGNAL_AVG) -		NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL_AVG, -			   sinfo->signal_avg); +	switch (rdev->wiphy.signal_type) { +	case CFG80211_SIGNAL_TYPE_MBM: +		if (sinfo->filled & STATION_INFO_SIGNAL) +			NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL, +				   sinfo->signal); +		if (sinfo->filled & STATION_INFO_SIGNAL_AVG) +			NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL_AVG, +				   sinfo->signal_avg); +		break; +	default: +		break; +	}  	if (sinfo->filled & STATION_INFO_TX_BITRATE) {  		if (!nl80211_put_sta_rate(msg, &sinfo->txrate,  					  NL80211_STA_INFO_TX_BITRATE)) @@ -2523,7 +2536,7 @@ static int nl80211_dump_station(struct sk_buff *skb,  		if (nl80211_send_station(skb,  				NETLINK_CB(cb->skb).pid,  				cb->nlh->nlmsg_seq, NLM_F_MULTI, -				netdev, mac_addr, +				dev, netdev, mac_addr,  				&sinfo) < 0)  			goto out; @@ -2568,7 +2581,7 @@ static int nl80211_get_station(struct sk_buff *skb, struct genl_info *info)  		return -ENOMEM;  	if (nl80211_send_station(msg, info->snd_pid, info->snd_seq, 0, -				 dev, mac_addr, &sinfo) < 0) { +				 rdev, dev, mac_addr, &sinfo) < 0) {  		nlmsg_free(msg);  		return -ENOBUFS;  	} @@ -6376,7 +6389,7 @@ static struct genl_ops nl80211_ops[] = {  		.doit = nl80211_get_key,  		.policy = nl80211_policy,  		.flags = GENL_ADMIN_PERM, -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -6408,7 +6421,7 @@ static struct genl_ops nl80211_ops[] = {  		.policy = nl80211_policy,  		.flags = GENL_ADMIN_PERM,  		.doit = nl80211_set_beacon, -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -6416,7 +6429,7 @@ static struct genl_ops nl80211_ops[] = {  		.policy = nl80211_policy,  		.flags = GENL_ADMIN_PERM,  		.doit = nl80211_start_ap, -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -6424,7 +6437,7 @@ static struct genl_ops nl80211_ops[] = {  		.policy = nl80211_policy,  		.flags = GENL_ADMIN_PERM,  		.doit = nl80211_stop_ap, -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -6440,7 +6453,7 @@ static struct genl_ops nl80211_ops[] = {  		.doit = nl80211_set_station,  		.policy = nl80211_policy,  		.flags = GENL_ADMIN_PERM, -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -6456,7 +6469,7 @@ static struct genl_ops nl80211_ops[] = {  		.doit = nl80211_del_station,  		.policy = nl80211_policy,  		.flags = GENL_ADMIN_PERM, -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -6489,7 +6502,7 @@ static struct genl_ops nl80211_ops[] = {  		.doit = nl80211_del_mpath,  		.policy = nl80211_policy,  		.flags = GENL_ADMIN_PERM, -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -6497,7 +6510,7 @@ static struct genl_ops nl80211_ops[] = {  		.doit = nl80211_set_bss,  		.policy = nl80211_policy,  		.flags = GENL_ADMIN_PERM, -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -6523,7 +6536,7 @@ static struct genl_ops nl80211_ops[] = {  		.doit = nl80211_get_mesh_config,  		.policy = nl80211_policy,  		/* can be retrieved by unprivileged users */ -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -6656,7 +6669,7 @@ static struct genl_ops nl80211_ops[] = {  		.doit = nl80211_setdel_pmksa,  		.policy = nl80211_policy,  		.flags = GENL_ADMIN_PERM, -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -6664,7 +6677,7 @@ static struct genl_ops nl80211_ops[] = {  		.doit = nl80211_setdel_pmksa,  		.policy = nl80211_policy,  		.flags = GENL_ADMIN_PERM, -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -6672,7 +6685,7 @@ static struct genl_ops nl80211_ops[] = {  		.doit = nl80211_flush_pmksa,  		.policy = nl80211_policy,  		.flags = GENL_ADMIN_PERM, -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -6832,7 +6845,7 @@ static struct genl_ops nl80211_ops[] = {  		.doit = nl80211_probe_client,  		.policy = nl80211_policy,  		.flags = GENL_ADMIN_PERM, -		.internal_flags = NL80211_FLAG_NEED_NETDEV | +		.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |  				  NL80211_FLAG_NEED_RTNL,  	},  	{ @@ -7596,7 +7609,8 @@ void nl80211_send_sta_event(struct cfg80211_registered_device *rdev,  	if (!msg)  		return; -	if (nl80211_send_station(msg, 0, 0, 0, dev, mac_addr, sinfo) < 0) { +	if (nl80211_send_station(msg, 0, 0, 0, +				 rdev, dev, mac_addr, sinfo) < 0) {  		nlmsg_free(msg);  		return;  	} diff --git a/net/wireless/util.c b/net/wireless/util.c index 1b7a08df933..957f2562161 100644 --- a/net/wireless/util.c +++ b/net/wireless/util.c @@ -989,7 +989,7 @@ int cfg80211_can_change_interface(struct cfg80211_registered_device *rdev,  			if (rdev->wiphy.software_iftypes & BIT(iftype))  				continue;  			for (j = 0; j < c->n_limits; j++) { -				if (!(limits[j].types & iftype)) +				if (!(limits[j].types & BIT(iftype)))  					continue;  				if (limits[j].max < num[iftype])  					goto cont; diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c index 0af7f54e4f6..af648e08e61 100644 --- a/net/wireless/wext-core.c +++ b/net/wireless/wext-core.c @@ -780,8 +780,10 @@ static int ioctl_standard_iw_point(struct iw_point *iwp, unsigned int cmd,  		if (cmd == SIOCSIWENCODEEXT) {  			struct iw_encode_ext *ee = (void *) extra; -			if (iwp->length < sizeof(*ee) + ee->key_len) -				return -EFAULT; +			if (iwp->length < sizeof(*ee) + ee->key_len) { +				err = -EFAULT; +				goto out; +			}  		}  	}  |