diff options
Diffstat (limited to 'net/wireless/util.c')
-rw-r--r-- | net/wireless/util.c | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/net/wireless/util.c b/net/wireless/util.c index 994e2f0cc7a8..ef35f4ef2aa6 100644 --- a/net/wireless/util.c +++ b/net/wireless/util.c | |||
@@ -684,22 +684,10 @@ EXPORT_SYMBOL(cfg80211_classify8021d); | |||
684 | 684 | ||
685 | const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 ie) | 685 | const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 ie) |
686 | { | 686 | { |
687 | u8 *end, *pos; | 687 | if (bss->information_elements == NULL) |
688 | |||
689 | pos = bss->information_elements; | ||
690 | if (pos == NULL) | ||
691 | return NULL; | 688 | return NULL; |
692 | end = pos + bss->len_information_elements; | 689 | return cfg80211_find_ie(ie, bss->information_elements, |
693 | 690 | bss->len_information_elements); | |
694 | while (pos + 1 < end) { | ||
695 | if (pos + 2 + pos[1] > end) | ||
696 | break; | ||
697 | if (pos[0] == ie) | ||
698 | return pos; | ||
699 | pos += 2 + pos[1]; | ||
700 | } | ||
701 | |||
702 | return NULL; | ||
703 | } | 691 | } |
704 | EXPORT_SYMBOL(ieee80211_bss_get_ie); | 692 | EXPORT_SYMBOL(ieee80211_bss_get_ie); |
705 | 693 | ||
@@ -812,6 +800,10 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev, | |||
812 | if (otype == NL80211_IFTYPE_AP_VLAN) | 800 | if (otype == NL80211_IFTYPE_AP_VLAN) |
813 | return -EOPNOTSUPP; | 801 | return -EOPNOTSUPP; |
814 | 802 | ||
803 | /* cannot change into P2P device type */ | ||
804 | if (ntype == NL80211_IFTYPE_P2P_DEVICE) | ||
805 | return -EOPNOTSUPP; | ||
806 | |||
815 | if (!rdev->ops->change_virtual_intf || | 807 | if (!rdev->ops->change_virtual_intf || |
816 | !(rdev->wiphy.interface_modes & (1 << ntype))) | 808 | !(rdev->wiphy.interface_modes & (1 << ntype))) |
817 | return -EOPNOTSUPP; | 809 | return -EOPNOTSUPP; |
@@ -889,6 +881,9 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev, | |||
889 | case NUM_NL80211_IFTYPES: | 881 | case NUM_NL80211_IFTYPES: |
890 | /* not happening */ | 882 | /* not happening */ |
891 | break; | 883 | break; |
884 | case NL80211_IFTYPE_P2P_DEVICE: | ||
885 | WARN_ON(1); | ||
886 | break; | ||
892 | } | 887 | } |
893 | } | 888 | } |
894 | 889 | ||
@@ -1053,8 +1048,15 @@ int cfg80211_can_use_iftype_chan(struct cfg80211_registered_device *rdev, | |||
1053 | list_for_each_entry(wdev_iter, &rdev->wdev_list, list) { | 1048 | list_for_each_entry(wdev_iter, &rdev->wdev_list, list) { |
1054 | if (wdev_iter == wdev) | 1049 | if (wdev_iter == wdev) |
1055 | continue; | 1050 | continue; |
1056 | if (!netif_running(wdev_iter->netdev)) | 1051 | if (wdev_iter->netdev) { |
1057 | continue; | 1052 | if (!netif_running(wdev_iter->netdev)) |
1053 | continue; | ||
1054 | } else if (wdev_iter->iftype == NL80211_IFTYPE_P2P_DEVICE) { | ||
1055 | if (!wdev_iter->p2p_started) | ||
1056 | continue; | ||
1057 | } else { | ||
1058 | WARN_ON(1); | ||
1059 | } | ||
1058 | 1060 | ||
1059 | if (rdev->wiphy.software_iftypes & BIT(wdev_iter->iftype)) | 1061 | if (rdev->wiphy.software_iftypes & BIT(wdev_iter->iftype)) |
1060 | continue; | 1062 | continue; |