{"id":2226362,"url":"http://patchwork.ozlabs.org/api/1.2/patches/2226362/?format=json","web_url":"http://patchwork.ozlabs.org/project/hostap/patch/20260422122424.43776-18-andrei.otcheretianski@intel.com/","project":{"id":22,"url":"http://patchwork.ozlabs.org/api/1.2/projects/22/?format=json","name":"HostAP Development","link_name":"hostap","list_id":"hostap.lists.infradead.org","list_email":"hostap@lists.infradead.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260422122424.43776-18-andrei.otcheretianski@intel.com>","list_archive_url":null,"date":"2026-04-22T12:23:08","name":"[17/92] NAN: Save the NPBA from successful bootstrapping","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"69b93d19f5f469b93aee6a1d9db8c4db2d461118","submitter":{"id":62065,"url":"http://patchwork.ozlabs.org/api/1.2/people/62065/?format=json","name":"Andrei Otcheretianski","email":"andrei.otcheretianski@intel.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/hostap/patch/20260422122424.43776-18-andrei.otcheretianski@intel.com/mbox/","series":[{"id":501001,"url":"http://patchwork.ozlabs.org/api/1.2/series/501001/?format=json","web_url":"http://patchwork.ozlabs.org/project/hostap/list/?series=501001","date":"2026-04-22T12:23:05","name":"Add NAN PASN pairing support","version":1,"mbox":"http://patchwork.ozlabs.org/series/501001/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2226362/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2226362/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=H2WUQzP7;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256\n header.s=Intel header.b=ldu9iywd;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0z2k4W3rz1yHm\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 22:25:34 +1000 (AEST)","from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wFWde-0000000A2n5-29Tm;\n\tWed, 22 Apr 2026 12:25:06 +0000","from mgamail.intel.com ([192.198.163.17])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wFWda-0000000A2g3-2jAX\n\tfor hostap@lists.infradead.org;\n\tWed, 22 Apr 2026 12:25:04 +0000","from orviesa010.jf.intel.com ([10.64.159.150])\n  by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 22 Apr 2026 05:25:02 -0700","from iapp347.iil.intel.com (HELO 87c02287900a.iil.intel.com)\n ([10.167.28.6])\n  by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 22 Apr 2026 05:25:01 -0700"],"DKIM-Signature":["v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:\n\tMessage-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=9oIpDEQCA0SC61OlQwf1geJguAw0qz93ntx4vRO0UoI=; b=H2WUQzP7fc5XlR\n\t0NFIRwBKT7E70/Rq3X7rduk40caq7tN+8AN/51wtG4cATagnoMFGKA3E7f9H4QeGKMTUtuJLwddkm\n\tF4ic58GbuVLZHtq22y+vTifEG2b6hYUCNoZbPvLSqsxmp2OvjKY543HKJLtz6lB7bN+XN/eN7ggjG\n\tINh8ZGRvEJf6xRTpNqVIYcgOBvon6iTgwUbQn+lnWvNoNEl7XFo6gyXrXEFIEzZi1TxyBzlfW7T5O\n\t3TpK0IYVsIgp8AT5yZkJtcQLXspWDkhakbNBrNIk/bEgJOgy/wIbp3qnGOlv11OPmz+yhKHRrfGcK\n\tM/Ts2/BwFkjAxkTkq6KQ==;","v=1; a=rsa-sha256; c=relaxed/simple;\n  d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n  t=1776860702; x=1808396702;\n  h=from:to:cc:subject:date:message-id:in-reply-to:\n   references:mime-version:content-transfer-encoding;\n  bh=/sQk8zvqZixkPrTl3Re2UsSlfufFu8EWLbgwdMtRQw8=;\n  b=ldu9iywdMS0WMdpNvCdwitGnsnfXcVP78dST5aNWm2eby4dyhzmCxmDX\n   09q82quO75O/+mtA3BXQHAHhb/IUEEWBA2QY/R72reQG+vts8VHMOe7hE\n   /X0IoRBEMDTIiKWFI1UykEuM9M+hZg2T2HZoYhSZSBz0EDpN2GV0AlQMB\n   kV+Cpd+ih6P4n+9DlxM8G/ySrWKMXoSepKYBtVG7Q0vDYZBCvXVwMHN+C\n   Kr+8722tH41m6qKEjN4Wh5YP6MLxEHghmkPBVy+AKDpQjuiCvW/i2LTIp\n   49N69RiCfIRDx9IjObGCtNC6g+nCR3BZ4sim/SWmVOcg2WUJgBLuZKcNw\n   A==;"],"X-CSE-ConnectionGUID":["CotMxICISeyRmwL2h52PoQ==","/Kz2qkUSQyymXNP7J9VLRQ=="],"X-CSE-MsgGUID":["ls8Gh32lTUKCLrMMJXKF9A==","KKPT5iGAREyJ+kN2ptFuzg=="],"X-IronPort-AV":["E=McAfee;i=\"6800,10657,11764\"; a=\"77687196\"","E=Sophos;i=\"6.23,192,1770624000\";\n   d=\"scan'208\";a=\"77687196\"","E=Sophos;i=\"6.23,192,1770624000\";\n   d=\"scan'208\";a=\"231444899\""],"X-ExtLoop1":"1","From":"Andrei Otcheretianski <andrei.otcheretianski@intel.com>","To":"hostap@lists.infradead.org","Cc":"vamsin@qti.qualcomm.com,\n\tmaheshkkv@google.com,\n\tAvraham Stern <avraham.stern@intel.com>","Subject":"[PATCH 17/92] NAN: Save the NPBA from successful bootstrapping","Date":"Wed, 22 Apr 2026 15:23:08 +0300","Message-ID":"<20260422122424.43776-18-andrei.otcheretianski@intel.com>","X-Mailer":"git-send-email 2.53.0","In-Reply-To":"<20260422122424.43776-1-andrei.otcheretianski@intel.com>","References":"<20260422122424.43776-1-andrei.otcheretianski@intel.com>","MIME-Version":"1.0","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20260422_052503_303735_12D6BDD8 ","X-CRM114-Status":"GOOD (  16.05  )","X-Spam-Score":"-4.4 (----)","X-Spam-Report":"Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  From: Avraham Stern <avraham.stern@intel.com> NAN pairing\n   PASN frames shall include the NAN Pairing Bootstrapping attribute (NPBA)\n from\n    the bootstrapping flow. Save the NPBA after a successful bootstrapping so\n    it can be used during pairing.\n Content analysis details:   (-4.4 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n -2.3 RCVD_IN_DNSWL_MED      RBL: Sender listed at https://www.dnswl.org/,\n                             medium trust\n                             [192.198.163.17 listed in list.dnswl.org]\n  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record\n -0.0 SPF_PASS               SPF: sender matches SPF record\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from\n author's\n                             domain\n -0.1 DKIM_VALID_EF          Message has a valid DKIM or DK signature from\n                             envelope-from domain\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]\n -0.0 DKIMWL_WL_HIGH         DKIMwl.org - High trust sender","X-BeenThere":"hostap@lists.infradead.org","X-Mailman-Version":"2.1.34","Precedence":"list","List-Id":"<hostap.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/hostap>,\n <mailto:hostap-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/hostap/>","List-Post":"<mailto:hostap@lists.infradead.org>","List-Help":"<mailto:hostap-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/hostap>,\n <mailto:hostap-request@lists.infradead.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"\"Hostap\" <hostap-bounces@lists.infradead.org>","Errors-To":"hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"},"content":"From: Avraham Stern <avraham.stern@intel.com>\n\nNAN pairing PASN frames shall include the NAN Pairing Bootstrapping\nattribute (NPBA) from the bootstrapping flow. Save the NPBA after a\nsuccessful bootstrapping so it can be used during pairing.\n\nSigned-off-by: Avraham Stern <avraham.stern@intel.com>\n---\n src/nan/nan.c           |  2 ++\n src/nan/nan_bootstrap.c | 39 ++++++++++++++++++++++++++++-----------\n src/nan/nan_i.h         |  3 +++\n 3 files changed, 33 insertions(+), 11 deletions(-)","diff":"diff --git a/src/nan/nan.c b/src/nan/nan.c\nindex 6bf9d5a21d..ab8b997a3c 100644\n--- a/src/nan/nan.c\n+++ b/src/nan/nan.c\n@@ -149,6 +149,8 @@ static void nan_del_peer(struct nan_data *nan, struct nan_peer *peer)\n \t\tnan_ndp_setup_stop(nan, peer);\n \t}\n \n+\twpabuf_free(peer->bootstrap.npba);\n+\tpeer->bootstrap.npba = NULL;\n \tnan_bootstrap_reset(nan, peer);\n \tdl_list_del(&peer->list);\n \tnan_peer_flush_avail(&peer->info);\ndiff --git a/src/nan/nan_bootstrap.c b/src/nan/nan_bootstrap.c\nindex 7ce70f5211..1288ee0470 100644\n--- a/src/nan/nan_bootstrap.c\n+++ b/src/nan/nan_bootstrap.c\n@@ -65,7 +65,7 @@ void nan_bootstrap_reset(struct nan_data *nan, struct nan_peer *peer)\n \n \t/*\n \t * Do not use memset to reset all data to preserve the peer's\n-\t * supported bootstrap methods.\n+\t * supported bootstrap methods and the NPBA buffer if present.\n \t */\n \tpeer->bootstrap.cookie = NULL;\n \tpeer->bootstrap.cookie_len = 0;\n@@ -200,13 +200,16 @@ static void nan_bootstrap_timeout(void *eloop_data, void *user_ctx)\n  * @status: Status field from the request\n  * @handle: Follow-up handle\n  * @req_instance_id: Follow-up instance ID\n+ * @npba: NPBA attribute from the request\n+ * @npba_len: Length of the NPBA attribute\n  */\n static void nan_bootstrap_handle_rx_request(struct nan_data *nan,\n \t\t\t\t\t    struct nan_peer *peer,\n \t\t\t\t\t    u8 dialog_token, u16 pbm,\n \t\t\t\t\t    const u8 *cookie,\n \t\t\t\t\t    u8 cookie_len, u8 status,\n-\t\t\t\t\t    int handle, u8 req_instance_id)\n+\t\t\t\t\t    int handle, u8 req_instance_id,\n+\t\t\t\t\t    const u8 *npba, u16 npba_len)\n {\n \tstruct wpabuf *attr = NULL;\n \tu16 supported_methods;\n@@ -335,6 +338,19 @@ send_response:\n \t\treturn;\n \t}\n \n+\tif (peer->bootstrap.status == NAN_PBA_STATUS_ACCEPTED) {\n+\t\twpabuf_free(peer->bootstrap.npba);\n+\t\tpeer->bootstrap.npba = wpabuf_alloc(npba_len + 3);\n+\t\tif (peer->bootstrap.npba) {\n+\t\t\twpabuf_put_u8(peer->bootstrap.npba, NAN_ATTR_NPBA);\n+\t\t\twpabuf_put_le16(peer->bootstrap.npba, npba_len);\n+\t\t\twpabuf_put_data(peer->bootstrap.npba, npba, npba_len);\n+\t\t} else {\n+\t\t\twpa_printf(MSG_DEBUG,\n+\t\t\t\t   \"NAN: Bootstrap: Failed to store NPBA\");\n+\t\t}\n+\t}\n+\n \tnan->cfg->bootstrap_completed(nan->cfg->cb_ctx,\n \t\t\t\t      peer->nmi_addr,\n \t\t\t\t      peer->bootstrap.requested_pbm,\n@@ -382,6 +398,8 @@ bool nan_bootstrap_handle_rx(struct nan_data *nan, const u8 *peer_nmi,\n \tu8 dialog_token, type, status, reason_code, cookie_len = 0;\n \tu16 pbm, comeback_after = 0;\n \tstruct nan_peer *peer;\n+\tconst u8 *orig_npba = npba;\n+\tu16 orig_npba_len = npba_len;\n \n \tif (!nan_bootstrap_supported(nan)) {\n \t\twpa_printf(MSG_DEBUG,\n@@ -463,10 +481,10 @@ bool nan_bootstrap_handle_rx(struct nan_data *nan, const u8 *peer_nmi,\n \t\t\t}\n \t\t}\n \n-\t\tnan_bootstrap_handle_rx_request(nan, peer, dialog_token,\n-\t\t\t\t\t\tpbm, cookie, cookie_len,\n-\t\t\t\t\t\tstatus, handle,\n-\t\t\t\t\t\treq_instance_id);\n+\t\tnan_bootstrap_handle_rx_request(nan, peer, dialog_token, pbm,\n+\t\t\t\t\t\tcookie, cookie_len, status,\n+\t\t\t\t\t\thandle, req_instance_id,\n+\t\t\t\t\t\torig_npba, orig_npba_len);\n \t\treturn true;\n \t}\n \n@@ -562,7 +580,6 @@ int nan_bootstrap_request(struct nan_data *nan, int handle,\n \t\t\t  bool auth)\n {\n \tstruct nan_peer *peer;\n-\tstruct wpabuf *npba;\n \tint ret;\n \n \tif (!nan || !nan->nan_started)\n@@ -630,15 +647,15 @@ int nan_bootstrap_request(struct nan_data *nan, int handle,\n \tpeer->bootstrap.handle = handle;\n \tpeer->bootstrap.req_instance_id = req_instance_id;\n \n-\tnpba = nan_bootstrap_build_npba(nan, peer);\n-\tif (!npba) {\n+\tpeer->bootstrap.npba = nan_bootstrap_build_npba(nan, peer);\n+\tif (!peer->bootstrap.npba) {\n \t\tnan_bootstrap_reset(nan, peer);\n \t\treturn -1;\n \t}\n \n \tret = nan->cfg->transmit_followup(nan->cfg->cb_ctx, peer->nmi_addr,\n-\t\t\t\t\t  npba, handle, req_instance_id);\n-\twpabuf_free(npba);\n+\t\t\t\t\t  peer->bootstrap.npba, handle,\n+\t\t\t\t\t  req_instance_id);\n \tif (ret) {\n \t\twpa_printf(MSG_DEBUG,\n \t\t\t   \"NAN: Bootstrap: Failed to transmit follow-up\");\ndiff --git a/src/nan/nan_i.h b/src/nan/nan_i.h\nindex 14eee57949..4983184690 100644\n--- a/src/nan/nan_i.h\n+++ b/src/nan/nan_i.h\n@@ -422,6 +422,7 @@ struct nan_ndl {\n  * @in_progress: Whether a bootstrap exchange is in progress\n  * @handle: Follow-up context handle for the ongoing bootstrap request\n  * @req_instance_id: Instance ID of the bootstrap request\n+ * @npba: The NPBA attribute from the last successful bootstrap\n  */\n struct nan_bootstrap {\n \tu16 supported_methods;\n@@ -441,6 +442,8 @@ struct nan_bootstrap {\n \n \tint handle;\n \tu8 req_instance_id;\n+\n+\tstruct wpabuf *npba;\n };\n \n /**\n","prefixes":["17/92"]}