[PATCH 3/4] gas_query: retry GAS comeback requests instead of failing

Jouni Malinen j at w1.fi
Tue Aug 4 01:36:54 PDT 2026


On Tue, Jun 23, 2026 at 05:57:16PM +0200, Gustavo Bertoli wrote:
> A transient TX failure, a missed comeback response, or a duplicate fragment
> (a retransmit after a lost ACK) ended the whole GAS query, even though the
> responder keeps its dialog entry alive. When comeback_recover is set, retry
> the comeback request on the same dialog token in each of those cases instead
> of giving up.

> diff --git a/wpa_supplicant/gas_query.c b/wpa_supplicant/gas_query.c
>  	if (gas_query_tx(gas, query, req, wait_time) < 0) {
>  		wpa_printf(MSG_DEBUG, "GAS: Failed to send Action frame to "
>  			   MACSTR, MAC2STR(query->addr));
> -		gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
> +		if (query->wait_comeback && query->comeback_recover)
> +			eloop_register_timeout(0,
> +					       GAS_QUERY_WAIT_TIME_COMEBACK * 1000,
> +					       gas_query_tx_comeback_timeout,
> +					       gas, query);
> +		else
> +			gas_query_done(gas, query, GAS_QUERY_INTERNAL_ERROR);
>  	}

What is behind this TX failure case? Is this that "transient TX failure"
from the commit message? I can understand a missed comeback response,
but when would this TX operation fail?

Is the "duplicate fragment" case referring to functionality from patch
1? If so, that gives even more reason for my comments on that patch if
it does indeed need changes on the peer device as well.

-- 
Jouni Malinen                                            PGP id EFC895FA



More information about the Hostap mailing list