[PATCH v2 0/5] dpp: recover Enterprise provisioning from ROC dwell misalignment
Gustavo Bertoli
gubertoli at gmail.com
Wed Aug 5 10:53:47 PDT 2026
DPP Enterprise provisioning (sta-dot1x, certBag) is the hard case for
GAS when the Configurator is a station: the exchange is an off-channel
station-to-station rendezvous, each peer reachable only inside its own
remain-on-channel (ROC) dwell. The external CA signing delay forces many
comeback rounds and the large certBag fragments the Configuration
response, so one provisioning is many off-channel exchanges -- and a
frame sent just as the peer's dwell has lapsed is not received. The
current code treats the first such miss as terminal: the query restarts
on a new dialog token, abandoning the Configurator's pending entry
(keyed by dialog token).
This series adds bounded, same-dialog-token recovery so a missed
off-channel exchange is retried when the dwells realign. The failure
modes were observed on real off-channel hardware (a station Configurator
provisioning a station Enrollee) across repeated runs with external CA
signing delays up to 50 s: the unpatched tree loses provisioning at the
misaligned dwells; this series recovers it.
Changes in v2, addressing the review comments on 1/4 and 3/4:
- split the gas_server patch in two: the no-ACK rollback/resend (1/5)
and waiting for TX status before answering a Comeback Request (2/5),
each with its own rationale
- 1/5 commit message describes the lost-ACK case: the resent fragment
is detectable through the Fragment ID field and the requester
already drops it as a possible retry of the previous fragment
- 4/5 commit message spells out the transient TX failure (a
synchronous offchannel_send_action() failure on a lapsed ROC window)
and the duplicate fragment case (the responder retransmission after
a lost ACK)
The code itself is unchanged from v1; only the patch split and commit
messages differ.
Gustavo Bertoli (5):
gas_server: resend a response fragment after a lost ACK
gas_server: wait for TX status before answering a Comeback Request
gas_query: add comeback-recovery opt-in for DPP certBag
gas_query: retry GAS comeback requests instead of failing
tests: add DPP GAS comeback fault injection and regression tests
src/common/dpp.h | 2 +
src/common/gas_server.c | 41 +++++++++++++++
tests/hwsim/test_dpp.py | 82 +++++++++++++++++++++++++++++
wpa_supplicant/dpp_supplicant.c | 6 +++
wpa_supplicant/gas_query.c | 92 ++++++++++++++++++++++++++++-----
wpa_supplicant/gas_query.h | 2 +
6 files changed, 213 insertions(+), 12 deletions(-)
--
2.39.5
More information about the Hostap
mailing list