[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