diff options
author | David S. Miller <davem@davemloft.net> | 2019-04-17 14:26:25 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-04-17 14:26:25 -0400 |
commit | 6b0a7f84ea1fe248df96ccc4dd86e817e32ef65b (patch) | |
tree | 0a7976054052e793da782c2b7ec34eccfbf66449 /net/wireless | |
parent | cea0aa9cbd5ad4efe267e9487ed5d48d16756253 (diff) | |
parent | fe5cdef29e41c8bda8cd1a11545e7c6bfe25570e (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflict resolution of af_smc.c from Stephen Rothwell.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/nl80211.c | 18 | ||||
-rw-r--r-- | net/wireless/reg.c | 39 | ||||
-rw-r--r-- | net/wireless/scan.c | 3 | ||||
-rw-r--r-- | net/wireless/util.c | 6 |
4 files changed, 56 insertions, 10 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 33408ba1d7ee..e7ee18ab6cb7 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -13614,7 +13614,8 @@ static const struct genl_ops nl80211_ops[] = { | |||
13614 | .doit = nl80211_associate, | 13614 | .doit = nl80211_associate, |
13615 | .flags = GENL_UNS_ADMIN_PERM, | 13615 | .flags = GENL_UNS_ADMIN_PERM, |
13616 | .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | | 13616 | .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | |
13617 | NL80211_FLAG_NEED_RTNL, | 13617 | NL80211_FLAG_NEED_RTNL | |
13618 | NL80211_FLAG_CLEAR_SKB, | ||
13618 | }, | 13619 | }, |
13619 | { | 13620 | { |
13620 | .cmd = NL80211_CMD_DEAUTHENTICATE, | 13621 | .cmd = NL80211_CMD_DEAUTHENTICATE, |
@@ -13659,14 +13660,16 @@ static const struct genl_ops nl80211_ops[] = { | |||
13659 | .doit = nl80211_connect, | 13660 | .doit = nl80211_connect, |
13660 | .flags = GENL_UNS_ADMIN_PERM, | 13661 | .flags = GENL_UNS_ADMIN_PERM, |
13661 | .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | | 13662 | .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | |
13662 | NL80211_FLAG_NEED_RTNL, | 13663 | NL80211_FLAG_NEED_RTNL | |
13664 | NL80211_FLAG_CLEAR_SKB, | ||
13663 | }, | 13665 | }, |
13664 | { | 13666 | { |
13665 | .cmd = NL80211_CMD_UPDATE_CONNECT_PARAMS, | 13667 | .cmd = NL80211_CMD_UPDATE_CONNECT_PARAMS, |
13666 | .doit = nl80211_update_connect_params, | 13668 | .doit = nl80211_update_connect_params, |
13667 | .flags = GENL_ADMIN_PERM, | 13669 | .flags = GENL_ADMIN_PERM, |
13668 | .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | | 13670 | .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | |
13669 | NL80211_FLAG_NEED_RTNL, | 13671 | NL80211_FLAG_NEED_RTNL | |
13672 | NL80211_FLAG_CLEAR_SKB, | ||
13670 | }, | 13673 | }, |
13671 | { | 13674 | { |
13672 | .cmd = NL80211_CMD_DISCONNECT, | 13675 | .cmd = NL80211_CMD_DISCONNECT, |
@@ -13691,7 +13694,8 @@ static const struct genl_ops nl80211_ops[] = { | |||
13691 | .doit = nl80211_setdel_pmksa, | 13694 | .doit = nl80211_setdel_pmksa, |
13692 | .flags = GENL_UNS_ADMIN_PERM, | 13695 | .flags = GENL_UNS_ADMIN_PERM, |
13693 | .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | | 13696 | .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | |
13694 | NL80211_FLAG_NEED_RTNL, | 13697 | NL80211_FLAG_NEED_RTNL | |
13698 | NL80211_FLAG_CLEAR_SKB, | ||
13695 | }, | 13699 | }, |
13696 | { | 13700 | { |
13697 | .cmd = NL80211_CMD_DEL_PMKSA, | 13701 | .cmd = NL80211_CMD_DEL_PMKSA, |
@@ -13999,7 +14003,8 @@ static const struct genl_ops nl80211_ops[] = { | |||
13999 | .dumpit = nl80211_vendor_cmd_dump, | 14003 | .dumpit = nl80211_vendor_cmd_dump, |
14000 | .flags = GENL_UNS_ADMIN_PERM, | 14004 | .flags = GENL_UNS_ADMIN_PERM, |
14001 | .internal_flags = NL80211_FLAG_NEED_WIPHY | | 14005 | .internal_flags = NL80211_FLAG_NEED_WIPHY | |
14002 | NL80211_FLAG_NEED_RTNL, | 14006 | NL80211_FLAG_NEED_RTNL | |
14007 | NL80211_FLAG_CLEAR_SKB, | ||
14003 | }, | 14008 | }, |
14004 | { | 14009 | { |
14005 | .cmd = NL80211_CMD_SET_QOS_MAP, | 14010 | .cmd = NL80211_CMD_SET_QOS_MAP, |
@@ -14047,7 +14052,8 @@ static const struct genl_ops nl80211_ops[] = { | |||
14047 | .cmd = NL80211_CMD_SET_PMK, | 14052 | .cmd = NL80211_CMD_SET_PMK, |
14048 | .doit = nl80211_set_pmk, | 14053 | .doit = nl80211_set_pmk, |
14049 | .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | | 14054 | .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | |
14050 | NL80211_FLAG_NEED_RTNL, | 14055 | NL80211_FLAG_NEED_RTNL | |
14056 | NL80211_FLAG_CLEAR_SKB, | ||
14051 | }, | 14057 | }, |
14052 | { | 14058 | { |
14053 | .cmd = NL80211_CMD_DEL_PMK, | 14059 | .cmd = NL80211_CMD_DEL_PMK, |
diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 2f1bf91eb226..0ba778f371cb 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c | |||
@@ -1309,6 +1309,16 @@ reg_intersect_dfs_region(const enum nl80211_dfs_regions dfs_region1, | |||
1309 | return dfs_region1; | 1309 | return dfs_region1; |
1310 | } | 1310 | } |
1311 | 1311 | ||
1312 | static void reg_wmm_rules_intersect(const struct ieee80211_wmm_ac *wmm_ac1, | ||
1313 | const struct ieee80211_wmm_ac *wmm_ac2, | ||
1314 | struct ieee80211_wmm_ac *intersect) | ||
1315 | { | ||
1316 | intersect->cw_min = max_t(u16, wmm_ac1->cw_min, wmm_ac2->cw_min); | ||
1317 | intersect->cw_max = max_t(u16, wmm_ac1->cw_max, wmm_ac2->cw_max); | ||
1318 | intersect->cot = min_t(u16, wmm_ac1->cot, wmm_ac2->cot); | ||
1319 | intersect->aifsn = max_t(u8, wmm_ac1->aifsn, wmm_ac2->aifsn); | ||
1320 | } | ||
1321 | |||
1312 | /* | 1322 | /* |
1313 | * Helper for regdom_intersect(), this does the real | 1323 | * Helper for regdom_intersect(), this does the real |
1314 | * mathematical intersection fun | 1324 | * mathematical intersection fun |
@@ -1323,6 +1333,8 @@ static int reg_rules_intersect(const struct ieee80211_regdomain *rd1, | |||
1323 | struct ieee80211_freq_range *freq_range; | 1333 | struct ieee80211_freq_range *freq_range; |
1324 | const struct ieee80211_power_rule *power_rule1, *power_rule2; | 1334 | const struct ieee80211_power_rule *power_rule1, *power_rule2; |
1325 | struct ieee80211_power_rule *power_rule; | 1335 | struct ieee80211_power_rule *power_rule; |
1336 | const struct ieee80211_wmm_rule *wmm_rule1, *wmm_rule2; | ||
1337 | struct ieee80211_wmm_rule *wmm_rule; | ||
1326 | u32 freq_diff, max_bandwidth1, max_bandwidth2; | 1338 | u32 freq_diff, max_bandwidth1, max_bandwidth2; |
1327 | 1339 | ||
1328 | freq_range1 = &rule1->freq_range; | 1340 | freq_range1 = &rule1->freq_range; |
@@ -1333,6 +1345,10 @@ static int reg_rules_intersect(const struct ieee80211_regdomain *rd1, | |||
1333 | power_rule2 = &rule2->power_rule; | 1345 | power_rule2 = &rule2->power_rule; |
1334 | power_rule = &intersected_rule->power_rule; | 1346 | power_rule = &intersected_rule->power_rule; |
1335 | 1347 | ||
1348 | wmm_rule1 = &rule1->wmm_rule; | ||
1349 | wmm_rule2 = &rule2->wmm_rule; | ||
1350 | wmm_rule = &intersected_rule->wmm_rule; | ||
1351 | |||
1336 | freq_range->start_freq_khz = max(freq_range1->start_freq_khz, | 1352 | freq_range->start_freq_khz = max(freq_range1->start_freq_khz, |
1337 | freq_range2->start_freq_khz); | 1353 | freq_range2->start_freq_khz); |
1338 | freq_range->end_freq_khz = min(freq_range1->end_freq_khz, | 1354 | freq_range->end_freq_khz = min(freq_range1->end_freq_khz, |
@@ -1376,6 +1392,29 @@ static int reg_rules_intersect(const struct ieee80211_regdomain *rd1, | |||
1376 | intersected_rule->dfs_cac_ms = max(rule1->dfs_cac_ms, | 1392 | intersected_rule->dfs_cac_ms = max(rule1->dfs_cac_ms, |
1377 | rule2->dfs_cac_ms); | 1393 | rule2->dfs_cac_ms); |
1378 | 1394 | ||
1395 | if (rule1->has_wmm && rule2->has_wmm) { | ||
1396 | u8 ac; | ||
1397 | |||
1398 | for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) { | ||
1399 | reg_wmm_rules_intersect(&wmm_rule1->client[ac], | ||
1400 | &wmm_rule2->client[ac], | ||
1401 | &wmm_rule->client[ac]); | ||
1402 | reg_wmm_rules_intersect(&wmm_rule1->ap[ac], | ||
1403 | &wmm_rule2->ap[ac], | ||
1404 | &wmm_rule->ap[ac]); | ||
1405 | } | ||
1406 | |||
1407 | intersected_rule->has_wmm = true; | ||
1408 | } else if (rule1->has_wmm) { | ||
1409 | *wmm_rule = *wmm_rule1; | ||
1410 | intersected_rule->has_wmm = true; | ||
1411 | } else if (rule2->has_wmm) { | ||
1412 | *wmm_rule = *wmm_rule2; | ||
1413 | intersected_rule->has_wmm = true; | ||
1414 | } else { | ||
1415 | intersected_rule->has_wmm = false; | ||
1416 | } | ||
1417 | |||
1379 | if (!is_valid_reg_rule(intersected_rule)) | 1418 | if (!is_valid_reg_rule(intersected_rule)) |
1380 | return -EINVAL; | 1419 | return -EINVAL; |
1381 | 1420 | ||
diff --git a/net/wireless/scan.c b/net/wireless/scan.c index 287518c6caa4..04d888628f29 100644 --- a/net/wireless/scan.c +++ b/net/wireless/scan.c | |||
@@ -190,10 +190,9 @@ static size_t cfg80211_gen_new_ie(const u8 *ie, size_t ielen, | |||
190 | /* copy subelement as we need to change its content to | 190 | /* copy subelement as we need to change its content to |
191 | * mark an ie after it is processed. | 191 | * mark an ie after it is processed. |
192 | */ | 192 | */ |
193 | sub_copy = kmalloc(subie_len, gfp); | 193 | sub_copy = kmemdup(subelement, subie_len, gfp); |
194 | if (!sub_copy) | 194 | if (!sub_copy) |
195 | return 0; | 195 | return 0; |
196 | memcpy(sub_copy, subelement, subie_len); | ||
197 | 196 | ||
198 | pos = &new_ie[0]; | 197 | pos = &new_ie[0]; |
199 | 198 | ||
diff --git a/net/wireless/util.c b/net/wireless/util.c index e4b8db5e81ec..75899b62bdc9 100644 --- a/net/wireless/util.c +++ b/net/wireless/util.c | |||
@@ -1220,9 +1220,11 @@ static u32 cfg80211_calculate_bitrate_he(struct rate_info *rate) | |||
1220 | else if (rate->bw == RATE_INFO_BW_HE_RU && | 1220 | else if (rate->bw == RATE_INFO_BW_HE_RU && |
1221 | rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_26) | 1221 | rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_26) |
1222 | result = rates_26[rate->he_gi]; | 1222 | result = rates_26[rate->he_gi]; |
1223 | else if (WARN(1, "invalid HE MCS: bw:%d, ru:%d\n", | 1223 | else { |
1224 | rate->bw, rate->he_ru_alloc)) | 1224 | WARN(1, "invalid HE MCS: bw:%d, ru:%d\n", |
1225 | rate->bw, rate->he_ru_alloc); | ||
1225 | return 0; | 1226 | return 0; |
1227 | } | ||
1226 | 1228 | ||
1227 | /* now scale to the appropriate MCS */ | 1229 | /* now scale to the appropriate MCS */ |
1228 | tmp = result; | 1230 | tmp = result; |