From nobody Sat Jun 13 02:08:20 2026 Received: from mail-dy1-f176.google.com (mail-dy1-f176.google.com [74.125.82.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C2EDB402B82 for ; Mon, 11 May 2026 15:31:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778513469; cv=none; b=pyY7g8VIb8y3HZ+r2Q65q4npwfGQR7P58SK2LTwp1gxZzqw2HxuTMjBPgcU31a66vEitnhoMi11+lSD8wYMl/majhtf05D232ERM+2oDEiF+FG5ZBFZIejDqm6YHzRxUzLa3+2oAS5bEBoLOGOBJKllKGCBTScpusFcMOvxdb14= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778513469; c=relaxed/simple; bh=SgSiyMa+zj6kS5NN2ljh0uTfNzIqhtjSmTnWZr5hJjE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hyDfmeP8jN5+opdFbu0elYoymaQlqmSR07tuet9h23fdA6x6mzIl5pod6KF63zEO78enk6tXor+QD+BaK61u1g30WAc71P72Z/qvJ+G9J20tut7l1hWBP+pos4hQT1e79n9rHrfX+V6vN3GTbz3AyG67DOyBR4+i5TPpo4T7pSk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=pMQBQqes; arc=none smtp.client-ip=74.125.82.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="pMQBQqes" Received: by mail-dy1-f176.google.com with SMTP id 5a478bee46e88-2c156c4a9efso5913246eec.1 for ; Mon, 11 May 2026 08:31:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778513467; x=1779118267; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7YautqB2qa5gfJ4hkw5WBxG8wVsiKhkZ8EXwO8lSOmU=; b=pMQBQqesbR4y6bn4SzKr7p4IWybaORq/VdprQbp2mfFYmmrXN63KAQ0fMAoREf3rA1 2Sef619bHhyHcUF84dn8st6oFlN53mcr7l+HDAz0UoKiCUphVFiehIvNPDGUPpBWj2/p dvgL+ZUol+DdODhNrmvOupGbn/S7Xr0NorDhn6LlSPb/bVT8B8FAes4VuRtChnDT0DEI ZWxijtpKUP3sGDgqh4WHVj1HKDkyYlxngDBDhCXUkRMnCWTRW9Kdf4qK2EREP9g7uvR5 u2HlzEvL00EXIbtbe8ScBLBTYqTwGqcdTJTiQ5zH+5PbwiISKRbg9LG6rUL0pKKs1uoj pFxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778513467; x=1779118267; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=7YautqB2qa5gfJ4hkw5WBxG8wVsiKhkZ8EXwO8lSOmU=; b=VeYELffEUlAEQFWCx9fB6YmmUl2y+9CNUWQpKjLivWXQ36Dphbp6SsMYhLBIr0AM7l z8FUjv9ZEETYoRR4P9q2oYrjojeewvdNCw73IKh/cKAbvSxgDHDyjywuV5ilrKNHGdi5 a97R2zsJF865B6MrPxkR5psw1vRGgHE/uemqKJNSYOyl0gQLJPFOAosQManowk4Od3AK nvNdLRrNG/kFHGu2BIyh1aaJTyN01bRyMNcPRZyT1hbADRT9Acn6ZUgal5Jb4tUyf5m/ Peoo6g7WXn5jnKL6Qyxj65Wn2jbIJUn0JIupYaWXH+LnkyIwV/1B4SA8DuvAEQhvDXC4 ov4Q== X-Forwarded-Encrypted: i=1; AFNElJ+nZCH6EJYz9/W6GxSeL2XcoCmEuxrFqgg3DwYDHwj/TEerVLGgW0PrEj5ZTCx2N0/2VpqqsQrfMRKYEJ4=@vger.kernel.org X-Gm-Message-State: AOJu0YyixjdCJ4qWmCLjN6VmriL+9yzGlgaJU/CJkvb5DFDybonMIq3Q yyuey0IUgFk+mpKOU2di4mOjAOhcbQ6XRAbftdmRF+bUiH6M1D+1EVW7 X-Gm-Gg: Acq92OFeIFzTBLfzHy/YqeTLdg7jOgysgvFWWjOu9mQ7w3W7z+UewXSdmXJXJe7y5AW dOnOsgbP4wND1aYvj8/VnFVBjMs/AO+JouVXZAaAa5oISUIzqKyYDdiSgp+iVCqilfAmt2OWsvV VA8lnHCC/Ws9hKyEAfdeyGjGnXGxkLJGGU7O9e0jp+mqJIjxldkts+aRFQAoCtWBy5+3+pcQ9a6 ZmKckdC2lmR+9SUIl5Fur5qL5cQjz97B+ejE3aihAFg0BS4LFXIWZZ5R/CIETpAJqEqWUJMlvLB 1IVsQY0apVVsr+jiNIPTDucdCfGCuJ29Juqlrlj5cGAlMefuoIJQ9Pcph5/ey7ndP/TZKF7ixpX cfvnQzga1OINlZzVKGcuy6a5ukl6Da6d0CrN7GKFGSt4EHdiGiBboudOU6DICJcVkgKDISYOnWg D29L+YCjMFpTafs7atSR8l9YeWtINWu1Y4LeY= X-Received: by 2002:a05:7022:4182:b0:12a:6c7e:bef2 with SMTP id a92af1059eb24-131967d5082mr12940006c88.7.1778513466470; Mon, 11 May 2026 08:31:06 -0700 (PDT) Received: from VM-16-24-fedora.. ([43.153.32.141]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2f8859eafcdsm17464080eec.6.2026.05.11.08.31.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 08:31:06 -0700 (PDT) From: alexjlzheng@gmail.com X-Google-Original-From: alexjlzheng@tencent.com To: sd@queasysnail.net, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org, hannes@stressinduktion.org, albinwyang@tencent.com, shenyangyang4@huawei.com, kuniyu@google.com Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jinliang Zheng Subject: [PATCH net v4 v4 1/3] macsec: introduce dedicated workqueue for SA crypto cleanup Date: Mon, 11 May 2026 23:30:58 +0800 Message-ID: <20260511153102.2640368-2-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260511153102.2640368-1-alexjlzheng@tencent.com> References: <20260511153102.2640368-1-alexjlzheng@tencent.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jinliang Zheng Introduce a dedicated ordered workqueue, macsec_wq, which will be used by subsequent patches to defer SA crypto cleanup (crypto_free_aead and related teardown) out of softirq context. Using a dedicated workqueue instead of system_wq allows macsec_exit() to drain exactly the work items belonging to this module via destroy_workqueue(), without interfering with unrelated work items on system_wq or causing unexpected delays elsewhere. rcu_barrier() in macsec_exit() ensures all in-flight rcu_work callbacks have enqueued their work items before destroy_workqueue() drains and destroys the queue, making the two-step teardown correct and complete. The same sequence is kept in the error path of macsec_init() as a precaution, to mirror macsec_exit() and stay safe if work ever becomes queueable before this point in the future. While at it, rename the error labels in macsec_init() from the resource-named style (rtnl:, notifier:, wq:) to the err_xxx: style (err_rtnl:, err_notifier:, err_destroy_wq:) to align with the broader kernel convention. Signed-off-by: Jinliang Zheng Reviewed-by: Sabrina Dubroca --- drivers/net/macsec.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index f6cad0746a02..35284ff7a17e 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@ -26,6 +26,8 @@ =20 #include =20 +static struct workqueue_struct *macsec_wq; + /* SecTAG length =3D macsec_eth_header without the optional SCI */ #define MACSEC_TAG_LEN 6 =20 @@ -4450,25 +4452,35 @@ static int __init macsec_init(void) { int err; =20 + macsec_wq =3D alloc_workqueue("macsec", WQ_UNBOUND, 0); + if (!macsec_wq) + return -ENOMEM; + pr_info("MACsec IEEE 802.1AE\n"); err =3D register_netdevice_notifier(&macsec_notifier); if (err) - return err; + goto err_destroy_wq; =20 err =3D rtnl_link_register(&macsec_link_ops); if (err) - goto notifier; + goto err_notifier; =20 err =3D genl_register_family(&macsec_fam); if (err) - goto rtnl; + goto err_rtnl; =20 return 0; =20 -rtnl: +err_rtnl: rtnl_link_unregister(&macsec_link_ops); -notifier: +err_notifier: unregister_netdevice_notifier(&macsec_notifier); +err_destroy_wq: + /* Precautionary, mirrors macsec_exit() to stay safe if work + * ever becomes queueable before this point in the future. + */ + rcu_barrier(); + destroy_workqueue(macsec_wq); return err; } =20 @@ -4478,6 +4490,7 @@ static void __exit macsec_exit(void) rtnl_link_unregister(&macsec_link_ops); unregister_netdevice_notifier(&macsec_notifier); rcu_barrier(); + destroy_workqueue(macsec_wq); } =20 module_init(macsec_init); --=20 2.39.3 From nobody Sat Jun 13 02:08:20 2026 Received: from mail-dy1-f173.google.com (mail-dy1-f173.google.com [74.125.82.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA478407575 for ; Mon, 11 May 2026 15:31:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778513473; cv=none; b=eqb4n5bApqB+r0y4SWxsiX/gztK+XjB1sxXaYTLjg2mMpezD7DIOB3Ru/WDQY56E7RcT7VyhoDPMbx9SVOwBZA5XcWSzwTQvBqNa1yu/RI80BKjwhSOIBg8oXz8GgWnDKXerapHw+hOSFMqyoYZd692gTT4O0r70mFtkiVp2GJI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778513473; c=relaxed/simple; bh=FwOeBbgnonXRJl9KK0wJJNsebKrXtMEBkQeaUcnAtqw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X4PDRHZ2eLFyU/5eicXMFdPtaErbMZ4iMFC8P1+vPBodsfSd63qhZAG5+sXc2y/bY9xjyh+bSHQDw4SXzo7gm7ERmc7ioCxmyauf/4nbQ4NQ11Lt8J6hUIngxFZO/vHrDq42dVrLpEsKDc2VESoCk9fDYnDs3ecli3shsnCNM1k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OOhyoAIn; arc=none smtp.client-ip=74.125.82.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OOhyoAIn" Received: by mail-dy1-f173.google.com with SMTP id 5a478bee46e88-2ee990e8597so7774381eec.1 for ; Mon, 11 May 2026 08:31:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778513471; x=1779118271; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mg4K9woFMxvavcEFvbUNjCar5G8JN7StQ4W5UeFBilU=; b=OOhyoAInl4lUyQNz0AXZsGXMhAT1iaeBr1qMvlrQ0k2giAmRLQB78ef32+tC9cDA2D tj5cEIKc8DoP7ScMvGLx3LrF59ldXCauR4IyqzXJj29C9cMkyIz2FOew6z7FQYRIZoee Vibl78GhrVadqSrcl/X+UXnxNTbMzeXqKgBSBL4r4iMPDh/NMwUxLgCcQsTee25za1G5 Ki1Y+NZUcQ+SoG14agH/pSNzAR6Q6yIHHskAt/SPHFIWB/PCchCytGXAbpG1t9ntH3da 5Pd67nmZPB/KIxdbyHmdzYRwaNia8ihuA7Q/IsVsR8Cy1Ptp0G68UA92nVrk7X8Ehg5W nsgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778513471; x=1779118271; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=mg4K9woFMxvavcEFvbUNjCar5G8JN7StQ4W5UeFBilU=; b=PMxg3BUNCKFr1oiLM/E2euAWEE8T7MG3Zl47tnclSDuY3jhJL4G1RsiYRAL9r01KBU PFFevxOwdJxprlm/VdKHxetmula/F46qO6T3q4VjyBBZKMkxE7jYvw/isa8cMSVytIpW NqZOXPDtkU+0V2hvKF7J5wNz9r62rIGLc9fz+GfHOk8s7rUBtrefZFsTXIk4GyaOdzed HUrDbkWq3BZE1vLoYhXIfGonvItDSjHVicDBuAgVSXmGOg1p+Dnoh2ZbSefL7GVpQkuX QnHJqILep7P2H23ZnuVLVW7oYXHXLhej6/6607kk98qdQvEZoaY7u3fKflz+BcK/Rs5n wdug== X-Forwarded-Encrypted: i=1; AFNElJ9wnVeKmchZcYj50GWAuPBL1wG7xhRug+BVbe5d1c21yGj9sqOk8qRria7rtf2pbXw6PBYjDmTxEFCUUyg=@vger.kernel.org X-Gm-Message-State: AOJu0YwkSdLLJ9IBXet5vZRtjnx9KOuxy0EsWfvksYKwsprsa/WdFkec Wj6sKz3Q576Fa/geaUHeW6t+9xxJwG6s7Rj1YP2r5R+8E4qtmRUUy0BHxhbAvtU8TBg= X-Gm-Gg: Acq92OGwMsAlGlaNA93+7RBGRH64npkP7oP3h+oRVy22rxLq7GW2JSBYJFSSxDQOAOG ynHdUlITQEjRoAASZqbbhus9vEIb7YPu3g5Gf9BKx70pI5jwTPU8QHOMQC934aWHZjKD99Le7YY C5e2C0AeaBMOiHKpkNAnNrUyKqxVal5LSY1NR9gd2vpClIfYqn/3PXbOQHBzfPrWmYGuZTfQnMb nI6vtPORPBBVoFJ0O0alyRy/dPaWgCB8QFAp/Cjhd9uRdDLLSRlfQDb4jp41aV1MqokIHavvs4Y JDEpOpjFxV/V9Q0XxSiDhDpvEsxkBYgOIFYWBcIq5mzOn2IoYKlXq9nKUPtoW9TimmgFRpDRfBT 3WnnlFsZjL7cBcvhdQ6SGyj0ldQATFsdjshDBbWP2Tg2KR07QlisVkwsUdSJuai3HdacGmeYP3e rDEntocpw5l1FWLLPzx/y/bSCa4qvmxJWHxg4= X-Received: by 2002:a05:7301:6790:b0:2da:44ac:6d0d with SMTP id 5a478bee46e88-2f54ac74af7mr12622919eec.20.1778513470769; Mon, 11 May 2026 08:31:10 -0700 (PDT) Received: from VM-16-24-fedora.. ([43.153.32.141]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2f8859eafcdsm17464080eec.6.2026.05.11.08.31.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 08:31:10 -0700 (PDT) From: alexjlzheng@gmail.com X-Google-Original-From: alexjlzheng@tencent.com To: sd@queasysnail.net, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org, hannes@stressinduktion.org, albinwyang@tencent.com, shenyangyang4@huawei.com, kuniyu@google.com Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jinliang Zheng Subject: [PATCH net v4 v4 2/3] macsec: use rcu_work to defer RX SA crypto cleanup out of softirq Date: Mon, 11 May 2026 23:30:59 +0800 Message-ID: <20260511153102.2640368-3-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260511153102.2640368-1-alexjlzheng@tencent.com> References: <20260511153102.2640368-1-alexjlzheng@tencent.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jinliang Zheng crypto_free_aead() can internally invoke vunmap() (e.g. via dma_free_attrs() in hardware crypto drivers such as hisi_sec2). vunmap() must not be called from softirq context, but free_rxsa() is an RCU callback that runs in softirq, leading to a kernel crash: vunmap+0x4c/0x70 __iommu_dma_free+0xd0/0x138 dma_free_attrs+0xf4/0x100 sec_aead_exit+0x64/0xb8 [hisi_sec2] crypto_destroy_tfm+0x98/0x110 free_rxsa+0x28/0x50 [macsec] rcu_do_batch+0x184/0x460 rcu_core+0xf4/0x1f8 handle_softirqs+0x118/0x330 Use rcu_work to defer the cleanup to a workqueue. rcu_work dispatches the worker asynchronously after the RCU grace period, so no thread blocks waiting, and concurrent releases of multiple SAs naturally share the same grace period. Fixes: c09440f7dcb3 ("macsec: introduce IEEE 802.1AE driver") Signed-off-by: Jinliang Zheng Reviewed-by: Sabrina Dubroca --- drivers/net/macsec.c | 8 +++++--- include/net/macsec.h | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 35284ff7a17e..1b0ff7fa5ec6 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@ -176,9 +176,10 @@ static void macsec_rxsc_put(struct macsec_rx_sc *sc) call_rcu(&sc->rcu_head, free_rx_sc_rcu); } =20 -static void free_rxsa(struct rcu_head *head) +static void free_rxsa_work(struct work_struct *work) { - struct macsec_rx_sa *sa =3D container_of(head, struct macsec_rx_sa, rcu); + struct macsec_rx_sa *sa =3D + container_of(to_rcu_work(work), struct macsec_rx_sa, destroy_work); =20 crypto_free_aead(sa->key.tfm); free_percpu(sa->stats); @@ -188,7 +189,7 @@ static void free_rxsa(struct rcu_head *head) static void macsec_rxsa_put(struct macsec_rx_sa *sa) { if (refcount_dec_and_test(&sa->refcnt)) - call_rcu(&sa->rcu, free_rxsa); + queue_rcu_work(macsec_wq, &sa->destroy_work); } =20 static struct macsec_tx_sa *macsec_txsa_get(struct macsec_tx_sa __rcu *ptr) @@ -1409,6 +1410,7 @@ static int init_rx_sa(struct macsec_rx_sa *rx_sa, cha= r *sak, int key_len, rx_sa->next_pn =3D 1; refcount_set(&rx_sa->refcnt, 1); spin_lock_init(&rx_sa->lock); + INIT_RCU_WORK(&rx_sa->destroy_work, free_rxsa_work); =20 return 0; } diff --git a/include/net/macsec.h b/include/net/macsec.h index bc7de5b53e54..0980ef36fbf0 100644 --- a/include/net/macsec.h +++ b/include/net/macsec.h @@ -9,6 +9,7 @@ =20 #include #include +#include #include #include =20 @@ -123,6 +124,7 @@ struct macsec_dev_stats { * @key: key structure * @ssci: short secure channel identifier * @stats: per-SA stats + * @destroy_work: deferred work to free the SA in process context after RC= U grace period */ struct macsec_rx_sa { struct macsec_key key; @@ -136,7 +138,7 @@ struct macsec_rx_sa { bool active; struct macsec_rx_sa_stats __percpu *stats; struct macsec_rx_sc *sc; - struct rcu_head rcu; + struct rcu_work destroy_work; }; =20 struct pcpu_rx_sc_stats { --=20 2.39.3 From nobody Sat Jun 13 02:08:20 2026 Received: from mail-dy1-f179.google.com (mail-dy1-f179.google.com [74.125.82.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CDA09402451 for ; Mon, 11 May 2026 15:31:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778513475; cv=none; b=ISOCcbv0zhbTLJYN+Nx0KMPRYpK7tddSgQG6xwzF9tjEbCH/gDtOCbYheg34dXMdfHdicFqsWmk2xa6QYuEykZc6bKQ5or2sEuz3OJQsbSB4InIWBBNaMnINtz5Z/XoCo6oDr9AZfGgwTFPWkaR0kdIm0KuOxc2OaQ6HkhOLNY8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778513475; c=relaxed/simple; bh=W68e0LS3CuTxVaht5xKpgNF9uIgkcuE0pI3z2nIF8Ys=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=n2zhJXKWhcGTLbhzNSEVdqRM5/ZVLT4ADYK+uUHJxuFXUDBHu3d4fFC/sKtPFg9UjwuH3GSed1ovNNr2Dkg33wYgluiWIslbttWpQWCOxFVB7LBpOKQyQwi4rBCZX5XvjOdj6rBZdNKXoSVNny67zjL80BNIWdMB6oz90yvm1i4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=n/eNtuNH; arc=none smtp.client-ip=74.125.82.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="n/eNtuNH" Received: by mail-dy1-f179.google.com with SMTP id 5a478bee46e88-2f68f3b075fso5464093eec.0 for ; Mon, 11 May 2026 08:31:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778513473; x=1779118273; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nXUsnIND6jZt3LMKLUJVPK7kDj+i0r4kYH0SJOIDOAY=; b=n/eNtuNHQjknjBOmwgIH5ECQlx4J7VT+tXtjlOI1fBBwzs3ADcO7hfwK7sp7LX1lZv 09216FCxe5hXcNeRwmG+06MG+NjNnRqm3M5fW7f1a+iTmldVirqRLLj3628UeysgTi72 m3VtGysB9E3HchgYawxq8xv5D/h8ZyRbqC+g1ucVIXknND8yJwGyCDWF7NCj3pYFMcji HKta0z1kjAJNNigsIVKmWFdFH2V8gQpHHhxuiSbWZYmi7+jJFpfsczLI0TSpffIbn4Gh lOP7l56YTkcG3oB18xZ07rktvKMepgzpxTbjoSkyNs9EBe22hA1AZGn1NcTlGbTQjIhT w0pA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778513473; x=1779118273; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=nXUsnIND6jZt3LMKLUJVPK7kDj+i0r4kYH0SJOIDOAY=; b=nRCV3J0iIIdt9mpYK/gz09bnm5pDhdIsbywRPe/sTGFleR1+oJtQ59c8Ou30SyuIfz UKu4fsAFIrZbo0CIcS1Erzw95uf4vX8QR9HiYrP2w3jdhRbHRJP9DhxEr3D+9HDCTnUP RGYW/Jp8LTYI51p+jQXAJUHdRM730dR9brHfiWbdYOGXARg47aNAc1bqkxQzhe/14CC0 RybxR34SkiWgGVhKtw8Juv1+AgrM+grCRnIGRsns5iaWJ1VskDT7rhuFKt0DCHGMRMOj MhWg6rj7hfKWQxI5aEgDR3f+r6z9wFgaEDmZKRf8s5zFY5wTB4xbcASIjbo/UbiZb11Q m/Gg== X-Forwarded-Encrypted: i=1; AFNElJ8oqKyw0V+bdOv/spSR/CLSAEDxLhRIYrJTntZvGWuCLNe3/OPHesVK9kxljoX9AqqNwKqxu72YZw4z7/I=@vger.kernel.org X-Gm-Message-State: AOJu0Yxb1BjwEibyiaLLHS1gI5GfXmIE2z9SFZT6EUNnvQwnI9esACSw oLCIh2s5vyBAx35ymV2AuxqPfpXMS9PDsWFFLdRyzYhA1g9YbVIVlied X-Gm-Gg: Acq92OFxufFVXrEyBPWTzL0PpKLXyHc8kQZ1WHZZNOslFuBzzUwjXlYbdEBsz9J7urk XZ2x4c9j3TtL37zEAHrX71A5lxd7mkcGlKUlDisINj/ZOxB2JcRTTlutXU9Fn0aCo7oafv+QBeD 81nOTlnwyYcnpn+nwHOGop1WS0ESiAbJg+bw1T12jJiuLFdEtkCq2mvOGQT5/Nuo7QHy7bH1hGO KA7Ny3JGSm5Mg4dFVn+0qWm/ATraR8n4zfBqhdkOOwy3GU/YItUAhsFNdFjEs91QzRWPvv4c6X3 gYlEkhY2bzt/1L7l1gaPliyoOQAjKo8RaBtZXWHrb5HAeFokN0gfjfbI8kxhmK9Jc+ANOVZUFZr I+b9YJHELn4H2m3fd/6HJuHpgsxqRVvJ3SHOgPm9HvWFWbPehkGPsej+0VhUqvA34LWAPM4LeaS i73Rx+6tb+QAJbBvGUJ3Co9fft05Ce2N2olZE= X-Received: by 2002:a05:7300:bc0c:b0:2c5:ed1b:ca9 with SMTP id 5a478bee46e88-2f85bb72d01mr7274260eec.1.1778513472689; Mon, 11 May 2026 08:31:12 -0700 (PDT) Received: from VM-16-24-fedora.. ([43.153.32.141]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2f8859eafcdsm17464080eec.6.2026.05.11.08.31.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 08:31:12 -0700 (PDT) From: alexjlzheng@gmail.com X-Google-Original-From: alexjlzheng@tencent.com To: sd@queasysnail.net, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org, hannes@stressinduktion.org, albinwyang@tencent.com, shenyangyang4@huawei.com, kuniyu@google.com Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jinliang Zheng Subject: [PATCH net v4 v4 3/3] macsec: use rcu_work to defer TX SA crypto cleanup out of softirq Date: Mon, 11 May 2026 23:31:00 +0800 Message-ID: <20260511153102.2640368-4-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260511153102.2640368-1-alexjlzheng@tencent.com> References: <20260511153102.2640368-1-alexjlzheng@tencent.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jinliang Zheng free_txsa() is an RCU callback running in softirq context, but calls crypto_free_aead() which can invoke vunmap() internally on hardware crypto drivers (e.g. hisi_sec2), triggering a kernel crash. Use rcu_work to defer the cleanup to a workqueue, for the same reasons as the analogous fix to free_rxsa() in the previous patch. Fixes: c09440f7dcb3 ("macsec: introduce IEEE 802.1AE driver") Signed-off-by: Jinliang Zheng Reviewed-by: Sabrina Dubroca --- drivers/net/macsec.c | 8 +++++--- include/net/macsec.h | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 1b0ff7fa5ec6..79df71ea9edb 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@ -205,9 +205,10 @@ static struct macsec_tx_sa *macsec_txsa_get(struct mac= sec_tx_sa __rcu *ptr) return sa; } =20 -static void free_txsa(struct rcu_head *head) +static void free_txsa_work(struct work_struct *work) { - struct macsec_tx_sa *sa =3D container_of(head, struct macsec_tx_sa, rcu); + struct macsec_tx_sa *sa =3D + container_of(to_rcu_work(work), struct macsec_tx_sa, destroy_work); =20 crypto_free_aead(sa->key.tfm); free_percpu(sa->stats); @@ -217,7 +218,7 @@ static void free_txsa(struct rcu_head *head) static void macsec_txsa_put(struct macsec_tx_sa *sa) { if (refcount_dec_and_test(&sa->refcnt)) - call_rcu(&sa->rcu, free_txsa); + queue_rcu_work(macsec_wq, &sa->destroy_work); } =20 static struct macsec_cb *macsec_skb_cb(struct sk_buff *skb) @@ -1510,6 +1511,7 @@ static int init_tx_sa(struct macsec_tx_sa *tx_sa, cha= r *sak, int key_len, tx_sa->active =3D false; refcount_set(&tx_sa->refcnt, 1); spin_lock_init(&tx_sa->lock); + INIT_RCU_WORK(&tx_sa->destroy_work, free_txsa_work); =20 return 0; } diff --git a/include/net/macsec.h b/include/net/macsec.h index 0980ef36fbf0..d962093ee923 100644 --- a/include/net/macsec.h +++ b/include/net/macsec.h @@ -176,6 +176,7 @@ struct macsec_rx_sc { * @key: key structure * @ssci: short secure channel identifier * @stats: per-SA stats + * @destroy_work: deferred work to free the SA in process context after RC= U grace period */ struct macsec_tx_sa { struct macsec_key key; @@ -188,7 +189,7 @@ struct macsec_tx_sa { refcount_t refcnt; bool active; struct macsec_tx_sa_stats __percpu *stats; - struct rcu_head rcu; + struct rcu_work destroy_work; }; =20 /** --=20 2.39.3