From 20c7d26f80b42554cf1eac636b336495084b86cf Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Fri, 17 Jun 2016 20:41:09 +0300 Subject: [PATCH] tests: More wpa_supplicant/bss.c OOM coverage Signed-off-by: Jouni Malinen --- tests/hwsim/test_ap_hs20.py | 33 ++++++++++++++++++++++++++++++++- tests/hwsim/test_dbus.py | 7 +++++++ tests/hwsim/test_gas.py | 9 ++++++++- tests/hwsim/test_scan.py | 24 ++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 2 deletions(-) diff --git a/tests/hwsim/test_ap_hs20.py b/tests/hwsim/test_ap_hs20.py index 3a9354459..243f6cb5d 100644 --- a/tests/hwsim/test_ap_hs20.py +++ b/tests/hwsim/test_ap_hs20.py @@ -17,7 +17,7 @@ import socket import subprocess import hostapd -from utils import HwsimSkip, skip_with_fips +from utils import HwsimSkip, skip_with_fips, alloc_fail import hwsim_utils from tshark import run_tshark from wlantest import Wlantest @@ -212,6 +212,37 @@ def test_ap_anqp_sharing(dev, apdev): if res1['anqp_nai_realm'] == res2['anqp_nai_realm']: raise Exception("ANQP results were not unshared") +def test_ap_anqp_sharing_oom(dev, apdev): + """ANQP sharing within ESS and explicit unshare OOM""" + check_eap_capa(dev[0], "MSCHAPV2") + dev[0].flush_scan_cache() + + bssid = apdev[0]['bssid'] + params = hs20_ap_params() + params['hessid'] = bssid + hostapd.add_ap(apdev[0], params) + + bssid2 = apdev[1]['bssid'] + params = hs20_ap_params() + params['hessid'] = bssid + params['nai_realm'] = [ "0,example.com,13[5:6],21[2:4][5:7]" ] + hostapd.add_ap(apdev[1], params) + + dev[0].hs20_enable() + id = dev[0].add_cred_values({ 'realm': "example.com", 'username': "test", + 'password': "secret", + 'domain': "example.com" }) + dev[0].scan_for_bss(bssid, freq="2412") + dev[0].scan_for_bss(bssid2, freq="2412") + interworking_select(dev[0], None, "home", freq="2412") + dev[0].dump_monitor() + + with alloc_fail(dev[0], 1, "wpa_bss_anqp_clone"): + dev[0].request("ANQP_GET " + bssid + " 263") + ev = dev[0].wait_event(["RX-ANQP"], timeout=5) + if ev is None: + raise Exception("ANQP operation timed out") + def test_ap_nai_home_realm_query(dev, apdev): """NAI Home Realm Query""" check_eap_capa(dev[0], "MSCHAPV2") diff --git a/tests/hwsim/test_dbus.py b/tests/hwsim/test_dbus.py index d8572dc24..416dd2726 100644 --- a/tests/hwsim/test_dbus.py +++ b/tests/hwsim/test_dbus.py @@ -492,6 +492,13 @@ def test_dbus_wps_oom(dev, apdev): with alloc_fail_dbus(dev[0], 1, "=wpas_dbus_getter_bss_rates", "Get"): bss_obj.Get(WPAS_DBUS_BSS, "Rates", dbus_interface=dbus.PROPERTIES_IFACE) + with alloc_fail(dev[0], 1, + "wpa_bss_get_bit_rates;wpas_dbus_getter_bss_rates"): + try: + bss_obj.Get(WPAS_DBUS_BSS, "Rates", + dbus_interface=dbus.PROPERTIES_IFACE) + except dbus.exceptions.DBusException, e: + pass id = dev[0].add_network() dev[0].set_network(id, "disabled", "0") diff --git a/tests/hwsim/test_gas.py b/tests/hwsim/test_gas.py index 609033eca..67f4fb91d 100644 --- a/tests/hwsim/test_gas.py +++ b/tests/hwsim/test_gas.py @@ -16,7 +16,7 @@ import struct import hostapd from wpasupplicant import WpaSupplicant from tshark import run_tshark -from utils import alloc_fail, skip_with_fips +from utils import alloc_fail, wait_fail_trigger, skip_with_fips from hwsim import HWSimRadio def hs20_ap_params(): @@ -918,6 +918,13 @@ def test_gas_anqp_oom_wpas(dev, apdev): dev[0].scan_for_bss(bssid, freq="2412", force_scan=True) + with alloc_fail(dev[0], 1, "wpa_bss_anqp_alloc"): + if "OK" not in dev[0].request("ANQP_GET " + bssid + " 258"): + raise Exception("ANQP_GET command failed") + ev = dev[0].wait_event(["ANQP-QUERY-DONE"], timeout=5) + if ev is None: + raise Exception("ANQP query did not complete") + with alloc_fail(dev[0], 1, "gas_build_req"): if "FAIL" not in dev[0].request("ANQP_GET " + bssid + " 258"): raise Exception("Unexpected ANQP_GET command success (OOM)") diff --git a/tests/hwsim/test_scan.py b/tests/hwsim/test_scan.py index 2e3b8397f..1488b6095 100644 --- a/tests/hwsim/test_scan.py +++ b/tests/hwsim/test_scan.py @@ -1092,6 +1092,10 @@ def test_scan_fail(dev, apdev): wpas.request("SET preassoc_mac_addr 0") wpas.dump_monitor() + hapd = hostapd.add_ap(apdev[0], { "ssid": "open" }) + with alloc_fail(dev[0], 1, "wpa_bss_add"): + dev[0].scan_for_bss(apdev[0]['bssid'], freq="2412") + def test_scan_freq_list(dev, apdev): """Scan with SET freq_list and scan_cur_freq""" try: @@ -1111,3 +1115,23 @@ def test_scan_freq_list(dev, apdev): dev[0].request("SET scan_cur_freq 0") dev[0].request("REMOVE_NETWORK all") dev[0].wait_disconnected() + +def test_scan_bss_limit(dev, apdev): + """Scan and wpa_supplicant BSS entry limit""" + try: + _test_scan_bss_limit(dev, apdev) + finally: + dev[0].request("SET bss_max_count 200") + pass + +def _test_scan_bss_limit(dev, apdev): + # Trigger 'Increasing the MAX BSS count to 2 because all BSSes are in use. + # We should normally not get here!' message by limiting the maximum BSS + # count to one so that the second AP would not fit in the BSS list and the + # first AP cannot be removed from the list since it is still in use. + dev[0].request("SET bss_max_count 1") + hapd = hostapd.add_ap(apdev[0], { "ssid": "test-scan" }) + dev[0].connect("test-scan", key_mgmt="NONE", scan_freq="2412") + hapd2 = hostapd.add_ap(apdev[1], { "ssid": "test-scan-2", + "channel": "6" }) + dev[0].scan_for_bss(apdev[1]['bssid'], freq=2437, force_scan=True)