From 323a51cc01985bdf73168a29a8ef77c446b9df2d Mon Sep 17 00:00:00 2001 From: Ilan Peer Date: Wed, 3 Apr 2019 18:17:12 +0300 Subject: [PATCH] nl80211: Handle NL80211_CMD_PROBE_CLIENT command response When processing the NL80211_CMD_PROBE_CLIENT command response, the nl80211 layer in the kernel sends a response containing the cookie associated with the client probe request. This response was not handled by driver_nl80211.c when sending the command, and it was mistakenly handled as an asynchronous event. This incorrect event did not include the MAC/ACK attributes, so it was ignored in practice, but nevertheless, the command response should not be processed as an event. Fix this by reading the response as part of the sending the command flow. Signed-off-by: Ilan Peer --- src/drivers/driver_nl80211.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index 7b3281fa0..21d1398ec 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -8286,6 +8286,7 @@ static void nl80211_poll_client(void *priv, const u8 *own_addr, const u8 *addr, struct i802_bss *bss = priv; struct wpa_driver_nl80211_data *drv = bss->drv; struct nl_msg *msg; + u64 cookie; int ret; if (!drv->poll_command_supported) { @@ -8299,11 +8300,16 @@ static void nl80211_poll_client(void *priv, const u8 *own_addr, const u8 *addr, return; } - ret = send_and_recv_msgs(drv, msg, NULL, NULL); + ret = send_and_recv_msgs(drv, msg, cookie_handler, &cookie); if (ret < 0) { wpa_printf(MSG_DEBUG, "nl80211: Client probe request for " MACSTR " failed: ret=%d (%s)", MAC2STR(addr), ret, strerror(-ret)); + } else { + wpa_printf(MSG_DEBUG, + "nl80211: Client probe request addr=" MACSTR + " cookie=%llu", MAC2STR(addr), + (long long unsigned int) cookie); } }