|
@@ -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) {
|
|
@@ -6384,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,
|
|
|
},
|
|
|
{
|
|
@@ -6416,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,
|
|
|
},
|
|
|
{
|
|
@@ -6424,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,
|
|
|
},
|
|
|
{
|
|
@@ -6432,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,
|
|
|
},
|
|
|
{
|
|
@@ -6448,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,
|
|
|
},
|
|
|
{
|
|
@@ -6464,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,
|
|
|
},
|
|
|
{
|
|
@@ -6497,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,
|
|
|
},
|
|
|
{
|
|
@@ -6505,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,
|
|
|
},
|
|
|
{
|
|
@@ -6531,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,
|
|
|
},
|
|
|
{
|
|
@@ -6664,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,
|
|
|
},
|
|
|
{
|
|
@@ -6672,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,
|
|
|
},
|
|
|
{
|
|
@@ -6680,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,
|
|
|
},
|
|
|
{
|
|
@@ -6840,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,
|
|
|
},
|
|
|
{
|