From nobody Mon Feb 19 16:10:22 2024 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TdnZ64Ts9z5C4qF; Mon, 19 Feb 2024 16:10:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TdnZ62jkGz4Nv6; Mon, 19 Feb 2024 16:10:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1708359022; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CahYoabJMu+le2e5tw5Dqia2eU0sgt1YFTDrNam61bE=; b=lU3AmAdzpwM8/q0Q0wkZRKyxkz7fpVXKVbD7cCwlLPJzfMvtmyJEKfs7mMtlydfp2x9HWN VX2czwImSD9MtHiKOHg2X8Nkc3jGNXODiYBfZ1lRX6WnBS5GaigGVIrMlaejgmi6e63oxr FIcK/5eqna0aW4v8xpNdYsJP2yDoOe9FJyB4Zq2JUNKnsOvS9pgdlEjtCSZetRtnkMXulR VjBsPRPl8pkWJrZ2ONCON/go28oQkjBE0Nhpu6aQ9bzk1pjS1J+2r7Q17FXJvJuwN7Mhcv h1YzxmC7mj7HGtag/nh/KXIlLuXjMObJoNzWtjAwhXrq1/ObGtzJ0xSdczf74w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1708359022; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CahYoabJMu+le2e5tw5Dqia2eU0sgt1YFTDrNam61bE=; b=kX/7cE7Zf5bdW7x2+IDrXjEH07Qb+y39bXu/sAB2cDWpmtOWO5Nt9rveFhZqdBcyz2wjyE 7CbV2XYPFM1ur9B04U6eetZt/aopfThMBPQesmxfVZeqQj23IMp3IP8l0K9A3O/1dthT7J Xs2l0X40ccLdsYlhl26M+SxAbJDy41KoigU5L5NCnqQTU/z2/QcfC+5OXK7JBktgDwTyOo 1D0CzvvF71H5Z/I9LSf3kc4fCtnrFOoHlAQ7E/LSIrL7CL/9JT9SCYv0cHVqKEw2I66hKb t635nHQZHohNgU+NKptmYWOk8sXd/Ulyo8fGucfdVuNpnbfYYj8UXg7qLlpI4g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1708359022; a=rsa-sha256; cv=none; b=mcurYT+CAJUmH31YEf43dXkkxryaHtRo81emAp+DA7nB+05lJ8xWdX2SaySUfz8LwgTwnd TTZGeICH12NhNLUN2owAElSnu1t48WW5G+vHigylrK29Zi0nHDbfdhuvcGHobyQLCdS1Ii kO7FExmIqONj0ivVEt3tMXgEBcHJB92c2g1bJvtM8y3aj8Stt+gZmNikj9rZ2kHu7qjEyp D7ffQfIMhuUvMXcRf858tlCTk8RDDUSKzOFElwJAffDE066qRoPtr3JwKJsI8K7rayne/k qmM/oJlA7OW/MnUKJHTES/ZQbP5adAKeXsp7Mhkiq62b/jXmjnwXrkJDyM1YYg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4TdnZ61p38zh9x; Mon, 19 Feb 2024 16:10:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 41JGAMA1035900; Mon, 19 Feb 2024 16:10:22 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 41JGAMvw035897; Mon, 19 Feb 2024 16:10:22 GMT (envelope-from git) Date: Mon, 19 Feb 2024 16:10:22 GMT Message-Id: <202402191610.41JGAMvw035897@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: "Bjoern A. Zeeb" Subject: git: eecf453c0e56 - releng/13.3 - net80211: make sure calls to (*iv_update_bss)() are locked List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/releng/13.3 X-Git-Reftype: branch X-Git-Commit: eecf453c0e56c179539756212977456c9561c71c Auto-Submitted: auto-generated The branch releng/13.3 has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=eecf453c0e56c179539756212977456c9561c71c commit eecf453c0e56c179539756212977456c9561c71c Author: Bjoern A. Zeeb AuthorDate: 2024-01-19 14:52:03 +0000 Commit: Bjoern A. Zeeb CommitDate: 2024-02-19 16:07:13 +0000 net80211: make sure calls to (*iv_update_bss)() are locked It turned out thare various calls into (*iv_update_bss)(), that is direct changes to vap->iv_bss in the old days, happened without synchronisation. Use locking assertions to document the requirement or status quo at some callers given ic locking will eventually have to be dealt with. Approved by: re (cperciva) Reviewed by: cc Differential Revision: https://reviews.freebsd.org/D43512 (cherry picked from commit 49619f73151aeaca4cef5adf631253da04a46e19) (cherry picked from commit f8ec0379435745d800ec149f9289401c792e61bb) --- sys/net80211/ieee80211_node.c | 15 +++++++++++++++ sys/net80211/ieee80211_proto.c | 2 ++ 2 files changed, 17 insertions(+) diff --git a/sys/net80211/ieee80211_node.c b/sys/net80211/ieee80211_node.c index 0f0ecf37fe94..c851d83d8d47 100644 --- a/sys/net80211/ieee80211_node.c +++ b/sys/net80211/ieee80211_node.c @@ -171,6 +171,10 @@ ieee80211_node_vattach(struct ieee80211vap *vap) void ieee80211_node_latevattach(struct ieee80211vap *vap) { + + /* XXX should ieee80211_vap_attach(), our only caller hold the lock? */ + IEEE80211_UNLOCK_ASSERT(vap->iv_ic); + if (vap->iv_opmode == IEEE80211_M_HOSTAP) { /* XXX should we allow max aid to be zero? */ if (vap->iv_max_aid < IEEE80211_AID_MIN) { @@ -191,7 +195,9 @@ ieee80211_node_latevattach(struct ieee80211vap *vap) } } + IEEE80211_LOCK(vap->iv_ic); ieee80211_reset_bss(vap); + IEEE80211_UNLOCK(vap->iv_ic); vap->iv_auth = ieee80211_authenticator_get(vap->iv_bss->ni_authmode); } @@ -201,11 +207,16 @@ ieee80211_node_vdetach(struct ieee80211vap *vap) { struct ieee80211com *ic = vap->iv_ic; + /* XXX should ieee80211_vap_detach(), our only caller hold the lock? */ + IEEE80211_UNLOCK_ASSERT(vap->iv_ic); + ieee80211_node_table_reset(&ic->ic_sta, vap); + IEEE80211_LOCK(ic); if (vap->iv_bss != NULL) { ieee80211_free_node(vap->iv_bss); vap->iv_update_bss(vap, NULL); } + IEEE80211_UNLOCK(ic); if (vap->iv_aid_bitmap != NULL) { IEEE80211_FREE(vap->iv_aid_bitmap, M_80211_NODE); vap->iv_aid_bitmap = NULL; @@ -455,6 +466,8 @@ ieee80211_reset_bss(struct ieee80211vap *vap) struct ieee80211com *ic = vap->iv_ic; struct ieee80211_node *ni, *obss; + IEEE80211_LOCK_ASSERT(ic); + ieee80211_node_table_reset(&ic->ic_sta, vap); /* XXX multi-bss: wrong */ ieee80211_vap_reset_erp(vap); @@ -854,7 +867,9 @@ ieee80211_sta_join1(struct ieee80211_node *selbs) /* * Committed to selbs, setup state. */ + IEEE80211_LOCK(ic); /* XXX may recurse here, check callers. */ obss = vap->iv_update_bss(vap, selbs); /* NB: caller assumed to bump refcnt */ + IEEE80211_UNLOCK(ic); /* * Check if old+new node have the same address in which * case we can reassociate when operating in sta mode. diff --git a/sys/net80211/ieee80211_proto.c b/sys/net80211/ieee80211_proto.c index cf467c08462c..5ed9f2e3f50e 100644 --- a/sys/net80211/ieee80211_proto.c +++ b/sys/net80211/ieee80211_proto.c @@ -830,6 +830,8 @@ vap_update_bss(struct ieee80211vap *vap, struct ieee80211_node *ni) { struct ieee80211_node *obss; + IEEE80211_LOCK_ASSERT(vap->iv_ic); + obss = vap->iv_bss; vap->iv_bss = ni;