From patchwork Mon Aug 23 21:55:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wang X-Patchwork-Id: 1520005 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=W6JzuOAc; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.a=rsa-sha256 header.s=google header.b=Z70VdIEp; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4GtmKw3sc5z9sXM for ; Tue, 24 Aug 2021 07:56:52 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=/cVyvyy7qdWlhjGwm0r3bIJyV4na5C582pfudPZ6kZM=; b=W6JzuOAcTTkkHB mQTdsmRi1LjkeBTwGteGr8zL/4pHQDRnvpsBqYOAoT0s6/hp4Hn8aDTuTDRhNcApuPo/FJHYb7Dmo I/epiZ/XkuWyemMX/7UN/DvPuXWz3EHCy+2VJCcwjXOFLFHwSVH4nR4SM2M+JBsnjhae4zpMDo6mR mI1fIC2G0ssgP9mI/aUwGQkYgtbfoAhwwxuOkEX6E1VHRM7j4IZ1ywjQPgQv0Mp1lhu+Fa3HYU+wK u1nzp4f1Jw629dgGuZ24yP+wBNIK0mn6G1yCPe86Pbgli+0g1yfLfhRp/IhjdIgtZyblZgiI0YR3O 1n2rq9VvkzVvtrhiO8kg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mIHun-000mQF-BM; Mon, 23 Aug 2021 21:55:33 +0000 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mIHug-000mPT-RN for hostap@lists.infradead.org; Mon, 23 Aug 2021 21:55:30 +0000 Received: by mail-pj1-x1034.google.com with SMTP id ot2-20020a17090b3b4200b0019127f8ed87so728866pjb.1 for ; Mon, 23 Aug 2021 14:55:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=V1uPld/Fbwlm+ZecDI4HGtVh/+SCcdrQkpTKs9OEIC8=; b=Z70VdIEpOXWVexw2LXs4KRNeV7CYmeiFPt9dTbfbYFO45LSZ1h2fkzZ9KhAWNAutjs hVisp+w7FLHKSFjGgWYP1u5FEDwu6+lqhNmwAYeDtES8fRulX5K1OxzOf0P13jmpmiVK XaaULzBXRmoxo9EgbeVhYSEW+zhocG6uQAXiE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=V1uPld/Fbwlm+ZecDI4HGtVh/+SCcdrQkpTKs9OEIC8=; b=Pyd42AOIoUfzeGfoiOBq4sd5vPPk55TClO4//6aH0rWj7bZmtS88w+zFeGQGTknx5u BKGsNeIeGhjbjDiV9Qt31bWeLDdUxYLScqMshzGE3XlN5845zRECXI8tCs4ngbE6BTWx lBKjZZ1jm1/1B4398muEju7OCcCznduIpdyRKspOuFWC2fZQqZHx8pP9rf5dyHas041B BlOg5aSyaOsRWilRJn5mZ7QKvEpyj+E6a6iW4NKGBkeMije2ImAoxCr9xdOTLu0J5Kg5 3v8Iltg0ctQSTRgECDVEUUU51xJpJ6Ic5TlPFZ20ofTiJXhD4eMd5fq9fGUN9P+2SNIk 7bQQ== X-Gm-Message-State: AOAM531bM28QMd9NxmCEEx7mYQgVQbpj9FUzjeXu2pchhI1uz4NkC09Z itohvwQHEFrQ5ce6keEMxZSNMA== X-Google-Smtp-Source: ABdhPJwREAIyoWwzEBjVaThmXM40tYgQrRGOy9d+5VhJeghffoLdA4judKyHUPAddF2qigJGKoDiCw== X-Received: by 2002:a17:902:848c:b029:12c:daf3:94f1 with SMTP id c12-20020a170902848cb029012cdaf394f1mr30381424plo.50.1629755724988; Mon, 23 Aug 2021 14:55:24 -0700 (PDT) Received: from localhost ([2620:15c:202:201:20c4:3325:1567:8a97]) by smtp.gmail.com with UTF8SMTPSA id y67sm17289121pfg.218.2021.08.23.14.55.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 23 Aug 2021 14:55:24 -0700 (PDT) From: Matthew Wang To: j@w1.fi Cc: hostap@lists.infradead.org, Matthew Wang Subject: [PATCH v2] Use default IEs in wpa_supplicant_trigger_scan Date: Mon, 23 Aug 2021 14:55:19 -0700 Message-Id: <20210823215519.584033-1-matthewmwang@chromium.org> X-Mailer: git-send-email 2.33.0.rc2.250.ged5fa647cd-goog MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210823_145526_955799_144AD3D8 X-CRM114-Status: GOOD ( 22.64 ) X-Spam-Score: -0.4 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: wpa_supplicant_trigger_scan previously wouldn't include any of the IEs generated by wpa_supplicant_extra_ies. Instruct it to do so in most cases. This is necessary because MBO STAs are required to inc [...] Content analysis details: (-0.4 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:1034 listed in] [list.dnswl.org] -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.2 DKIMWL_WL_HIGH DKIMwl.org - High trust sender X-BeenThere: hostap@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Hostap" Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org wpa_supplicant_trigger_scan previously wouldn't include any of the IEs generated by wpa_supplicant_extra_ies. Instruct it to do so in most cases. This is necessary because MBO STAs are required to include MBO capabilities in their probe requests. Signed-off-by: Matthew Wang --- doc/dbus.doxygen | 2 +- wpa_supplicant/bgscan_learn.c | 2 +- wpa_supplicant/bgscan_simple.c | 2 +- wpa_supplicant/dbus/dbus_new_handlers.c | 6 +++-- wpa_supplicant/rrm.c | 2 +- wpa_supplicant/scan.c | 29 ++++++++++++++++++++++--- wpa_supplicant/scan.h | 4 +++- wpa_supplicant/sme.c | 2 +- 8 files changed, 38 insertions(+), 11 deletions(-) diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen index 8231aac41..1d93a1d78 100644 --- a/doc/dbus.doxygen +++ b/doc/dbus.doxygen @@ -206,7 +206,7 @@ fi.w1.wpa_supplicant1.CreateInterface. KeyValue typeDescriptionRequired TypesType of the scan. Possible values: "active", "passive"Yes SSIDsaayArray of SSIDs to scan for (applies only if scan type is active)No - IEsaayInformation elements to used in active scan (applies only if scan type is active)No + IEsaayInformation elements to used in active scan (applies only if scan type is active). Default IEs will be used in absence of this option.No Channelsa(uu)Array of frequencies to scan in form of (center, width) in MHz.No AllowRoambTRUE (or absent) to allow a roaming decision based on the results of this scan, FALSE to prevent a roaming decision.No diff --git a/wpa_supplicant/bgscan_learn.c b/wpa_supplicant/bgscan_learn.c index cb732f709..3d10d9118 100644 --- a/wpa_supplicant/bgscan_learn.c +++ b/wpa_supplicant/bgscan_learn.c @@ -305,7 +305,7 @@ static void bgscan_learn_timeout(void *eloop_ctx, void *timeout_ctx) } wpa_printf(MSG_DEBUG, "bgscan learn: Request a background scan"); - if (wpa_supplicant_trigger_scan(wpa_s, ¶ms)) { + if (wpa_supplicant_trigger_scan(wpa_s, ¶ms, true)) { wpa_printf(MSG_DEBUG, "bgscan learn: Failed to trigger scan"); eloop_register_timeout(data->scan_interval, 0, bgscan_learn_timeout, data, NULL); diff --git a/wpa_supplicant/bgscan_simple.c b/wpa_supplicant/bgscan_simple.c index 41a26df0d..4dd212b21 100644 --- a/wpa_supplicant/bgscan_simple.c +++ b/wpa_supplicant/bgscan_simple.c @@ -49,7 +49,7 @@ static void bgscan_simple_timeout(void *eloop_ctx, void *timeout_ctx) */ wpa_printf(MSG_DEBUG, "bgscan simple: Request a background scan"); - if (wpa_supplicant_trigger_scan(wpa_s, ¶ms)) { + if (wpa_supplicant_trigger_scan(wpa_s, ¶ms, true)) { wpa_printf(MSG_DEBUG, "bgscan simple: Failed to trigger scan"); eloop_register_timeout(data->scan_interval, 0, bgscan_simple_timeout, data, NULL); diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c index db9f30c9a..08be9da3b 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.c +++ b/wpa_supplicant/dbus/dbus_new_handlers.c @@ -1371,6 +1371,7 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message, struct wpa_driver_scan_params params; size_t i; dbus_bool_t allow_roam = 1; + bool custom_ies = false; os_memset(¶ms, 0, sizeof(params)); @@ -1397,6 +1398,7 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message, if (wpas_dbus_get_scan_ies(message, &variant_iter, ¶ms, &reply) < 0) goto out; + custom_ies = true; } else if (os_strcmp(key, "Channels") == 0) { if (wpas_dbus_get_scan_channels(message, &variant_iter, ¶ms, &reply) < 0) @@ -1444,7 +1446,7 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message, if (params.freqs && params.freqs[0]) { wpa_s->last_scan_req = MANUAL_SCAN_REQ; if (wpa_supplicant_trigger_scan(wpa_s, - ¶ms)) { + ¶ms, false)) { reply = wpas_dbus_error_scan_error( message, "Scan request rejected"); @@ -1470,7 +1472,7 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message, } wpa_s->last_scan_req = MANUAL_SCAN_REQ; - if (wpa_supplicant_trigger_scan(wpa_s, ¶ms)) { + if (wpa_supplicant_trigger_scan(wpa_s, ¶ms, !custom_ies)) { reply = wpas_dbus_error_scan_error( message, "Scan request rejected"); } diff --git a/wpa_supplicant/rrm.c b/wpa_supplicant/rrm.c index cf107ebaf..0e079380b 100644 --- a/wpa_supplicant/rrm.c +++ b/wpa_supplicant/rrm.c @@ -1034,7 +1034,7 @@ static void wpas_rrm_scan_timeout(void *eloop_ctx, void *timeout_ctx) } os_get_reltime(&wpa_s->beacon_rep_scan); if (wpa_s->scanning || wpas_p2p_in_progress(wpa_s) || - wpa_supplicant_trigger_scan(wpa_s, params)) + wpa_supplicant_trigger_scan(wpa_s, params, true)) wpas_rrm_refuse_request(wpa_s); params->duration = prev_duration; } diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c index 97a8d9a63..5a7b8a46f 100644 --- a/wpa_supplicant/scan.c +++ b/wpa_supplicant/scan.c @@ -278,19 +278,42 @@ static void wpas_trigger_scan_cb(struct wpa_radio_work *work, int deinit) * wpa_supplicant_trigger_scan - Request driver to start a scan * @wpa_s: Pointer to wpa_supplicant data * @params: Scan parameters + * @default_ies: Whether or not to use the default IEs in the probe request. + * Note that this will free any existing IEs set in @params, so this shouldn't + * be set if the IEs have already been set with wpa_supplicant_extra_ies. + * Otherwise, wpabuf_free will lead to a double-free. * Returns: 0 on success, -1 on failure */ int wpa_supplicant_trigger_scan(struct wpa_supplicant *wpa_s, - struct wpa_driver_scan_params *params) + struct wpa_driver_scan_params *params, + bool default_ies) { struct wpa_driver_scan_params *ctx; + struct wpabuf *ies = NULL; if (wpa_s->scan_work) { wpa_dbg(wpa_s, MSG_INFO, "Reject scan trigger since one is already pending"); return -1; } + if (default_ies) { + if (params->extra_ies_len) { + os_free((u8 *) params->extra_ies); + params->extra_ies = NULL; + params->extra_ies_len = 0; + } + ies = wpa_supplicant_extra_ies(wpa_s); + if (ies) { + params->extra_ies = wpabuf_head(ies); + params->extra_ies_len = wpabuf_len(ies); + } + } ctx = wpa_scan_clone_params(params); + if (ies) { + wpabuf_free(ies); + params->extra_ies = NULL; + params->extra_ies_len = 0; + } if (!ctx || radio_add_work(wpa_s, 0, "scan", 0, wpas_trigger_scan_cb, ctx) < 0) { @@ -566,7 +589,7 @@ void wpa_supplicant_set_default_scan_ies(struct wpa_supplicant *wpa_s) } -static struct wpabuf * wpa_supplicant_extra_ies(struct wpa_supplicant *wpa_s) +struct wpabuf * wpa_supplicant_extra_ies(struct wpa_supplicant *wpa_s) { struct wpabuf *extra_ie = NULL; u8 ext_capab[18]; @@ -1339,7 +1362,7 @@ scan: } #endif /* CONFIG_P2P */ - ret = wpa_supplicant_trigger_scan(wpa_s, scan_params); + ret = wpa_supplicant_trigger_scan(wpa_s, scan_params, false); if (ret && wpa_s->last_scan_req == MANUAL_SCAN_REQ && params.freqs && !wpa_s->manual_scan_freqs) { diff --git a/wpa_supplicant/scan.h b/wpa_supplicant/scan.h index d1780eb09..c74c79f2d 100644 --- a/wpa_supplicant/scan.h +++ b/wpa_supplicant/scan.h @@ -45,7 +45,8 @@ void wpa_supplicant_notify_scanning(struct wpa_supplicant *wpa_s, int scanning); struct wpa_driver_scan_params; int wpa_supplicant_trigger_scan(struct wpa_supplicant *wpa_s, - struct wpa_driver_scan_params *params); + struct wpa_driver_scan_params *params, + bool default_ies); struct wpa_scan_results * wpa_supplicant_get_scan_results(struct wpa_supplicant *wpa_s, struct scan_info *info, int new_scan); @@ -92,5 +93,6 @@ int wpa_add_scan_freqs_list(struct wpa_supplicant *wpa_s, enum hostapd_hw_mode band, struct wpa_driver_scan_params *params, bool is_6ghz); +struct wpabuf * wpa_supplicant_extra_ies(struct wpa_supplicant *wpa_s); #endif /* SCAN_H */ diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c index f2c42ff35..494407ad6 100644 --- a/wpa_supplicant/sme.c +++ b/wpa_supplicant/sme.c @@ -2549,7 +2549,7 @@ static void sme_obss_scan_timeout(void *eloop_ctx, void *timeout_ctx) params.low_priority = 1; wpa_printf(MSG_DEBUG, "SME OBSS: Request an OBSS scan"); - if (wpa_supplicant_trigger_scan(wpa_s, ¶ms)) + if (wpa_supplicant_trigger_scan(wpa_s, ¶ms, true)) wpa_printf(MSG_DEBUG, "SME OBSS: Failed to trigger scan"); else wpa_s->sme.sched_obss_scan = 1;