From nobody Sat Jun 13 07:09:48 2026 Received: from mail-dl1-f43.google.com (mail-dl1-f43.google.com [74.125.82.43]) (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 54DC837C935 for ; Sat, 9 May 2026 03:34:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778297653; cv=none; b=ofAjIO+x1bHgw6pwZ20NgwF2jV9RIxP0R+0B1O5/DO/F2KwAOMFINA+6zWkD3bLxVTVyJrw2uxHUn1jpA4SOXvAEZ5J3KWZ7GIAzrsFi7Fq36a12W4Iv3xiaEsCGM/wFBpJZAsZow/pwaT+JXTgsyLXACL+gHtaWwquQVVzJux0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778297653; c=relaxed/simple; bh=gdVwM1O3NHaJYyd05hJhAOkWnuvo0J6zyfeT5CSMGO0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Zmahyc6Y3dZecND5oHkDw+mlwRu3kt+3jjYNS72LDiixZFyNT36gb8iy70ATVVXl6iTWeUpNl+rGLwtueM0d8B/s3djZyWwp2zd3d+eENmyPV+Fz3RazbueAy279hNIPdwOHzk39nGGc5dMqy3FVBoaYlDc+js5+pSFHtPoDEvA= 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=l7dEtgdz; arc=none smtp.client-ip=74.125.82.43 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="l7dEtgdz" Received: by mail-dl1-f43.google.com with SMTP id a92af1059eb24-1329fc4bf77so1070781c88.1 for ; Fri, 08 May 2026 20:34:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778297651; x=1778902451; 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=6vOkoZCHqUk0sHRsVjfTCZpEX/siD7cO7/dfOVMynEg=; b=l7dEtgdzP0TdJ7SpTsrZm0XmFPbc/+G3OTQWiOLuh0RXd9J3SpWiTBweIKr5t6PxiK 3kH9tZGtGCG38T6rJnEOHDbFrbIzgLAyshaTOL1TIuskNHWkSig+ImUCckr7z1eEudeC J3V9oI3d3C6SAUX6bp0VqIRnazieXCA5WKvLSxiIuYGvEf8HzQQviFwoy8OS7dYDWM1h GyMYCX5VxQrLU03pabuKG/SlKKj7ssq21dCevYMnGubaxe2HxvexY1EIvbEJPbM/g9y4 GnR2YOOqSLT9hsVaojCYOab7Hclwz60Nq8rvz6yM63H2lMTswR7J+4jZaopjXDULG1dx kq/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778297651; x=1778902451; 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=6vOkoZCHqUk0sHRsVjfTCZpEX/siD7cO7/dfOVMynEg=; b=hBV+iKRwE+WeevfmgW4D3hAeXy6zkDdd+DFDT8YwIfceO3t6VZcsfwNzjZ55ZLSxMy Txm4McbaouVEP9r1DAlPWbdSh1XGvdCSohj3eyNcOGWszEu7C4O7NR/9ZpiMABk3TRxi GIxQyZykf3vtSdNjSFnCa2GOlVk5QY48pokFiFodfWAFSlyYCj+B71CBEbe1q1De8SBD XG4js0lUXPvAqaScXRsfP9OyEPLA9zVYerwNcO39aW0z4J2dc4uDWmHKwMaDcArYq3q4 exdYUdSZ5EGVYXZ5qNrbgYxTRqS8xNldCKg1RA0E2TD+1fZ1BVc1EapAXM7yuAX2sdY8 E8Bg== X-Forwarded-Encrypted: i=1; AFNElJ8n2TpEzsrML0opHUjl4sfcwqlfqp56+aOu5X2fDNJYKvVUE2ocpcXg2WpiL0VtJiAweX58ayDOc4jne7Q=@vger.kernel.org X-Gm-Message-State: AOJu0YwLG9t8923jNarGSzXeCnoEKyvEI3okUJ7jrsk9s1seI2dD/lrP JB/OSu+JadL9kKrG8h9V8qDGA8tiOgaz4CLnnabdwL7Z5/wbJzugWD6Z X-Gm-Gg: AeBDiesYbe4T8vMNpWOs+frggWKLqDzazSK0HG3dLxtWvbko146NRo2m8brFEAKdqvZ xMvvi1VsXJnIRNmOEIu319uQy9MDCy0ffvvmZ4uBC20Zueii+fq2lOufjhpjBnshA4jQgdFCObL 8PNWO9lkkruTjhhRCSJU+3ONmqyCUk/8Ye2yqme6tGqP2ZuGmeWaPVxVmyhoeHLlY8ZwgQ4KW+o IZi65Iypp7yOc2FP0e4MUqkPSiQgioom1kESCm2AUyGjWNIw+y/tdaii1yrAJQSaDZRtPnsKqeT fifFCyt6H7u81EejpTLF7PRQPExGbj4CnMFvQ5Uf6fHkkdT7ijXo91XfEsYk6j5t5q8n7MQQLPY DqGqOImbCGrVpwu6gOSuWbr/CRfAPH+9vyZ8SW8Xdt8D36HDLccdLC1ZDx/brzy+UfHA2kLIMGP X2cCCrJTPpiHQPcutBupFfzPb14yC8ShbMiP4= X-Received: by 2002:a05:7022:e981:b0:12d:de3e:cbfe with SMTP id a92af1059eb24-1318eb57b9dmr8244075c88.37.1778297651292; Fri, 08 May 2026 20:34:11 -0700 (PDT) Received: from VM-16-24-fedora.. ([43.153.32.141]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1327821fc59sm5500989c88.7.2026.05.08.20.34.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 20:34: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 v3 v3 1/3] macsec: introduce dedicated workqueue for SA crypto cleanup Date: Sat, 9 May 2026 11:33:45 +0800 Message-ID: <20260509033353.1814289-2-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260509033353.1814289-1-alexjlzheng@tencent.com> References: <20260509033353.1814289-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..52d6dd03ac92 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_ordered_workqueue("macsec", 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 07:09:48 2026 Received: from mail-dl1-f46.google.com (mail-dl1-f46.google.com [74.125.82.46]) (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 4D8DD3822B2 for ; Sat, 9 May 2026 03:34:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778297656; cv=none; b=fWya7bKRIVVculFlLi3dUAPy2uuhdRRgSEOvLu0QLv9AKEOR3us4b+jTTJYkZLFlajNiBdHAbQkH3WE6M6+h0Gdy9z/J2T9qcPLKavyCy95gDbiyXFXx/bJm7YfMAmhbomgd5lAFNuG30fyfh5itdbWT1SSvR7ds8ID8Raz17Mo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778297656; c=relaxed/simple; bh=RC7KUDm0vfRUyDesE9Dh/S40NqhnzqFOOKvD/Z5ywuo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZEomjd/qhcZlcWmY50iTLaAqN4rAent/U1zBDtT5DI5ES2lSVbdtag/s9ksKL4iJt/bny3RHa/q98OMbQzCowbgbPdd/Jc801IQFcpHEefHU8N5NmKVeNrUqlnw8AFdO6UtH2Mb8NEWk1VD8Sb7MB5xdfyhX13HLanxDcMbr5e0= 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=Jv/xpnPv; arc=none smtp.client-ip=74.125.82.46 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="Jv/xpnPv" Received: by mail-dl1-f46.google.com with SMTP id a92af1059eb24-12c1a170a50so3741997c88.0 for ; Fri, 08 May 2026 20:34:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778297653; x=1778902453; 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=qwTDmMVV2Hq2IQrp233SiuNlHmlaz9y7w8F+WJgS2+o=; b=Jv/xpnPv5lTxI2dcRuAIubpTOpamRbBxhgXdmB0XU8v27BI0GkZc5CxV1UI1izoVtK DI3QGCsGhRYVVpS5AkMvq/VVjERMzcK5EMQJTjdR9q5cSw39vP69eKrgKliwe4sguAxO 1Uguncp13OJn3vNG492wlgWpUnObQedjPfiLhys1xmUesnpQdFr/cDCZhwCC2SlWNsgw xeIQQJvh/YkYFvI5QWK6I+AErAR5NFY9RhbmW6Y3TULi15+BrOXiiT+/b5CmVs4nZlLG cW2GpH5/XX7EsTxEy8KM5n1n6ja5XnR60FfJJJv9lpyx+ryDazbinsDqW7fYGQPhtBaZ 46qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778297653; x=1778902453; 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=qwTDmMVV2Hq2IQrp233SiuNlHmlaz9y7w8F+WJgS2+o=; b=O47RD0ig3etKwcggtj0k6/O9ES8gfdNxHIK9hryj1FQe/5ClSiW9GaHIg0xlOTZpK6 Zy5eWfqYZ3c0UVeY2mAgVrqsOYZgC2lMgesNY5zD/l6HdMSk+D3F/LCFZQW1f1f8QwrT bylrsKSfdnJmpQMkJ9RrFe2PmyxXy0WU1PV9pgMuHcf2b0ECkQu3dcbhahjrdve49JAD jGnBL4QJFW9JxU6bDX+CiPrcxTybNHiOFXCaTN17q4ZkxBruQn/wwlG0Z8q0OEhD99zw xi0wRaudplJpJ8m9BhgFa/Wbn/dcg+YRbHrCVhcXASNb1jaMiuIhHoUHYKOzVABkSwd3 z3Ew== X-Forwarded-Encrypted: i=1; AFNElJ+jC4bZf8szlkPo4lSMA5BE2BWrF7cxub4a9qv+aZeGxhzhDOJgDJLUHv0WsRdsTMibFIhTyc/uhHMgyq0=@vger.kernel.org X-Gm-Message-State: AOJu0YxAy+LGaKkvrJMVd4+CTy9TeoExVHkIzbl/QOz1TkK05T/d20Kb Wzbuu3gE2/MoTiZn3SXH0UB44a/tdhSS4toKmeuv2Q9pIzqujbXeDyNG X-Gm-Gg: AeBDietxErNUIupt4aTbvTomW+V9X9z/4lVTmV36dLriLkZPnOEVv4aAhGGCeF+wMjC j0vK4f8GWHOkkvWkZe6yU635cTCAZe21cTFnTLwEgDohOrzT4AIGwJd9514f0K8EETbsIcwZvac LGbCNIPofU1yZPGhKcVh72zFTpb2xr/RSKwZSSr8hEHQk7l9FVvZp/R4cbNFhLZdhrgdq0eprNb TWi8UiJH3PFhnINQJB+7vRWm0Esp8OpsC86rAeksDYUws9Z4Knz1mRZIpgwa1I+vCJiE85l0t9r cxUWZlP0MMwtRhOTiIVd7C+CtVBXE14uUyuSSk0E3sktWd1h/GLGIn495AdCRjJl9MZFxYOj8wW DAM8Kp6o2grNCspd3Fv6wMIzAUuXnSsgsSfLDxhBxAfeoqEOT4llNiCOjZAofsCgK5X50qphsz0 bdw0Rj3/+16r3ViQL0xrvnxEboT2OceQwlkT4= X-Received: by 2002:a05:7022:4182:b0:130:73ed:214 with SMTP id a92af1059eb24-131967d5111mr7372756c88.1.1778297653213; Fri, 08 May 2026 20:34:13 -0700 (PDT) Received: from VM-16-24-fedora.. ([43.153.32.141]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1327821fc59sm5500989c88.7.2026.05.08.20.34.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 20:34: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 v3 v3 2/3] macsec: use rcu_work to defer RX SA crypto cleanup out of softirq Date: Sat, 9 May 2026 11:33:46 +0800 Message-ID: <20260509033353.1814289-3-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260509033353.1814289-1-alexjlzheng@tencent.com> References: <20260509033353.1814289-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 52d6dd03ac92..67e4e3f439c7 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 07:09:48 2026 Received: from mail-dl1-f47.google.com (mail-dl1-f47.google.com [74.125.82.47]) (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 E12A637BE89 for ; Sat, 9 May 2026 03:34:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778297663; cv=none; b=O5W0p+oAmnu4OrQx49izJY2guB3P06QqYqWQH3kJ9+Y3Q/rqLu+FShhvfFLCisoKfN2Kg48e6oivap2w50ZqNVG5VS0SzzarE42aHPwe/zv7oEuEBVw9RKmHzrWwWyGMHuNzJK5hEOrzL/JwFmFq4i+fq51VDEMk3wkApgizwCA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778297663; c=relaxed/simple; bh=PXc1G+ZTTRKH42MY07f1jLVVwPn7wjVFioe55m2UKl0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M1Bc5LaGldVkuDvnl0UsJt8nNeqh/bbFv5MRe4mcXKqFJp+d7A+p58FQxwyLnKapBKj4mgQuidEkHDzZCrziv8HGT8qo4jMuluUHSI+0RHHDAHpi8lQRcEfDyDYjP0ApOQyISOra/UFH5/diL4LUDUOmr6wXYogWHvuIjNyrToc= 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=K1ZMxb3j; arc=none smtp.client-ip=74.125.82.47 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="K1ZMxb3j" Received: by mail-dl1-f47.google.com with SMTP id a92af1059eb24-1309f4ee973so3114121c88.1 for ; Fri, 08 May 2026 20:34:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778297655; x=1778902455; 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=XwEvoJ8dtU6cGI3ewdei8t2ZAPBHtdSFFFMs2CrwJ6M=; b=K1ZMxb3jgb9344k0rd8WB9/mM0bnTTmT8LkNx8S7I64nwyrJijcNmMrvBLSZZKswnS LKowScs2/OIv/EgeIiLu/YpUNilYAvEA+H3Ie6T089roCvBzj7+06dhGirjCN6yCc3jb Uqqo69sDnv6sbZr2WToxG/KT7I3zoK7KBpG5BjQ9woXQXdgb2mpcvTqWMJZMbJaRcAPP 5jJbocTDcpkaXbe0B4CjmDn+skIngC1vm5zELGrqxq2c2hPVvzHFyc9X7Ixw+Xmo5xAc jsIStaiSDTFMbTlplCoZPBow9LJ10my10BqIpQLLDE9AJ6mnMR79GdO8oz/Ql4K2U4MJ DgGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778297655; x=1778902455; 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=XwEvoJ8dtU6cGI3ewdei8t2ZAPBHtdSFFFMs2CrwJ6M=; b=IgGOfjaOjX/w63r2Q3dIQ+gsdVzUYWRl6L4CGNjjkCdD5wo8uios/MP4PUrvQB8oDC SG0i9ybdMkTYs7jrcMfosulFnRY6cOfZFyR8T2UxrvNbxYk/MJDd/orkbp6c3/QEptdk SJtPE3uqo13D9td8dX3TrzNYTp/pjKGnuhbVDI2ntKnOG4O603gyUDTKYB/KyfSaBdxr NYYPuLQxCD7XxvyC6/zeox7KcLgojZVe9uMxcjtXh1l9mnYAYSLPs7/S8R1YzcS9+3R+ tPsBoMhdKBzW/1oSBFTUcOY/0QuT+RM9BgJgqcXHCS8DL4MXotZyQ9oAIf3TNy9L5TRm kHAg== X-Forwarded-Encrypted: i=1; AFNElJ/kZ6NSS2jkJQpHmINUgYMfESWEhqo4tcclOhMkoBLDQhkEXAZO8s7rokxCP4oFjinm5ZV3CuMh/IDPZ2g=@vger.kernel.org X-Gm-Message-State: AOJu0YxMwntYepmLKvc2zDCiSD5ADWmIKtAmmDqRedhcmI5JzwE+Eoc6 qx8LQK+rYmQPQa5paaOPV2UBlRRdgy9bB++/Lc25WOi8Izglj4l2k821 X-Gm-Gg: AeBDieu+UyfIKL+bJEQCuMbQW9xQc7KW/TykvsGZN8pvWW/EVRy9yZ43HPRCQkXCQ6u UUo3ExJQjLKh0M4Khfe2GNJQQpcopm2ypu7QsSAdE+4PYBqC5g7uWAWgEFuQaV38apseUXtEnFJ Fn8nP2Z89pRuPdwNlAvicZFvqklDUUsg88Lc1xLgXdJtL0n9L+Ll3Fm4IeiLpgktt5BoYCmeMWG Cq7MakMk+PoJ3OBTaOj0LIMzmp5CpQoQG8Ixn8TVIGnWVr4B316HTbh62UK0H0T73IVP/7lP4jY WpKgsSWuhhcr50Bm3Q87fXWsRiNIhTNXys/YWEe4fBcg7I+KxmaBVGbyc16TiUXPp/4BKMMjd6D LUpOAYKWeNMPDSzQMV1ymsOIFsKSOv6nN07hSAwSvPmJJpMjIh5MIpFTsnZW8bN9VvE7Q68O4vG 8njhW84vjD9QNaVWGCv75ickwbJ6L5mK2+Dl8= X-Received: by 2002:a05:7022:605:b0:119:e56c:18b1 with SMTP id a92af1059eb24-132a83f77e5mr562283c88.25.1778297654865; Fri, 08 May 2026 20:34:14 -0700 (PDT) Received: from VM-16-24-fedora.. ([43.153.32.141]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1327821fc59sm5500989c88.7.2026.05.08.20.34.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 20:34:14 -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 v3 v3 3/3] macsec: use rcu_work to defer TX SA crypto cleanup out of softirq Date: Sat, 9 May 2026 11:33:47 +0800 Message-ID: <20260509033353.1814289-4-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20260509033353.1814289-1-alexjlzheng@tencent.com> References: <20260509033353.1814289-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 67e4e3f439c7..e91d853c8d45 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