From nobody Sat Jun 13 15:25:21 2026 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) (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 F0CF82882BE for ; Thu, 7 May 2026 02:04:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778119496; cv=none; b=VzTb4UOpVVkqwBz2jhmzlRBQGqoNk43FSCgcaxGOwlR1t0lvXGCyXF+6ANY1dsN4Biut4n99hH9cVTBbaS+V/k7+8bDAqy8ZpeqZhrzV0RKnjK2atScFkfZ6/FhSZ9mPCdHeBqxOUIXZ7d5mRt3rp1qkT7H79PnHmpr/nwCtDik= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778119496; c=relaxed/simple; bh=+HDHnMIAC76OSjoTpiW5uF8eRfsMLaMFVa+SCMAlBFo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=MWRcb4rKeW5Fxz9MrSKQ7wVvZD8Fr+p1rMnwL+R1Q7SFuXguNvtvSy3d6bS5s9yRFgSMcUgCYVF/Ekjj66+xkSaSGGdh7MeCDEY6HevtsWdPHhHPpE4YBTap1yOigW6VZDnTzUPFhjDyO9ldEK/tG3wc5VcLPGMXDJKn4/oXtrw= 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=sHF+Iatq; arc=none smtp.client-ip=209.85.216.44 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="sHF+Iatq" Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-365312a27abso318850a91.3 for ; Wed, 06 May 2026 19:04:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778119494; x=1778724294; 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=PPdiWS2f+1x223pVffSMsT/qYQvgv2R52jqKtSop6iQ=; b=sHF+IatqoQ5uY6GxSGSydUjin+ciJFjTjpBGPBfSXAvh8f5t5B+etVxXKPJGmgFCE4 i8DTjxAZUjfswOhAkSoGrZXrUIy3Pk9tmNH7eQPbeEWhURyrQKsSyptzNM1ZRD4F6YB9 qVbL7UIwefBUi3XW5DcVs5oHWKBi+tTiX2plCsCjm6znipyFYiukPySSoa2EGh7r0rqk D7su92A6lTubkeJxAozQNpm9WeBrx0R8erYoWmVyPogiQvIURk3lE9pzCm9ixYt4/DwR pPtCCCLZfRwtWpk058xXbN0Pd6E7SHSINu61DTWrvTg3ln+otkoG0MTp7t4mCNzkgy5w O74Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778119494; x=1778724294; 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=PPdiWS2f+1x223pVffSMsT/qYQvgv2R52jqKtSop6iQ=; b=TSeTwitpVE7pcm/DMRhN4vFJHe+G82evHKPmongZiLL6+jPAl3XTNo1UqdcF/uobPa bo/4kVJN3R/baT5r1m1ARUWKTBP+RFfvVAkNifuiz63LUupvJdwDeUxybq6t8X0InezZ IvRw0SvaPKAtFUvg5dveS4w/W5zpl+q8GCfuxK9u0laS/CzwuPKt+W2To14asGoVKsAL 4FlNcXfjb8HpOtgjCUk57nu7VUzC3Cmqx5AgsSLVwWV9XSfn37vsAenssRWi7YVfMRlj K2+SQ46T1M6k5ufYQQXL2ilzVgoeP0DB05CxywLPFfqdQXLhMUVox2Fcc+z1tdq1N2cm vXkQ== X-Forwarded-Encrypted: i=1; AFNElJ8AvDngLrEm4/iwKDkjtxvkFm4SmowcfIIg9Z1mD+UmNJ0UK58YWh/xgkidNmcxpMJ18BlsLXwWYQ0wbeY=@vger.kernel.org X-Gm-Message-State: AOJu0Yxhe5gNYKf6zM8ybjmjohPO9lZBLlLoaUuxbFmKiBp6hyHp0WB0 12eku6aA3AZV6zAw8RKLF9Xx15KKATg2BNhLlxhqJQChGVkTla7HCJI0 X-Gm-Gg: AeBDieuEIrkx4nbdllDzPvcPSaDD/b+GLkJyqu7IvI8J2Z2f/lqbS9Yc57KkVIDoW8v Mga7pjLYUtJy9TpisIPbDfwx5/V2j0yKBbfsEL++OE5ta8kInEuS0n6NqqWFmqqXxmx+EowLneI fvhA7ckACyrXzbLd2MR2dUMi/Ay8/nQxOM1B9uQwO0IJWDPnMcmePIROJXAadMsKWFnGPZhyImR KXQGnwQGkf8z+kLLH2HBLXyhcLlBVnQk2UY00emW7rJ/soy8IlSkrPls4yd5DmV+ISVQbN+EOl6 thNMicl0a42SBguPTJglBLUP7j/4Tqhf9e/kD1NH95FGuEFozblpsLgw6er08+UOCVPg8ksQmwD oD/7C6sUn0WMznfdl1+rNj4LDd7dVOtKYMt6/EfheOkFNP5DCCAHAHV04Iq+Cq9+s+8UA4dD5V4 iKrb1pKqBu/EAl/dCKpwQYn5YHKBBfRFjQPxGcmB06ycV+9YhO8deYPUXqmXAO2F8RR0pRpAk= X-Received: by 2002:a17:90b:1c84:b0:35f:b7f5:9b3 with SMTP id 98e67ed59e1d1-365ab8ba745mr5805240a91.3.1778119494184; Wed, 06 May 2026 19:04:54 -0700 (PDT) Received: from localhost.localdomain ([14.22.11.163]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-365b4cba340sm5100204a91.17.2026.05.06.19.04.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 19:04:53 -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, kuniyu@google.com, shenyangyang4@huawei.com Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jinliang Zheng Subject: [PATCH net v2 v2 1/3] macsec: introduce dedicated workqueue for SA crypto cleanup Date: Thu, 7 May 2026 10:04:24 +0800 Message-Id: <20260507020426.1126254-2-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20260507020426.1126254-1-alexjlzheng@tencent.com> References: <20260507020426.1126254-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. Signed-off-by: Jinliang Zheng --- drivers/net/macsec.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index f6cad0746a02..ddb22473e701 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,10 +4452,14 @@ 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 wq; =20 err =3D rtnl_link_register(&macsec_link_ops); if (err) @@ -4469,6 +4475,8 @@ static int __init macsec_init(void) rtnl_link_unregister(&macsec_link_ops); notifier: unregister_netdevice_notifier(&macsec_notifier); +wq: + destroy_workqueue(macsec_wq); return err; } =20 @@ -4478,6 +4486,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 15:25:21 2026 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (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 F26101FE44A for ; Thu, 7 May 2026 02:05:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778119507; cv=none; b=gsSBmK4feKCd5fHIcmOnrgkpGcN4Q8nlvaFyN7xuZUiSqvZN9vaz8P6kCxbDy7j9jwvWqqEi9D6g52L8PMQU6TTLjn3S0Lt/eROSI5epe5WZheK1a7sfQzB49qWNNT+Tv5CxTqd3Xb3RHRObyR15QLiY3DSPR/WzrDmvq0A4Pb0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778119507; c=relaxed/simple; bh=9+g2zk4x4olHwlJLPRosLYgpZONxo9J9FF9pSp8Q6Ek=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZO/kYd1kJrmocu4HQTYdoLElGaN4A3E/5LkdcUaQPyPF1vWkRm6F3ToBS9rtCWZOnNr75TmNVEr9HZk9v1wlOtAAw+bWYoT/Vx3m27jlsNPW09QG7gjuEXaSotrnuFJrlFv2wJ59IpsMtEvaCCwbGtvYbqw64wAtUv7B1MZ94FM= 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=abaK/mp8; arc=none smtp.client-ip=209.85.216.49 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="abaK/mp8" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-36534668247so349279a91.1 for ; Wed, 06 May 2026 19:05:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778119505; x=1778724305; 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=5u7krB9HatPzz4Tgv9WAIlMUE+1bSmsd922wqFTiVHI=; b=abaK/mp8AEvfGPDT+2CK1n/YtLjGVOqdeAvRn3tjaeBlKF64jkCrD3xvyzLxVrndPt SHSvexWtmZHML2RNa+PNmvjwJ7iAM7Vzz/b9fq4Y5X5AnYqK+k0AvnRrWnDwbDR6GK2q 0wPD/ext04vzny8MwPr7JEZc2nPAgEEf0opNBFv3CvjLZI48q2BtlkcDte6nt8I62dbF N4XCaJQ4kv2AfpHupH0hybqbpvEZFqePizTOkywpulpDmK3vf+G/nD9tEvpWl3Db6Obd E58EveGmqICAheg+4iX4o0SoReJ3Kmm2WA+H1B1sbYSp8cJFzAZIJwaNuCNmhdnRzUDn g9rA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778119505; x=1778724305; 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=5u7krB9HatPzz4Tgv9WAIlMUE+1bSmsd922wqFTiVHI=; b=SHcdd9N1TXe+fTNwrr8nywy083VwpcBrllM87Xf0hGebsF4urziRf6sSMAzh8Al3XH K/3eNJNeFIfruMfDq42Xzn2KKS2DbaJ6TfWVpe/yNElVs3ZaMksCn26TTS1zogdd++fu QAIOCgzIfJgVhBHkCVRDFvXXaaA53mPrdWzXqPF/9PxJE5umRKYd84DkxU4RCf4vG3qL QJ+Y/7opptRV3JP7KSGsJZJp+b1/kCp/lPt/4SbBYZ/8M6ZcPkHkwWrbbBexSMnjERRv BxD4uubQoQK9pJ1egXmcgr8CM1DqKEGR7Fie6k82XRSUGXClmoL9ShGv6UIOmFVh/95J xPlg== X-Forwarded-Encrypted: i=1; AFNElJ+eWB/fJs5BFFfGqofjRk4N6BiqfJ0xJ2ehT4DGTyz7petPZQhLfDPmKtrZBMOxiK5gaZCL3hwV4tn16zo=@vger.kernel.org X-Gm-Message-State: AOJu0Yy4jHMgceIvqI6eY/GJmxozQdqYzioVY1fsSiFIMrjI7rb1ciyR 2plVFmBxA1PLwyy6ZdyH/mUp9LfxG7eZWYusYt1j3WbTYgeWqVldFkde X-Gm-Gg: AeBDievlqzqaNqvOL1ZkeDWuS18Y7Kq9JgNc9mHP0S27Ja72R0UgX8nnnw4r1wtfsZj WwKMUwlam078FaEjg+VVxihQuCeBthLpTacDq1a2z69SBLuBoAVupy7fhlZF/jY+1uRLyuJ3ed2 4WhP75Fnqf1/uOSCvJSeaj8An7xM7NnpnOv6IHCit92BmYYFq42+sTEQPHTvcRK5GGmEClPO6P/ yfcVjde/mknYSN39IuHBKSCtCxmbRCQVhLCGCT2lKy1LO+YJAsjz6n3OiNVEyF/dlbkGJqWYmHA 5c5cbLThaekAarE+Hdhqbpy99cr998w5vahQiEdTueSHhC/6J1Iogpd4Pu8+K/TkkjzX8meMy4I QBpSvEIHeU6yTwpou+dgoZc5/q0x/cnv1A94a23nlpvQPuCF0k8c7Z97vfXzTJLIU0Z2RIhYApJ 0lukK0yM+5WOllvKvs2mB9Gnzs6cjB7E1J++GAd9vEp5Hp4Nofn1MfLZKFkQaSF7aoP3/zCrE= X-Received: by 2002:a17:90b:2248:b0:35f:b348:63e with SMTP id 98e67ed59e1d1-365abbe373cmr5738132a91.9.1778119505310; Wed, 06 May 2026 19:05:05 -0700 (PDT) Received: from localhost.localdomain ([14.22.11.163]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-365b4cba340sm5100204a91.17.2026.05.06.19.04.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 19:05:04 -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, kuniyu@google.com, shenyangyang4@huawei.com Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jinliang Zheng Subject: [PATCH net v2 v2 2/3] macsec: use rcu_work to defer RX SA crypto cleanup out of softirq Date: Thu, 7 May 2026 10:04:25 +0800 Message-Id: <20260507020426.1126254-3-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20260507020426.1126254-1-alexjlzheng@tencent.com> References: <20260507020426.1126254-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 --- 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 ddb22473e701..e0862ecd23f2 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..d6136debe1c8 100644 --- a/include/net/macsec.h +++ b/include/net/macsec.h @@ -9,6 +9,7 @@ =20 #include #include +#include #include #include =20 @@ -136,7 +137,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 15:25:21 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 0C264271464 for ; Thu, 7 May 2026 02:05:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778119518; cv=none; b=py6sBvidtP18j6COdWSD/5F2O5f9GQk1ys2cW2SuSYfrL/p/EBK+fEjPQrBPYjGRZv65BABetmnL/yFOVD6KJkjTy4rmSTtA3Ow2VvhcV7iSTNoYAFHm2AgSaopqLf1cle3PYmtWw/wUWn0Vnyf386L+tMi3GQlCv6VG6YNFJlI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778119518; c=relaxed/simple; bh=X8P3BDdBUCN3S+Y5Vgb7DmOy++ylY4/rZh0LtbSgBsY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Q6BQbZObRny8WpZ2kecxwpFhZIf7p2bYu2F2lfCeXP6Zd7ap0qmmsiDaZZSPu1IjPQurrI7Jl+hoW/O6F4W52i/bHCEyPgnJUKwxjMdDVm4gOA1quKoX1gU+PHwzfAl7Y2mx/qc6WxqxeKK7g6iaO93MfQX5k5LRttNESAKi4pY= 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=O9TS5AVq; arc=none smtp.client-ip=209.85.216.52 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="O9TS5AVq" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-366139223e4so4137a91.0 for ; Wed, 06 May 2026 19:05:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778119516; x=1778724316; 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=v53B5sCY8wU+gZFMEi6YoFYsOoEItoL+JNRsiTSKRrw=; b=O9TS5AVq7ykbO+9XIH84lW5uSu126mxPt96RPN3bsaGJL4Jw0GFwAsGwNxyauq9hBN ytjcoZoBtIVTyaZ7R4QOE5mBJlTMgyviX5+xRh01pebWqgvi0Z1q/Kxoyn8leQ/Q6fDE tmUbLHNGuMUk0FfbxAw/G959vfQl0gkYOxxBwysZG7s7Eo6R1vzECveC99/PQcoDrmrd HMdgxx1xF32JYIqdyxGKn0zzp6BAdzz0wu+hQwZOjHoqf0aRxMZLmwWVsrx8Fp0YjvyI YjDN4+jn7dmKIv78O3adgoxFtTPVsPLQYk2h3sFLbslv57pP8UOMfC7RlBtileB+i0Vs 8JLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778119516; x=1778724316; 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=v53B5sCY8wU+gZFMEi6YoFYsOoEItoL+JNRsiTSKRrw=; b=p8drNyoJ494PKIpVntNwUN9WOgCqUJQsH1+aYPxd7ujIvcZAJBKx/H3wwYtCbX21N7 DCdU2rtV54vgv99oQrobylCOhU+nAotTQLu4cL6sY5rGVjcBAHQIsNCqwnJIYW7yV6aA QtSxVGIfoftW3M+kEYZkORA/afX3z8w3YZZIAnlJ00drmbJ/5cdXcWt/EVvPMrdQumiB BSxvWDqCrNrlaDkp3LEtxCJhVVU0lTABGY0DL1NnjNXXB1hwdNfWXf/j9g8/DnNUWfPw N6oh7ITZZUMOMcg3K/fKQFe2AfB4Tp3bK6xvCZXzkht8JdqRp8sEGP/S6IXTVt2aseW4 /DCA== X-Forwarded-Encrypted: i=1; AFNElJ8aoBaIpChHImE+9IgfbtpwWuTcxHmRHIr6QC7qWQZcz+AGMJkCxCEv8lrMFopYLfm836OuMQD7/g8z+FY=@vger.kernel.org X-Gm-Message-State: AOJu0YykuXp/6WeUpoXxqDGnUfMVLUq+c9M6fFtpbA2mgAL9MvkDKVHu MHOSmb5dS3c7KNtBYrqjQ8+0ajKtnUNpfStpABxBNZtQEy27XHXnH6vY X-Gm-Gg: AeBDietJ1FjbMgBoPfJZPFZspyxYudvUZQEQBbnJHEs26VrBLEY51WgYnOmTO/ZQc0T VfwvfA3ZXjUlDPdWHrkGlMT66gd76xr+Tefox/g0bIRdzMjdmmeXN/IQ8IYxbgNUmIICQ+D3Qno pSfax6rXkagPu7kNmNPkMuAzfs/Atr0oXqhoJ+1Mxb+J59cwolU/BbQizMwSlUiGbrzIpS+f8U7 R4w7hqNUhZOJPLEWumE6qEvtFstJlOTxKKrd3gfOQ8inCtoAF4aUXUrBEovSaGl1WoTFwRc7S1C z8a5Si1TgkTnZHmy1wAi5Pefcc2EPSXH/mwTPOVNKX5Aq2gLsdBdVo8sXlwdcCdvw85leGG2ioI jOPrC99Bpo1sCjDO1u7s2wjwQymYQntq7BfHHM02DX/CmqeoWXrDv6Zs0gLqgw5jCc3ggyiRwEr 7YmWWAVlEBYWKLFNaMhOTvwt6kZ78anlcKXKelrFNV7x7K0mFERxYliNnnW/HniAgGlVzM/DvEe XtXB5Q1dA== X-Received: by 2002:a17:90b:3c8f:b0:359:8e5e:43de with SMTP id 98e67ed59e1d1-365ac47e3ecmr5981783a91.22.1778119516390; Wed, 06 May 2026 19:05:16 -0700 (PDT) Received: from localhost.localdomain ([14.22.11.163]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-365b4cba340sm5100204a91.17.2026.05.06.19.05.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 19:05:15 -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, kuniyu@google.com, shenyangyang4@huawei.com Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jinliang Zheng Subject: [PATCH net v2 v2 3/3] macsec: use rcu_work to defer TX SA crypto cleanup out of softirq Date: Thu, 7 May 2026 10:04:26 +0800 Message-Id: <20260507020426.1126254-4-alexjlzheng@tencent.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20260507020426.1126254-1-alexjlzheng@tencent.com> References: <20260507020426.1126254-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 --- drivers/net/macsec.c | 8 +++++--- include/net/macsec.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index e0862ecd23f2..c3eefeef9526 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 d6136debe1c8..cf92f57733df 100644 --- a/include/net/macsec.h +++ b/include/net/macsec.h @@ -187,7 +187,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