From: Suchir Kavi <suchirkavi@gmail.com>
To: iwd@lists.linux.dev
Subject: [PATCH 2/3] netdev: reject reassociation while connect pending
Date: Wed, 15 Jul 2026 19:34:43 -0700 [thread overview]
Message-ID: <20260716023444.3512595-3-suchirkavi@gmail.com> (raw)
In-Reply-To: <20260716023444.3512595-1-suchirkavi@gmail.com>
netdev_reassociate() replaces netdev->handshake and unrefs the old
handshake without freeing netdev->ap or dequeuing a pending connection
work item. If a reassociation begins while an earlier attempt's radio
work is still queued (reachable since station_cannot_roam() does not
cover the connecting states), the stale auth proto keeps a raw pointer
to the freed handshake. On the PMKSA-cache path netdev_connect_common()
does not replace netdev->ap, and it re-inserts the already-queued
embedded work item; when the work finally runs,
netdev_begin_connection() starts the stale auth proto and sae_start()
dereferences the freed handshake:
#0 sae_choose_next_group <- reads handshake->ecc_sae_pts == NULL
#1 sae_start
#2 netdev_begin_connection
#3 netdev_connection_work_ready
#4 wiphy_radio_work_next
#5 get_scan_done
Mirror netdev_connect(), which already refuses to start while
netdev->connect_cmd_id or netdev->work.id is set. Both are zero at any
legitimate roam start since netdev_connect_ok() completes the work item,
and the station roam paths handle a negative return by failing the roam
cleanly.
Assisted-by: Claude:claude-fable-5
---
src/netdev.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/netdev.c b/src/netdev.c
index e639a1f8..dadd90da 100644
--- a/src/netdev.c
+++ b/src/netdev.c
@@ -4394,6 +4394,9 @@ int netdev_reassociate(struct netdev *netdev, const struct scan_bss *target_bss,
struct handshake_state *old_hs;
struct eapol_sm *old_sm;
+ if (netdev->connect_cmd_id || netdev->work.id)
+ return -EBUSY;
+
old_sm = netdev->sm;
old_hs = netdev->handshake;
--
2.54.0
next prev parent reply other threads:[~2026-07-16 2:36 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-16 2:34 [PATCH 0/3] Fix two station roaming crashes Suchir Kavi
2026-07-16 2:34 ` [PATCH 1/3] station: fix use-after-free in preauthenticate_cb Suchir Kavi
2026-07-16 2:34 ` Suchir Kavi [this message]
2026-07-16 2:34 ` [PATCH 3/3] station: fix NULL deref in ap_directed_roam Suchir Kavi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260716023444.3512595-3-suchirkavi@gmail.com \
--to=suchirkavi@gmail.com \
--cc=iwd@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.