From nobody Sun May 24 22:35:48 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 7DEA430AD1C for ; Wed, 20 May 2026 15:57:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292634; cv=none; b=EMl9DKI2Jdi2LOm6+cRgzluHfpiYijYCqIWh0PsD1yMv+r/r4fpnEXGotFJUZRF6YhQpx2YoIkcGbO9tL3KkDj0h4IqbSq43V4WEz2ktRNfwVts4e6sOHj7sWs+ALF54pzzsBC6dgjuO3vsyATOHG2Xuh5BwZO1dRmGZurfaw78= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292634; c=relaxed/simple; bh=lLAXP5B8iQxWueO/YFGp6YJLOvSNEYcvKWK7YpLnyyw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ocah6EOcinzUgSBTOTxnM2mFkbED1OrXep4UP7Jobc18ul6utOE4Q97j+FfKGiJeXF4cof6hpjEWY3+G1aq5lpUHgvZsbFoh/iKbJWpp4f3a2x7H4DOzB7MM3mgbEjPyYv3dnnTSjrV0C5McC3e8mXwIoSwzlrpWmUW88umBC18= 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=VU/jObnd; arc=none smtp.client-ip=209.85.128.53 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="VU/jObnd" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-48962cd0864so5390385e9.1 for ; Wed, 20 May 2026 08:57:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779292629; x=1779897429; 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=0c34ELoPJoazDfI83jDiunrFakmVLtTU4AFI7jrtuhM=; b=VU/jObndwx4XVgVxm86lrBkd5lQLZqdHxbu7M8JFFLjcyf4fKBBi1Kqy6EOBzywzCr /rb8VFZjfG91s3eRnQv3GScobbmNFRpcsaTEte809zkT05l/CjK+suWmKnNjKt1XxyQq t/Wu32gjkVdVxTBY7GmE2VkO8tlxpmXvTWSw7FiJAV9H7TrKs/eQ3Sa2En6ISkl1Ot/y 8SzzfSFTF8avD5sqUXCUKsGBXyVvY5HzODcMNVpKtaaqRLvwob5ZcFOGsHfV4SodgcSL JqEhi+g3zVnZhz7+8TitL5podapOmAFVzHVR9soCRwA6vVlDjuGUmUmP5Ysx6nmMh02P 4MAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779292629; x=1779897429; 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=0c34ELoPJoazDfI83jDiunrFakmVLtTU4AFI7jrtuhM=; b=AAncgy8W4evM/aCFQpHmd+CsgOf+RLgAeZcrIbMPhrPoRYxtkjvAsoPpaD9QDYFCLg ZRrVQxsw1qSV4w16zfBabLImD1vZR2aNMm9esmJU+V+sU92msOzfZmeMWb3Oz5t8Rsya pqbEodeZYWkGycfvbLYChzhmEHs1Pl9e+2wRhxtbkmYhMTY++clTDk4uDz54KcuR3nhz VwvElW4gzz5kWjrKIWMUS+dlDpBx+mk5STqmEZbiVcuLtU08rTa6kNTRnaJfebMfDxla YFyGa7mg4WqIGV7fORWqI8h3j/wgxsoXD0/HvaRW3RFFL/1c5eaNIRFqnqWDAs1iPv0t zzbg== X-Forwarded-Encrypted: i=1; AFNElJ/KzqzUjtv+qnmhG26cVCbMTA5vC/Q6Ct5OnLPnXQv4QagYC8ONMmyMggjxfdbNtkPdKLwGZEMBw5kzrwU=@vger.kernel.org X-Gm-Message-State: AOJu0YzeANkHJ/JGNlW2L1sHt4h3YyIS+9ijeR6N+UN0W8g5N1SUQJ+x 7wQvc2K33rw8r9OeL6avh/YBHnaYLTK3S77g4Hh5dIW8IBhqkeYg14Il X-Gm-Gg: Acq92OHrZg3moohCubHXpTdZEy/CXIBoM+48CJ4xDQcLdEq5XZw7tVGW4gBr1Lyp8YV 0n+y6t6wj+UEZ81b+l1MZXPf1VSB0tdwRegnQ6funQL1gAAznEJrGFOERad41xRbuc2DKh4wyRk Tq/IWq2VtcICV29Ier5eynumFgnzpXiAvtoU0HB+IlxsHcFbmxnQkC2rmGRjI4MSAH5UrIggBLh vp3G4ByVteg3SCpIUATX3SDJAfoj16PgGEgQWhTfoQXIEoPH5c2G2F87CheMMUEN0n1ZrIZxpmD oFgonHDlV03Axq480du1Ir7km25+V5pD1J1Z3zJKAlfqD7jD31NF7VBNkwnf+H3/SaPGLvWPE2K QIgoSqmqGkbO4vesS7TBgnwCqxNERrV3/3TsN2yYDRVFtwn2oQ5cifMScJoG+LS13wGyFpIT6y6 nM5qsSFl6OKHPYAzwfcFJR8s9+a2IRg/xj/vi6YkDOR84WUnxDVhdvpLlKunf2wCA= X-Received: by 2002:a05:600c:4692:b0:48a:52ce:a4d3 with SMTP id 5b1f17b1804b1-48fe63262famr211663295e9.8.1779292629254; Wed, 20 May 2026 08:57:09 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe79ce3sm137216715e9.31.2026.05.20.08.57.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 08:57:08 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev, tudor.ambarus@linaro.org, ardb@kernel.org, linusw@kernel.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v3 01/12] crypto: atmel-ecc - rename driver_data before moving it into atmel-i2c Date: Wed, 20 May 2026 15:56:52 +0000 Message-Id: <20260520155703.23018-2-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260520155703.23018-1-l.rubusch@gmail.com> References: <20260520155703.23018-1-l.rubusch@gmail.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" Rename the local driver_data instance to atmel_i2c_mgmt in preparation for moving the shared I2C client management infrastructure into the atmel-i2c core driver in a subsequent change. No functional changes intended. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index 9660f6426a84..c9f798ebf44f 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -23,7 +23,7 @@ #include #include "atmel-i2c.h" =20 -static struct atmel_ecc_driver_data driver_data; +static struct atmel_ecc_driver_data atmel_i2c_mgmt; =20 /** * struct atmel_ecdh_ctx - transformation context @@ -209,14 +209,14 @@ static struct i2c_client *atmel_ecc_i2c_client_alloc(= void) int min_tfm_cnt =3D INT_MAX; int tfm_cnt; =20 - spin_lock(&driver_data.i2c_list_lock); + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); =20 - if (list_empty(&driver_data.i2c_client_list)) { - spin_unlock(&driver_data.i2c_list_lock); + if (list_empty(&atmel_i2c_mgmt.i2c_client_list)) { + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); return ERR_PTR(-ENODEV); } =20 - list_for_each_entry(i2c_priv, &driver_data.i2c_client_list, + list_for_each_entry(i2c_priv, &atmel_i2c_mgmt.i2c_client_list, i2c_client_list_node) { tfm_cnt =3D atomic_read(&i2c_priv->tfm_count); if (tfm_cnt < min_tfm_cnt) { @@ -232,7 +232,7 @@ static struct i2c_client *atmel_ecc_i2c_client_alloc(vo= id) client =3D min_i2c_priv->client; } =20 - spin_unlock(&driver_data.i2c_list_lock); + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 return client; } @@ -323,16 +323,16 @@ static int atmel_ecc_probe(struct i2c_client *client) =20 i2c_priv =3D i2c_get_clientdata(client); =20 - spin_lock(&driver_data.i2c_list_lock); + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_add_tail(&i2c_priv->i2c_client_list_node, - &driver_data.i2c_client_list); - spin_unlock(&driver_data.i2c_list_lock); + &atmel_i2c_mgmt.i2c_client_list); + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 ret =3D crypto_register_kpp(&atmel_ecdh_nist_p256); if (ret) { - spin_lock(&driver_data.i2c_list_lock); + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_del(&i2c_priv->i2c_client_list_node); - spin_unlock(&driver_data.i2c_list_lock); + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 dev_err(&client->dev, "%s alg registration failed\n", atmel_ecdh_nist_p256.base.cra_driver_name); @@ -363,9 +363,9 @@ static void atmel_ecc_remove(struct i2c_client *client) =20 crypto_unregister_kpp(&atmel_ecdh_nist_p256); =20 - spin_lock(&driver_data.i2c_list_lock); + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_del(&i2c_priv->i2c_client_list_node); - spin_unlock(&driver_data.i2c_list_lock); + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); } =20 static const struct of_device_id atmel_ecc_dt_ids[] =3D { @@ -394,8 +394,8 @@ static struct i2c_driver atmel_ecc_driver =3D { =20 static int __init atmel_ecc_init(void) { - spin_lock_init(&driver_data.i2c_list_lock); - INIT_LIST_HEAD(&driver_data.i2c_client_list); + spin_lock_init(&atmel_i2c_mgmt.i2c_list_lock); + INIT_LIST_HEAD(&atmel_i2c_mgmt.i2c_client_list); return i2c_add_driver(&atmel_ecc_driver); } =20 --=20 2.39.5 From nobody Sun May 24 22:35:48 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.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 82FF133F8A2 for ; Wed, 20 May 2026 15:57:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292637; cv=none; b=q1Sva8bmwzt7dATMPT/vtM0yxm8XWWj91XAzL3cNrc9pyfLGfyqpoTpUzVOWiCcYg9bRT52/9Kr8f2NMU/B8iP2VV5vAB7ZWZtANsct/hY4pqgTgb8T+cXU2deq8OsM2AvNDzFDP39q6KRSG5mje7wqBfZGwFl2fozsGSfb26MM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292637; c=relaxed/simple; bh=7NvgkVii9Mt+xIZwtiwwvrxtLwTlV0FgDfzptlWirWQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=FmDQFljpuuUuv3NA24HKgBc5dvb4qX/mmUG+LefHBHzARywNPNHJG8PsqNZdxonKyPE6K4ZkSh4kyzQOrGB8ZzUdDw5wlogvLn0WjO4MsS4FO35BDQnSTQzGquuDXwsv3PtbN3hGuyDcLg+E97AOvtMT0nDe/uRMtdQ7yDqHLQs= 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=ntdMmOGp; arc=none smtp.client-ip=209.85.128.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="ntdMmOGp" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-488a8f97f6bso7689095e9.2 for ; Wed, 20 May 2026 08:57:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779292631; x=1779897431; 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=oJt+1uhmRklXQWY1fAdB9UbwqmpgsjgJ14JFT2yZWDo=; b=ntdMmOGpOfWo8njdS7nH/M1gC2mxbaYawtNFFXpG3tTzJ9dpNQcRwW1DvIKFdeJY3S I9vB9Ni4o8wWYiEtjhzhGX42mR1u8uPUyHEUuXdZDsE1z4vbjPMG3NnLpPNCnDECXqH3 MQd4/IjnA0HocnJS9bLanIVui+Qbl0YAnYuSa7a9SiLR9M/R0mfnqW9dxHcMR9uNWtDm DlEhirnDo/LEFFSEXcUXpg28Xtm9xTbT6xfRYZEn2+4ZeQHwIukuMa+mKZ5cCE/ZwTqj oTbp73FsEdwzT2z9i0VhOVIG+uKIk/OkJDdmUGvN+UXH43W8LpCkOuEsx+JWngnqAtog TOTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779292631; x=1779897431; 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=oJt+1uhmRklXQWY1fAdB9UbwqmpgsjgJ14JFT2yZWDo=; b=obWbz73GsVQWDz+GhLeuaBki8JnpPtabs5lPSPsiox5V4G+1i6WQB8SJmz+8+aW1Yp qMS8xqdX6z9hz/eM9cRCcrml9O7gzIDpSGJ74wHMIeARiTzXMytKVn7PmzDPsx1Pmm1z TixWHwf0rhQw6bqSXPhiNVcSa66J5P3+Px2RhjJdUGWYioChVvb7aZhg1U8VAyIOCbb6 ckKvw+veje6V2NrcMqod8Op5NMsQO8eW6MbIYTpnDsqGibwpS00C/HjI0MhKHqaHB90h +40sL7yKNWA2LOLq3lc6WZWUGn/JqVVsvQYCg6YMylcifigSXWs1HrRk6oKSi4n64kbB JZyA== X-Forwarded-Encrypted: i=1; AFNElJ+GuHGijj5l71BffJTOeC5pSRfD8ZwwJZZwDVNlfk86JDGKVH37IE6l6nJHobojRAuprCRgcX7TrhMqDDU=@vger.kernel.org X-Gm-Message-State: AOJu0YwaMD+GcMWuH6jmLtj6xz2GOCtjB9mCHcAmn7zUTW8QShisZEgZ YCNzDHy+rbRUWSjnct3nj+QSp4JjpXDhttCze2axG5T6nEsacZwoO5Dc X-Gm-Gg: Acq92OGiJuY2qxPyCeVXJGhmRx+ub6LFid9Zc14tMihdglbq4aU9ttsG125bwIUw8IT AGPGTq8DSC2ALIuUbt9aYJsNwxOaGuu1cxyVe80fQU73XzopFs1N1CifGvYoV0jiyx3R8xLqPv9 AoZd0+D6IEWQk57TJP4s4LrR84t7wRL776776DKoSgJgO5zcZxVh5OM+EBghmTqwRDGOoWlv1ey TECCql4B+YtOYjikKFbz1M41p1n3/XFIwxGKlXI61RCJGWqKUHf1cdlUR4hEWVC0Aea5A3SOjWj T4aLIvpY85xaMSClrTh/A7nC0OP1BSE8PiXW8gbCMtZveybzhIvEBHAGF9YQrTprQm+yljH/E/e iF85NIo1eoaD5tnXAOht8qU2E/9RrCfEzBv3M27PG39b1MCBen+n1oime3xufT0BDHYHh+uoFU7 UGyK/HY04Q8YagOjd8+TzEhaWPnj+Yib27sNnRt4PeVQFeZx8VdsNZ48RC78mXnw8wawHP2OI+i A== X-Received: by 2002:a05:600c:8b25:b0:490:6ab:406a with SMTP id 5b1f17b1804b1-49006ab40f1mr142371715e9.8.1779292630575; Wed, 20 May 2026 08:57:10 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe79ce3sm137216715e9.31.2026.05.20.08.57.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 08:57:10 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev, tudor.ambarus@linaro.org, ardb@kernel.org, linusw@kernel.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v3 02/12] crypto: atmel-ecc - fix use after free situation Date: Wed, 20 May 2026 15:56:53 +0000 Message-Id: <20260520155703.23018-3-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260520155703.23018-1-l.rubusch@gmail.com> References: <20260520155703.23018-1-l.rubusch@gmail.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" Fixes the very likely race condition, having multiple of such devices attached (identified by sashiko feedback). The Scenario: Thread A (Device 1 Probe): Successfully adds i2c_priv to the global list (Line 324). The lock is released. Thread B (An active crypto request): Concurrently calls atmel_ecc_i2c_client_alloc(). It scans the global list, sees Device 1, and assigns a crypto job to it. Thread A: Moves to line 332. crypto_register_kpp() fails (e.g., out of memory or name clash). Thread A: Enters the error path. It removes Device 1 from the list and frees the i2c_priv memory. Thread B: Is still actively trying to talk to the I2C hardware using the i2c_priv pointer it grabbed in Step 2. The memory is now gone. Result: Kernel crash (Use-After-Free). Fixes: 11105693fa05 ("crypto: atmel-ecc - introduce Microchip / Atmel ECC d= river") Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 10 ++++++++++ drivers/crypto/atmel-i2c.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index c9f798ebf44f..4c6860fc3dd9 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -218,6 +218,8 @@ static struct i2c_client *atmel_ecc_i2c_client_alloc(vo= id) =20 list_for_each_entry(i2c_priv, &atmel_i2c_mgmt.i2c_client_list, i2c_client_list_node) { + if (!i2c_priv->ready) + continue; tfm_cnt =3D atomic_read(&i2c_priv->tfm_count); if (tfm_cnt < min_tfm_cnt) { min_tfm_cnt =3D tfm_cnt; @@ -322,20 +324,24 @@ static int atmel_ecc_probe(struct i2c_client *client) return ret; =20 i2c_priv =3D i2c_get_clientdata(client); + i2c_priv->ready =3D false; =20 spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_add_tail(&i2c_priv->i2c_client_list_node, &atmel_i2c_mgmt.i2c_client_list); + i2c_priv->ready =3D true; spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 ret =3D crypto_register_kpp(&atmel_ecdh_nist_p256); if (ret) { spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_del(&i2c_priv->i2c_client_list_node); + i2c_priv->ready =3D false; spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 dev_err(&client->dev, "%s alg registration failed\n", atmel_ecdh_nist_p256.base.cra_driver_name); + return ret; } else { dev_info(&client->dev, "atmel ecc algorithms registered in /proc/crypto\= n"); } @@ -347,6 +353,10 @@ static void atmel_ecc_remove(struct i2c_client *client) { struct atmel_i2c_client_priv *i2c_priv =3D i2c_get_clientdata(client); =20 + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + i2c_priv->ready =3D false; + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + /* Return EBUSY if i2c client already allocated. */ if (atomic_read(&i2c_priv->tfm_count)) { /* diff --git a/drivers/crypto/atmel-i2c.h b/drivers/crypto/atmel-i2c.h index 72f04c15682f..e3b12030f9c4 100644 --- a/drivers/crypto/atmel-i2c.h +++ b/drivers/crypto/atmel-i2c.h @@ -129,6 +129,7 @@ struct atmel_ecc_driver_data { * @wake_token_sz : size in bytes of the wake_token * @tfm_count : number of active crypto transformations on i2c c= lient * @hwrng : hold the hardware generated rng + * @ready : hw client is ready to use * * Reads and writes from/to the i2c client are sequential. The first byte * transmitted to the device is treated as the byte size. Any attempt to s= end @@ -145,6 +146,7 @@ struct atmel_i2c_client_priv { size_t wake_token_sz; atomic_t tfm_count ____cacheline_aligned; struct hwrng hwrng; + bool ready; }; =20 /** --=20 2.39.5 From nobody Sun May 24 22:35:48 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 2770C34D4CE for ; Wed, 20 May 2026 15:57:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292638; cv=none; b=gAsBZ0oL4yOswwlg33q/aKjD9riAmhQTL8eOpgaGZXYIjMV+tejh3nv70MwIXonvgBAWBuwPJizY05LigivtHdcaU+wUSP76Bzmgwu4yFKcPQJ/jwMWiC6qATdDpFSprs671szBrMgAiBkWl9GabOXab6GU7MdIj360kBtodAPs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292638; c=relaxed/simple; bh=v9CpMoAoewso2fVLJ8cAOaQo1vppibb1dfPFCN/565g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TfNJ2owfcd3JWvLAeFfhMBjFL1Eb4kxE/7CfOSVv1zOYuW4YdqkQ7wT0Tm/XMiwkhTPxLjNN7mJ8p4ik/Vk4SUcplVCzbc6Jm+o9/7Lp3UR3JKZbAmuzaoFdTOZl7Mb73uvz38YsqXY9VDxZvG3KdErhp4fM2VCgYn1UAdwnaRw= 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=ftLL/bnK; arc=none smtp.client-ip=209.85.128.54 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="ftLL/bnK" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-488a8f97f6bso7689175e9.2 for ; Wed, 20 May 2026 08:57:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779292633; x=1779897433; 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=w87C2HO3mgnApoyvB+dNnB4jQakb6mNAOv8hi/O/IbI=; b=ftLL/bnKqPEOhrRorqd+k6ADtKB8mzvdLQizkpPGQo8j8mBwGgJ/h0v7chZEOZahyj 7pS/DaTNMzTzUNJs5Tkjir2YlJhi2x0rIaT9pE1Gv11O1qcsdQ19vbPAwBZleb3O/jjX 5pX56bvzYeVnHyrLSfbyAU/2auU1ErODUZextq++Y/R2ZMzacKY++tc33x7NNd+nYFJh RlKCU0mmK70LUTW6O3rCs7snao+HyEze4Ms8Ux5PSbg2GZc/xTPoLdKTZ4AsZw8xlwg0 eIOAnmPzOHvpwApz6ky9Lxt2LRgdkUDCzdWtpjfVe451wtq3AznYap4bROk1SZppcBFR rwxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779292633; x=1779897433; 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=w87C2HO3mgnApoyvB+dNnB4jQakb6mNAOv8hi/O/IbI=; b=nd3cz1ySqaEnr4YisfsD3OMbOgwK1z1KW4eapALQfCzW4gc2jjraSP4gUcVGnNwTO5 TJe9n6Nn+J8K9Pbqq+wUtz0bHWHao+muP2T9RA37U7fss8ETOjyUGOeqblOqXcZ7q681 FBaYdT4cq+bdwUUnw9gsn+K7KYQ9chTZpH3IPL1Cpjw5TnlDAhD8R32y7+7nvsQqe7PM 1XnfjrJkEMDhNhtg6Tx77LY5nqzw6bleRUzM0QhLRkjaK7fSgRRgI1Q3zA4flX98YfAI cPE5ImlOJtDp4o1fVPDcXNa77PQO9Y3zV5zr89hoUPpJEmulGoEn6HCtFzG1MsniSdBN Bwcw== X-Forwarded-Encrypted: i=1; AFNElJ8YAGIlFmEOQk8vs1rW+j8/sg6a1fUMCD33duMS/gAaxspWdFBcFDq0b2rohvXvD5di2JNReoIPkO0yBGY=@vger.kernel.org X-Gm-Message-State: AOJu0Yw24cy9C4Um/XqdMnf+PVsQNQiMfQczKagnRui+SYvoPK6+emCo Oslmio7ctvKyaoamy7y3ZRwLHkr8WZIbB1FCwTl1zdNy9mYowgELDMtX X-Gm-Gg: Acq92OEMYFbnRtkypTHIF0fD+R9/2mwP5kNKOtwmHgvzK4twYEB9nv5RxXN38ABMZHs mHkrDJ4o9BSA7sTkedhpSPbyHbFABPRcUP0rkuYzyXqnA02kfcVS2FMSli57P72unQcWY7OvoFh yeRYu7Jfl+yEIA1h+/CdhBlb90DRlzl5r3cEWB5nRf/eJg4p1nmTWRPeXwAoQkrJ+Tk03+WSgGK LmhR29PqlxNotOPl1oAdd1P5fzlhB7yu3Bfc3b4HusbxyCeCx33sfCjYrJQHQVM6TPaKtkcylbF kYuBGWVCc+spAxd1bvSBmymlhHaXrB4T6E4Gk0jPjwKgUJB2SX6UH3umN9x3waqtfGSJilK/au8 /2U5ErVLwMg+cMzjo7TCOUJou2NzM7B8jqB8DWMm294pAvGYu4wnHT+J5VMuOTpiHbvpuOqPxrC gf5uuVaXi+dusB3mZfi4UAObrusAYojT/zQOj3uYP9/V7FxlTos11pnNmngXmAzwNSAIw5tHTYb A== X-Received: by 2002:a05:600c:4692:b0:48f:d410:6072 with SMTP id 5b1f17b1804b1-48fe6302a9fmr208044465e9.6.1779292632702; Wed, 20 May 2026 08:57:12 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe79ce3sm137216715e9.31.2026.05.20.08.57.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 08:57:11 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev, tudor.ambarus@linaro.org, ardb@kernel.org, linusw@kernel.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v3 03/12] crypto: atmel-ecc - fix multi-device kpp registration Date: Wed, 20 May 2026 15:56:54 +0000 Message-Id: <20260520155703.23018-4-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260520155703.23018-1-l.rubusch@gmail.com> References: <20260520155703.23018-1-l.rubusch@gmail.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" In a scenario where multiple such devices are attached, the following situation may arise (finding by sashiko): Device 1 Probes: Calls crypto_register_kpp(&atmel_ecdh_nist_p256). The Crypto Core modifies fields inside this global structure to link it into the system-wide algorithm list. Registration succeeds. Device 2 Probes (Minutes later, on a system with two of these I2C chips): It executes the exact same line of code. It passes the exact same global &atmel_ecdh_nist_p256 memory address to crypto_register_kpp(). The Disaster: The Crypto Core tries to register it again. It overwrites the internal fields that Device 1 was already using. This corrupts the Linux crypto subsystem's internal linked lists, usually leading to an immediate kernel panic or silent memory corruption. Introduce a global mutex and reference counter to ensure that the static kpp algorithm is registered only once by the first probing device, and unregistered only when the last matching device is removed. Fixes: 11105693fa05 ("crypto: atmel-ecc - introduce Microchip / Atmel ECC d= river") Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 56 ++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index 4c6860fc3dd9..2f82f529228d 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -23,6 +23,9 @@ #include #include "atmel-i2c.h" =20 +static DEFINE_MUTEX(atmel_ecc_kpp_lock); +static int atmel_ecc_kpp_refcnt; + static struct atmel_ecc_driver_data atmel_i2c_mgmt; =20 /** @@ -332,20 +335,26 @@ static int atmel_ecc_probe(struct i2c_client *client) i2c_priv->ready =3D true; spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 - ret =3D crypto_register_kpp(&atmel_ecdh_nist_p256); - if (ret) { - spin_lock(&atmel_i2c_mgmt.i2c_list_lock); - list_del(&i2c_priv->i2c_client_list_node); - i2c_priv->ready =3D false; - spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + mutex_lock(&atmel_ecc_kpp_lock); + if (atmel_ecc_kpp_refcnt =3D=3D 0) { + ret =3D crypto_register_kpp(&atmel_ecdh_nist_p256); + if (ret) { + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + list_del(&i2c_priv->i2c_client_list_node); + i2c_priv->ready =3D false; + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 - dev_err(&client->dev, "%s alg registration failed\n", - atmel_ecdh_nist_p256.base.cra_driver_name); - return ret; - } else { - dev_info(&client->dev, "atmel ecc algorithms registered in /proc/crypto\= n"); + dev_err(&client->dev, "%s alg registration failed\n", + atmel_ecdh_nist_p256.base.cra_driver_name); + + mutex_unlock(&atmel_ecc_kpp_lock); + return ret; + } } + atmel_ecc_kpp_refcnt++; + mutex_unlock(&atmel_ecc_kpp_lock); =20 + dev_info(&client->dev, "atmel ecc algorithms registered in /proc/crypto\n= "); return ret; } =20 @@ -357,21 +366,16 @@ static void atmel_ecc_remove(struct i2c_client *clien= t) i2c_priv->ready =3D false; spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); =20 - /* Return EBUSY if i2c client already allocated. */ - if (atomic_read(&i2c_priv->tfm_count)) { - /* - * After we return here, the memory backing the device is freed. - * That happens no matter what the return value of this function - * is because in the Linux device model there is no error - * handling for unbinding a driver. - * If there is still some action pending, it probably involves - * accessing the freed memory. - */ - dev_emerg(&client->dev, "Device is busy, expect memory corruption.\n"); - return; - } - - crypto_unregister_kpp(&atmel_ecdh_nist_p256); + /* + * Note, the Linux Crypto Core automatically blocks until all active + * transformations utilizing that specific algorithm structure + * are fully freed and closed. + */ + mutex_lock(&atmel_ecc_kpp_lock); + atmel_ecc_kpp_refcnt--; + if (atmel_ecc_kpp_refcnt =3D=3D 0) + crypto_unregister_kpp(&atmel_ecdh_nist_p256); + mutex_unlock(&atmel_ecc_kpp_lock); =20 spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_del(&i2c_priv->i2c_client_list_node); --=20 2.39.5 From nobody Sun May 24 22:35:48 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 239EF35674A for ; Wed, 20 May 2026 15:57:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292641; cv=none; b=JB4iNnEVMZM40q4y9w4g1A7l0hSw36//YuRLBvRz9oRLgATv9AxbUGDzBQPUt3OCmp/gdejKRefQ8+cGWaptxqz0hColCIvjqqUw9EL2moBdzT8csp0R9RJJa2dbNCYTxLKWnC52zEwqyPZQ+ibVnoP93hNLt86sOgIN05RHtUQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292641; c=relaxed/simple; bh=hYYdyCs9GfNqLomMs/oOk/grMGDcxDilMXUzArpoRks=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=HDWLW4H9sUp9nAjB8IaQj7odE85BOIxbugyYr5W8k/8osbNDuxO7m0XwJj3sCeQ81eA70mA+mCaTdJnCM8N7GIn0eMah8tYempnQ3c64LILjntRkdoNWbgWCt4F6wfm0pkXjlW/mA6WISKzwqr8/0A0N9rc6tlEt9lkSwUhamYI= 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=kewT0lzK; arc=none smtp.client-ip=209.85.128.48 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="kewT0lzK" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-48962cd0864so5390545e9.1 for ; Wed, 20 May 2026 08:57:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779292636; x=1779897436; 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=rqqB3wEr5ZYs4DFpxkY8toYweVvRXAfc6YYqHonw/aw=; b=kewT0lzKuVTMalD1qaYCXMrL59du9Vpw0inBwiO8S2XP5feKCDEeI4bRJl+olKBuYu nz727GJ7gDOhc5E9kv0/TkxqOmgX9vFcPZhskZPsuOaa9Mlsi16TUrxBvBp7Mn5WZ+t3 4ceep4Q1JC8wMmrL0HSV1E9UjjiWnEh+vUmRT+bCHkE1DUMbWma9RFtlUUs/u31z7lIw 57lbT0axzSMEJzPsZ23J9gD0tAndtCXvZ+YyytCs0vbAqFomLSavu/cxnzaCu8xoefoB n0mTOIheGEZDyIgdEvbr58AHApChrq38v13jdWSbuun/0g5hFY3bz76Lk/CkLNj1MevX xNCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779292636; x=1779897436; 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=rqqB3wEr5ZYs4DFpxkY8toYweVvRXAfc6YYqHonw/aw=; b=RQZN628EJ2p8POEzD15BSWzwDFAqgXMvSkCZYRDhFoM/ytrQ0xpM1MIMAe7BL1IwP8 7roZs/XG3RD6RCm7Oy6IQQOVR4bS3/IHY0hOwxhvoeuYk0qJ9BUEOzlwqm2WNf5uRnnf BCYdYHgss6WcBxG3yMp5LaC84gmXH2VJswXAICB6eYbV/pTuo/IewhWAwkoTYrcz56qI y9aLH0bQAbwJ/rfQmtXp4EGvGHMZKZplHWh4qO8wFQ4t3rVNKG8SsREOaJFN0a6eMx4u 4NaXB484M0zndJFxbQbS6mzzZlEidzQlqHrSPfgSeMa3oY4GxqNLY5xvuegwQWutXZb5 ExVA== X-Forwarded-Encrypted: i=1; AFNElJ+RHZ0uhJkHFjyGRwhXqOImCBiBAVXxI2nyPVCzo6xYS/ThBfyZvuPnCvYR08nRGDai2TizSA6p71dF09U=@vger.kernel.org X-Gm-Message-State: AOJu0Ywreeb6oUeCJ4yjrflJlvg7dnDOSJsa1/eHQmSj42EEqg+VejFf 7hJbc5ln0tD5wMNB3B9F6fdSXzwU8aI9eL7S7qZ2XAVVgjd+6KgGQe+E X-Gm-Gg: Acq92OGli17ugbYdSmS1F9v1GKwA64PPssLvKAKhuQF423lQ3jVPOUlMzUBVqmudBVU ENbFnrad/5oEAJTKXsGhdlLt4c4qqK5hKRRgsbrxgS+gRfTXH/RUZkhKTa3rH8CKpysq7/Wt6/J ULHFKb79QmynrlnRfvEk7aG3ryhiW4VCjkFINtCDjPOj3gJhWuqUvUknObZqSbzMq5v5VcU2DwW aI8SZFQRHY7t6PWXK20wYP1aHifcLjgDNtg+4UXuHGcyR2RtunLZPEm4nOgYyLivo+vcPz6/lt1 4vwK1vwkEPMYF0cvdJvtad6HGbHgY153aTIOSAQ5hro6iezZywJ84nDumCdAJ3erJRaZkSCjF3h YYE+cAYut5GD8A6nkWwdfgOugG49yPPkeeUNlTtZx/UJJ/xc9eFiUMCSArb0PJ56q67H7jRIKfS DU6CNO82EhqmyuGShBBoKQAUq3eqcypwG2/WVBHQPkGH+iRxLXzYuS7v0DAePt4tM= X-Received: by 2002:a05:600c:4fc5:b0:48e:65f3:a950 with SMTP id 5b1f17b1804b1-48fe5fd55cfmr179726255e9.1.1779292635532; Wed, 20 May 2026 08:57:15 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe79ce3sm137216715e9.31.2026.05.20.08.57.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 08:57:14 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev, tudor.ambarus@linaro.org, ardb@kernel.org, linusw@kernel.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v3 04/12] crypto: atmel - rename atmel_ecc_driver_data to atmel_i2c_client_mgmt Date: Wed, 20 May 2026 15:56:55 +0000 Message-Id: <20260520155703.23018-5-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260520155703.23018-1-l.rubusch@gmail.com> References: <20260520155703.23018-1-l.rubusch@gmail.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" Rename struct atmel_ecc_driver_data to atmel_i2c_client_mgmt to reflect its generic role in shared I2C client tracking and locking. A subsequent change will move the client management infrastructure into the atmel-i2c core driver. No functional changes intended. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 2 +- drivers/crypto/atmel-i2c.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index 2f82f529228d..b06d47babd2e 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -26,7 +26,7 @@ static DEFINE_MUTEX(atmel_ecc_kpp_lock); static int atmel_ecc_kpp_refcnt; =20 -static struct atmel_ecc_driver_data atmel_i2c_mgmt; +static struct atmel_i2c_client_mgmt atmel_i2c_mgmt; =20 /** * struct atmel_ecdh_ctx - transformation context diff --git a/drivers/crypto/atmel-i2c.h b/drivers/crypto/atmel-i2c.h index e3b12030f9c4..30ed816814af 100644 --- a/drivers/crypto/atmel-i2c.h +++ b/drivers/crypto/atmel-i2c.h @@ -115,7 +115,7 @@ struct atmel_i2c_cmd { #define ECDH_PREFIX_MODE 0x00 =20 /* Used for binding tfm objects to i2c clients. */ -struct atmel_ecc_driver_data { +struct atmel_i2c_client_mgmt { struct list_head i2c_client_list; spinlock_t i2c_list_lock; } ____cacheline_aligned; --=20 2.39.5 From nobody Sun May 24 22:35:48 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.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 B6871356774 for ; Wed, 20 May 2026 15:57:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292645; cv=none; b=oc85l3Z1tu9KzUkt8xXsd6bkKzATYjLgIatWVI7lw8JZelKauv5OyDmB3h9zqDnzqFw5NGNLvM1YcTDOwXQ4fGACTqrTaTkd668HboZc/sQUQFlVS+QHfH62WUoI7c5VKZJtwLR3/PqetyC/e/R9FFFmy00OLNTfrmTMAWF2qk8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292645; c=relaxed/simple; bh=pB3QjDyEEv7fGjXAktmlBZ6uAXjw+PIbYSUsDa3H3ds=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=eMmqWtXaOhHefxIif3UMRU1RqJgTVrcZIqcyJYSOoNDsp9PVJag/6PoG0njvVVHbCqoLUFqOA0pf84+7zMlWkmMoewiIbgKLoPlt+eNa7d72dx2S1IGCBwxMp6FTptoOv21+5Bqqn39rdCVE3T4Nx+WPztMXftfz7vjnWR/jtDo= 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=g9QgoLzl; arc=none smtp.client-ip=209.85.128.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="g9QgoLzl" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-48fe7a40e51so4129745e9.0 for ; Wed, 20 May 2026 08:57:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779292638; x=1779897438; 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=QwQ7nKFRuRlu0LJRik1dF7YG3UyIAH7qsByZKNSFesc=; b=g9QgoLzlnHyQXsC9iz2bUsV5Sa1GYyUd+WRR8GDWntF1zl4a7cyHI/H3Mc1pd6arfS CoCI7PIHawfy7e4krO4s8yJ2tuKiyh6vtlTOGapbEucC5oswNa3Eyu6JPab3h+wGfw56 CSd+eXPCaHNPWgVpS2yLoCK0t7LDbEPYlnN3B9qE9x2QCYEIfvKNrHVZYYNtVd20NHhW K+wpxjSrB7KLnhuuUZqVJ6ytwnlBF2RJxmZPWnGBTdii7NvhSh9GDMJAaD/4mZSc2qQE WSx5glea22zSuUhm3CBhaleEVjZHbsWHW0dhtn31ruyVoy1qcusaGxC0SkC/v72Vi5aP WAYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779292638; x=1779897438; 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=QwQ7nKFRuRlu0LJRik1dF7YG3UyIAH7qsByZKNSFesc=; b=mgC+35shxTfKlgVcwb9MLQ4Zc6/QlUntkRsFUoEkv0S5Tq6fOGc0vVOtzhjm3VThtk iGQglyW6117iQ+Mp6cdkushYXwOOJUlvgzQWvSuMFGlSqBVkH2Aj/VI+ooYuC6f/BCjA 5u143y80w5QTyakP1aAIhrQ/vSzBKjj4kH4WL7A6yqHeCH12sgielFIQ2nFu3SuYftIL 4tlqkKTv3B3GctJ/vO9y84kAxAZU1M7GajcNgOn5rshw9CUM1MQhEzUosvTHa6MgNgNn qLrOzBbEum+NCd5kdqKcXafYY3VbKQWxHGxtLxhDH7J4ssCGZbR88maAXZUNNywlLzRE QTkw== X-Forwarded-Encrypted: i=1; AFNElJ+fZ5CLohu+Tacg4PLA3EfTM8ItYP9Fqta9eBgqxPakgg7kDz4LBr5SWpnXQtCel9mw2z7Pq7ekT91zv74=@vger.kernel.org X-Gm-Message-State: AOJu0YxFKJbpKYuKT0XDiW4jdC37D7Llk4tGH55cbBgYVxcuCyn+Aq+4 BSUVUlMK/PZQnPKy274lyBMWULBMO4EBkli4jPS0fQrYL4Ti+M9L2CaI X-Gm-Gg: Acq92OEF6pHdFsoRhzmWSMu3+FgR9pxC3Ed8lDKyNN0GKT+zt9+2fVPM7qh8EEp9VRB cLyOYDrFyxwbZ6sD66hHXbk89NRc8e8+Vrf6ewl4MszctuFpqP9BQwUiy5WlpJq+BpS3FNDiYWC 1Q12VIP0RyVxpu9ST3HJv54ZQBijBqCOTxsx7ut6hGY5rpB7dC3hjS/uroghy7Fv/db4DFFczkZ Nex8LOAw6hUHdsskZd8wcXk0W6K8RzDEB/AHmf5PSsO+dYwfvm14x3hnegCZwCn9ZUKrgemvhDp k4p7n8jXm0xPC61XSAhnIOS0577JhVColIXlngg3YGv6iNQipIkq4P1+eWDrBOYrG019TlI2qxN Mcnyb8RSZW45/RJoZLUlab8AY1uAicBRc6OFQpZGkzQpHH8xsSh16rnYkB0qWIdOBE8tKIrAar7 EZX6rTQzLR2GQ11dj9INLyydBw0ywM3IjrtTF03k/v050wVx7oAkBkEDNDrZPrWsY= X-Received: by 2002:a05:600c:1f8c:b0:488:abe9:86 with SMTP id 5b1f17b1804b1-48fe631817cmr186005145e9.7.1779292637515; Wed, 20 May 2026 08:57:17 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe79ce3sm137216715e9.31.2026.05.20.08.57.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 08:57:17 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev, tudor.ambarus@linaro.org, ardb@kernel.org, linusw@kernel.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v3 05/12] crypto: atmel-i2c - move client management instance into core Date: Wed, 20 May 2026 15:56:56 +0000 Message-Id: <20260520155703.23018-6-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260520155703.23018-1-l.rubusch@gmail.com> References: <20260520155703.23018-1-l.rubusch@gmail.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" Move the global 'atmel_i2c_mgmt' tracking instance out of the ECC driver and into the atmel-i2c core library. This change consolidates the shared I2C client infrastructure into a central core driver. This centralization allows both the ECC and upcoming SHA204A driver modules to access and reference a unified, common device-management context. As part of this relocation, replace the explicit runtime initialization calls inside the module init block with static, compile-time macros (__SPIN_LOCK_UNLOCKED and LIST_HEAD_INIT). Export the tracking structure via EXPORT_SYMBOL_GPL() to make it available to dependent sub-modules. No functional change intended. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 4 ---- drivers/crypto/atmel-i2c.c | 6 ++++++ drivers/crypto/atmel-i2c.h | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index b06d47babd2e..cf6abc94d6c9 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -26,8 +26,6 @@ static DEFINE_MUTEX(atmel_ecc_kpp_lock); static int atmel_ecc_kpp_refcnt; =20 -static struct atmel_i2c_client_mgmt atmel_i2c_mgmt; - /** * struct atmel_ecdh_ctx - transformation context * @client : pointer to i2c client device @@ -408,8 +406,6 @@ static struct i2c_driver atmel_ecc_driver =3D { =20 static int __init atmel_ecc_init(void) { - spin_lock_init(&atmel_i2c_mgmt.i2c_list_lock); - INIT_LIST_HEAD(&atmel_i2c_mgmt.i2c_client_list); return i2c_add_driver(&atmel_ecc_driver); } =20 diff --git a/drivers/crypto/atmel-i2c.c b/drivers/crypto/atmel-i2c.c index 0e275dbdc8c5..db24f65ae90e 100644 --- a/drivers/crypto/atmel-i2c.c +++ b/drivers/crypto/atmel-i2c.c @@ -21,6 +21,12 @@ #include #include "atmel-i2c.h" =20 +struct atmel_i2c_client_mgmt atmel_i2c_mgmt =3D { + .i2c_list_lock =3D __SPIN_LOCK_UNLOCKED(atmel_i2c_mgmt.i2c_list_lock), + .i2c_client_list =3D LIST_HEAD_INIT(atmel_i2c_mgmt.i2c_client_list), +}; +EXPORT_SYMBOL_GPL(atmel_i2c_mgmt); + static const struct { u8 value; const char *error_text; diff --git a/drivers/crypto/atmel-i2c.h b/drivers/crypto/atmel-i2c.h index 30ed816814af..d54bd836e0f5 100644 --- a/drivers/crypto/atmel-i2c.h +++ b/drivers/crypto/atmel-i2c.h @@ -119,6 +119,7 @@ struct atmel_i2c_client_mgmt { struct list_head i2c_client_list; spinlock_t i2c_list_lock; } ____cacheline_aligned; +extern struct atmel_i2c_client_mgmt atmel_i2c_mgmt; =20 /** * atmel_i2c_client_priv - i2c_client private data --=20 2.39.5 From nobody Sun May 24 22:35:48 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 2CC9935DA78 for ; Wed, 20 May 2026 15:57:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292646; cv=none; b=TTtUJM9PN3Z33gdgV6hSdEGezv8BGPIcjH+UesQmsZmiagBmpxHUTVUUXN10giEywAe7DO8L9XhmRR+KXlf6KV3N1CKZ25kcU1/lK7S3WdMgjGK0pMFn8Sezj7GM4rX/efbRC8lv+KaKAcyjHiYFP1lPGEwf6ybzESAZn8Qt1gI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292646; c=relaxed/simple; bh=XF6myLGOHXFEV6F9jGpi6se203QT+R1jon48xdKDRd8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=GNA69NtHec9PXQrfqZ20w4ITpOySiLbb5/ceALmdtG+btbAwSVoabFMEXqPR6RIcGhYvGZOzxSF53e4XCgqW4n/eMqZJr4T/jh1/nd/TTBd2Dycagwmbfhw2FxoqJKv4cZLaQFj5dbIkIfYFaB3i29uCShkiRrYoakluw2FN2Ew= 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=WSL9VekL; arc=none smtp.client-ip=209.85.128.50 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="WSL9VekL" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-48d10c981e4so6607815e9.0 for ; Wed, 20 May 2026 08:57:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779292640; x=1779897440; 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=pMbnbZ8Nz1p+R9q/BNLPx2BmIZnFVuHesrx4qEEwkQQ=; b=WSL9VekL1I0eRe8QjSTW1ixk79lmHJyXWHDmMxxHJAbtrWonO1WQ+dXr3/mlGswhKd 3hA+wwv0HHCXMFjMYBZBwZcIsqMk/8ooPYx9R7roRjLulhwGXhfEqtV5O/uOrGY8KuTL 8uHiYwRvz+EGGn1W2RRJ0bUfMbmwMNC/irHJWRAqLw3S1fzZ/PYrwSOzA0QWK7TRicZ8 Lyq7gt/YqBRRWP4nKKLbdtF7THU/rr/Ik4rtySffJcQb6wjfLNZIZJlGcehvI9eRXWGO rndmuZ3myhM9inPLZxYCEa2fVVbyjr/QSQ9O0hGPdP9Foj8tkp39ND/zyYsY917F/Fy8 7aOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779292640; x=1779897440; 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=pMbnbZ8Nz1p+R9q/BNLPx2BmIZnFVuHesrx4qEEwkQQ=; b=KD1EWAv3C9YpJF/qpm4d9KaUlCdawVFqi2trw2nUFIf3uHNrODOpbt2SOGeAXxz8PN z8XWRSY/J2RDPvtP3UXgzuI1igoPK/GCo6DMc9exZm9rzg+6UtnnojcogMb/C56Jokxv bDHzpNIn7ZHsbbzkMDeAfeV7Hucs/nJHbudptdVwD+8Rnh+aQOzQBhowKwGfUkAki8dU +HLUtABMxPZDFC229L+xD8srUytUEHhsi9qbChM1FAtXK3l8kuTM1BhFBun0dIn8xeFi 75Nw8BjFZX7nZav9nY417OCpOzv5NuSebLYJT6a/MLoQhOANVjcZwMtc0BFHRbIL0je3 BozA== X-Forwarded-Encrypted: i=1; AFNElJ8IUrv3t2q7MY2TI+RyuNDgPMWH6IuiQVS0jINHrMgLSLPRMK0WeSL5yuMaqfOptrisSx/OYMRq3Ksas10=@vger.kernel.org X-Gm-Message-State: AOJu0YxTBnn6uhPbNqcwAIx2JomerqEl2D5qDpeWer/0w7iVOjgt7prZ xsk9tRVKajFhcjmz9ANk9N/waC3bjWeCo7cps3Z1GddkxHL/DlYDM+R5 X-Gm-Gg: Acq92OH9PuONq129BtcZLLppGj0+D78IZLbGcU/NILIM148X0qj4kfi8SY31LWgplFc KontXbW9EgzV41UbS7Muiyg28aWdS0/zkoJKVLWxCrUbHSNcok1c0oyXoX+qEBwFFu07nm0oBTT e4/BuhFUi3RKF8ctI0/4RhgTbHrGAlUGQ+ssw9OWRTO+9lDzFegt2kzUI4WyJ9HWXu526ZzqgeJ wjpKPMMwLuZSn1bIKGYk2xesVPB49K82XRRfN06KnEYWL29Sye4c4fsO60nFvdmBFjTrJAOa8kp olnSTDvV8yhKfoQaFCXs3w8p1MjyZi9/BkeVNz0a8Kem6Mxu6xwwY5HXSAn/5hXhw212bFRj0mG uvPOgoGSU7r0pT4/CbIDp8JD0QenLIb8igXq0rJzIAeVZsmu6H1h4pnB+V3bQ009q7nMqyqmsiy h+1BB1lrcPHMyry+yfS0kF0fpMfI7UdwhfKqTGaSvZbeheVoRCPJoBoDse4LlvSxtqENhvT/xdr w== X-Received: by 2002:a05:600c:4513:b0:48a:5501:799a with SMTP id 5b1f17b1804b1-48fe664c27cmr188890905e9.5.1779292639549; Wed, 20 May 2026 08:57:19 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe79ce3sm137216715e9.31.2026.05.20.08.57.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 08:57:19 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev, tudor.ambarus@linaro.org, ardb@kernel.org, linusw@kernel.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v3 06/12] crypto: atmel-i2c - introduce shared teardown helpers and fix queue flush Date: Wed, 20 May 2026 15:56:57 +0000 Message-Id: <20260520155703.23018-7-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260520155703.23018-1-l.rubusch@gmail.com> References: <20260520155703.23018-1-l.rubusch@gmail.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" Introduce atmel_i2c_deactivate_client() and atmel_i2c_unregister_client() helpers in the atmel-i2c core library to modularize client teardown. This encapsulates common client state tracking and list manipulation operations. Convert the ECC driver's error recovery and device removal paths to utilize these new helpers, ensuring consistent execution ordering when modifying device-readiness states and deleting linked-list nodes. Additionally, migrate the atmel_i2c_flush_queue() call out of the module exit path. It now runs inside the core unregistration helper. Export both new tracking symbols via EXPORT_SYMBOL_GPL() to match the existing core driver licensing standard. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 16 ++++------------ drivers/crypto/atmel-i2c.c | 20 ++++++++++++++++++++ drivers/crypto/atmel-i2c.h | 3 +++ 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index cf6abc94d6c9..433f40224be2 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -337,11 +337,8 @@ static int atmel_ecc_probe(struct i2c_client *client) if (atmel_ecc_kpp_refcnt =3D=3D 0) { ret =3D crypto_register_kpp(&atmel_ecdh_nist_p256); if (ret) { - spin_lock(&atmel_i2c_mgmt.i2c_list_lock); - list_del(&i2c_priv->i2c_client_list_node); - i2c_priv->ready =3D false; - spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); - + atmel_i2c_deactivate_client(i2c_priv); + atmel_i2c_unregister_client(i2c_priv); dev_err(&client->dev, "%s alg registration failed\n", atmel_ecdh_nist_p256.base.cra_driver_name); =20 @@ -360,9 +357,7 @@ static void atmel_ecc_remove(struct i2c_client *client) { struct atmel_i2c_client_priv *i2c_priv =3D i2c_get_clientdata(client); =20 - spin_lock(&atmel_i2c_mgmt.i2c_list_lock); - i2c_priv->ready =3D false; - spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + atmel_i2c_deactivate_client(i2c_priv); =20 /* * Note, the Linux Crypto Core automatically blocks until all active @@ -375,9 +370,7 @@ static void atmel_ecc_remove(struct i2c_client *client) crypto_unregister_kpp(&atmel_ecdh_nist_p256); mutex_unlock(&atmel_ecc_kpp_lock); =20 - spin_lock(&atmel_i2c_mgmt.i2c_list_lock); - list_del(&i2c_priv->i2c_client_list_node); - spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + atmel_i2c_unregister_client(i2c_priv); } =20 static const struct of_device_id atmel_ecc_dt_ids[] =3D { @@ -411,7 +404,6 @@ static int __init atmel_ecc_init(void) =20 static void __exit atmel_ecc_exit(void) { - atmel_i2c_flush_queue(); i2c_del_driver(&atmel_ecc_driver); } =20 diff --git a/drivers/crypto/atmel-i2c.c b/drivers/crypto/atmel-i2c.c index db24f65ae90e..cf3c57745414 100644 --- a/drivers/crypto/atmel-i2c.c +++ b/drivers/crypto/atmel-i2c.c @@ -354,6 +354,26 @@ static int device_sanity_check(struct i2c_client *clie= nt) return ret; } =20 +void atmel_i2c_deactivate_client(struct atmel_i2c_client_priv *i2c_priv) +{ + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + i2c_priv->ready =3D false; + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); +} +EXPORT_SYMBOL_GPL(atmel_i2c_deactivate_client); + +void atmel_i2c_unregister_client(struct atmel_i2c_client_priv *i2c_priv) +{ + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + if (!list_empty(&i2c_priv->i2c_client_list_node)) + list_del_init(&i2c_priv->i2c_client_list_node); + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + + /* don't sleep inside spin locks */ + atmel_i2c_flush_queue(); +} +EXPORT_SYMBOL_GPL(atmel_i2c_unregister_client); + int atmel_i2c_probe(struct i2c_client *client) { struct atmel_i2c_client_priv *i2c_priv; diff --git a/drivers/crypto/atmel-i2c.h b/drivers/crypto/atmel-i2c.h index d54bd836e0f5..351306c426aa 100644 --- a/drivers/crypto/atmel-i2c.h +++ b/drivers/crypto/atmel-i2c.h @@ -192,4 +192,7 @@ void atmel_i2c_init_genkey_cmd(struct atmel_i2c_cmd *cm= d, u16 keyid); int atmel_i2c_init_ecdh_cmd(struct atmel_i2c_cmd *cmd, struct scatterlist *pubkey); =20 +void atmel_i2c_deactivate_client(struct atmel_i2c_client_priv *i2c_priv); +void atmel_i2c_unregister_client(struct atmel_i2c_client_priv *i2c_priv); + #endif /* __ATMEL_I2C_H__ */ --=20 2.39.5 From nobody Sun May 24 22:35:48 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 527C1369D4C for ; Wed, 20 May 2026 15:57:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292647; cv=none; b=FBuLQxJlQhIRYG6W8orbC+l2abPsekcmeS5cLqHgqBb2+bE2fd35Ad+5050aUYNdMOhKoO9xjFXkNvmIg/pBbPaXkqg4IMzhH5b3M3NDG8GX4fSNULBdBwd/sSdXcFnh+cM3VZTRgXr91WhHLA67XjSO/Qgb2THF1v3k6KxIGCA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292647; c=relaxed/simple; bh=iphzX9m1CPwM3v3yxFp5IFORgP6SOja+j8AN24Me+JQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=jYuGxM2wxrdq5ufO1y6wPFBWpangNcE4bomhltECC2gUZRfr1fha+66C8uMrQoUpsHGJnHhUUDphCow9JP4335EcBkg5zNmaafJiQKJtGv8I932I+X+Jcpp/ruT6nrR9gl/9UWprLXoPrmNA7HjjsWiW+6jMg2BbnG5Yiu+rQxs= 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=khGwLebo; arc=none smtp.client-ip=209.85.128.50 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="khGwLebo" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-48910865133so2904195e9.2 for ; Wed, 20 May 2026 08:57:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779292641; x=1779897441; 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=HmGPE3DNDSXOjHya8g4AmQk3m15oPbfzDvM3u2NfIRo=; b=khGwLeboWBj8aMPSunCUYEKd3oMWERFrchme2GJ7VxxnM6UwFWQD7NZqp0H6vvUgIf IqXgaevq4xEkcUgMvA+lrxGA+qezXCQ73lczVLcBMG5myPifjWvbBvxBvVxgtJ32UgzH tVhyUAUr9C8PkwRjULmehHMHSml8+ndYc2OXkTew9kqT2NBsD6o0WxkjnAmRUuUTO5Ht FpSbFdM/JETSbGxF3JHrgZA7tkFExtUxUErsdAi8307qtfC8G2CHI7FAFpuZlkIeJltM uEH+gBX3w/EJQlfglO/CGbWFkcyxppKaatWt26/7uJK1SecwWhF9lvVfgsQDyO6ntV74 Ygmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779292641; x=1779897441; 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=HmGPE3DNDSXOjHya8g4AmQk3m15oPbfzDvM3u2NfIRo=; b=KLUOB+C+tYDXRkQoNgB4abajl3aEUnzunRC33laVRhM8Prd9jj1Od0K70Gl2ONj340 F6iKIHjT2RlHPzN0voias8wfElu4shMKIB3/6N1Kjqnk7zj8gjN0RqTlNjjmjv6KCBzt 63IL8ThzdGNjCl3FwkN6SMNOTKljG23q6GnjuCsXBkHOZ6yv8l9xsHiLUYp0AnGOzVgJ PG5lKjBgj8oX8x8N7oq7hHBYKXRWHGlPYdATVEev3Cmgm9R3ZQTWajYP3cuNXaHtGB1W I2bsXYhXGNQrRqRnyJYpzWC5Z4aky8PKRsS3xFonpNAv2WsCcLxHmwTLAREdY6kZxAKN aHJA== X-Forwarded-Encrypted: i=1; AFNElJ/SnenUo8/WKYQWWBKm+nio4nOG8RTyVjG5OSS17Io1eIvf4Fs0Aw+hM8wTZdDOAykToBArJQe9PPViBG4=@vger.kernel.org X-Gm-Message-State: AOJu0YwISSPEdYcFOVNm6/mwc2k0uKpWGkaLuffkQPPUnvqcw25urb5N i6/qzkxLGs9gZ/ZSAGgw/mfcM4jc4qcMAHMUULwQ1gvT5qx2gzV0Nazc X-Gm-Gg: Acq92OE5KQZ+JCNK43cz4QwEt5oNCKwkQ4mb/vF7KprRwlypjY9hdsf/1+XjUnKCeBv x4oVFG5Pyg8siYnJ13fiWpJLwvq1tVF6gLmAD9BVoFLUJSkF/3Le/VQ7/4rSXT7AJB57S+hn4L0 CQQ0BZPP0wcctM1q08vhsUIKQ2/KHHvbx1+suLRZ+eoK54jedoFwWTsywl9d6igzD109ueAFRDY 7Bc3oGSZOxNTGL/n6Hc03vG11eXVvRzziTIcU11IQoMf0N6n3kWyOGo4xWQWaPGaY2b7szlUrnq FjbLMXFlI5zM6oxjZ/5fHZusXcM5cWd3MuDngeuSKGjC5UKfKF+/4saXJErTct48fayj0l9ySVd vIHsVbMxWcEOvAc9UTYwIku8KBrfkO02cHpZvCd5dKhUiPvMoRNqmAr8G6aPSUDXyyGXMrqe1a2 z/T/rYOrvuwFLNmLlQP2rpJcSVOvUjhR6LViCEORML3ayJCbV1WFKDmKDlkuQlSuQ= X-Received: by 2002:a05:600c:198d:b0:489:6c28:dbb4 with SMTP id 5b1f17b1804b1-48fe62f7cbbmr206383235e9.5.1779292640788; Wed, 20 May 2026 08:57:20 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe79ce3sm137216715e9.31.2026.05.20.08.57.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 08:57:20 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev, tudor.ambarus@linaro.org, ardb@kernel.org, linusw@kernel.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v3 07/12] crypto: atmel-ecc - switch to module_i2c_driver Date: Wed, 20 May 2026 15:56:58 +0000 Message-Id: <20260520155703.23018-8-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260520155703.23018-1-l.rubusch@gmail.com> References: <20260520155703.23018-1-l.rubusch@gmail.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" Remove custom boilerplate module configuration code and convert the module init/exit paths to use the modern module_i2c_driver() helper macro. This shortens and simplifies driver initialization. Custom structure setup is no longer required here since management tracking context initialization was already safely moved into the atmel-i2c core library module. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index 433f40224be2..f166144febfe 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -397,18 +397,7 @@ static struct i2c_driver atmel_ecc_driver =3D { .id_table =3D atmel_ecc_id, }; =20 -static int __init atmel_ecc_init(void) -{ - return i2c_add_driver(&atmel_ecc_driver); -} - -static void __exit atmel_ecc_exit(void) -{ - i2c_del_driver(&atmel_ecc_driver); -} - -module_init(atmel_ecc_init); -module_exit(atmel_ecc_exit); +module_i2c_driver(atmel_ecc_driver); =20 MODULE_AUTHOR("Tudor Ambarus"); MODULE_DESCRIPTION("Microchip / Atmel ECC (I2C) driver"); --=20 2.39.5 From nobody Sun May 24 22:35:48 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 EEB103630B3 for ; Wed, 20 May 2026 15:57:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292649; cv=none; b=p9KpVlgXmNEEM4DNfzrCMyoBB5Mw4lhC+CVwm2/CxPCllzyRssG6Hfgaq3vDZ6wk/QC5j58n7AN0FxKfVApadTEjOQxVU/Qw+n8SVedw6x5p3Bxbd3MbHE0E1zL93ssMbe6tZHDzzs5UfY3CfuBih6m0ApyaLz4Nv6BoFEmEH5M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292649; c=relaxed/simple; bh=SdZXb4YlAIgGQSiYVfEZ5WJEVes53hxYTkfaG3b/d3Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=dII2pgI6rNX7MIh3YWBrUPctJ4QyHD4a0sqDe23/gFoDNbNO2Bww3ZVe9doI9ZvzEAEknOGmFfnvJufwXXA6fgmEfVCSLqK5wGicLxn3VGU4Wq3pnaHyOCi9n+w/22f+F2eeJrYvVfsowt+0s/BZupZ+0CIE3Dg8ZB1FJkixRJU= 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=HapiIFCv; arc=none smtp.client-ip=209.85.128.48 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="HapiIFCv" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-4889d0a9df0so4154445e9.3 for ; Wed, 20 May 2026 08:57:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779292643; x=1779897443; 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=Ix3QOsJRJfrw5u43r2mA+N3E2gg1vLyQm9dlzJ2uvsQ=; b=HapiIFCvoauHywOC8FjTjGFmO5N9w/QGCYOkvupah06nqqnsTZvjqJ7rNgtd5sLj2t EHaTM3ei/qPjkaRydVFESalcqYtoVzdSzpX9etlrWz1o4leJ2IzFcgqw6fxLknPS6ho8 Hn/n8hGopjDjoEOTJEuHxNWjezEzmXj2JdsQZmkGTVIi4q/aFNlMlQ+gPFXX9F2o8/YZ WDCvNl3t4LNuUgKs5rxT9M16gJ7JglhO1DWC9XEMqZZS/b1Nt/tyWI2CQNHRpZJZnhWT g8T/os7SdkNDZ8SfDmUA9WJtEWbb4EuKDRcoc96yWtBIir2VVagwSMrQ1UTLa/sUJkM5 CVnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779292643; x=1779897443; 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=Ix3QOsJRJfrw5u43r2mA+N3E2gg1vLyQm9dlzJ2uvsQ=; b=lb4ZqccxqsxEh4eUy3vttG8KC4N+e9zInLdG/tTg+1gBa+Ey5Y7CQFLjHSR9DQAU9c PwB2WxyYVry81mU3OPNIGMQxYIUaP89bdG0DHCJYQTQgHh9Z7vIilGjP6ITx4v+79pUK buiR8eMVEvRD/Q+YYPMlAZT1e1QQdwDOeqRFUGodNACIp4jy30fNERQym4P7W7jwloZn C2aviUz6Rx9GtsNYQTZ3sqMSEGpXoQSeTjKPcG/nTRo5THhh1nLhWo/Cs7I4TCHNT7gR h5pCZqMev5MUXt6xOKYtbdltgEQHLQYz81siGOByPvjHJjvAZMn50gBY77WH6DOCyQ+e HhmA== X-Forwarded-Encrypted: i=1; AFNElJ9ouZZLQIM9dfs3j/g/joNrF+Nzlp/7pyUmkfEJriSxhZFXyKy2oFWOSUZYMN/LOEyQYlbA7xQEMwq2rPg=@vger.kernel.org X-Gm-Message-State: AOJu0YxkepvygDOfqmyHOylqbPvT/+9A1x7TEiQa2Gc0fz0Ecwrm+lkF Sa4Ei9hQHkXqZjRD32b+8tGSWbzhLKRdEXUu1VkeYBPslJw0A507BQ0s X-Gm-Gg: Acq92OFqJw3m04h9c4BS/arO8LIbGWDjKIbMsh0ow/6av+mjlpvIjP6bT+jIAQGxTQf b0sqkXqelxBDZkkc0t9haBhVSzC3+2aWCuTKdu1+3CZo151lKO7dR9db3/NEZu0v3yE8aBdddqU XGNJCxGfKd3BaovpKxRvF5are7EG6RL0cQO56LNrL3uNsCAdRGgO/NmIG90vYWtO5jMqOSpoh7y x9Kajsc+sW4zKx8aDPS1GSXIr56OToYnfBROz+WVsDuLe3R32Mg5fvHbcP/1lpv0HXhYEmFqO/X Qwlm9F84IcKOIabmPfw+mfiEhFf7/XDk2wAtl163s9kNEinnJnfDRExSk7BmC0m0Ci1EuaeNPEl K2yk6S8hrLy7Y+Hcc966Q+CaA9vxfMs4K44Chl9WTtlkF3GnCcBLXKe+Cp4uQWkZRVLTaVB6nrs 40fY1unnTQdm9s2pSiaSdoBfS5dl1wXsxEiMPnsiSOwFf1Jvo3vLxfGoxravlELhE= X-Received: by 2002:a05:600c:3b07:b0:48e:6db5:76e6 with SMTP id 5b1f17b1804b1-48fe63099c6mr198267165e9.2.1779292642678; Wed, 20 May 2026 08:57:22 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe79ce3sm137216715e9.31.2026.05.20.08.57.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 08:57:22 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev, tudor.ambarus@linaro.org, ardb@kernel.org, linusw@kernel.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v3 08/12] crypto: atmel-i2c - move shared client allocation logic to core Date: Wed, 20 May 2026 15:56:59 +0000 Message-Id: <20260520155703.23018-9-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260520155703.23018-1-l.rubusch@gmail.com> References: <20260520155703.23018-1-l.rubusch@gmail.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" Migrate the I2C client allocation and runtime load-balancing routines out of the ECC driver code and into the central atmel-i2c core library module. Export the symmetric lifecycle helper interfaces atmel_i2c_client_alloc() and atmel_i2c_client_free() using EXPORT_SYMBOL_GPL() to expose a unified client management API. This consolidation enables the dynamic selection subsystem (which chooses the least-loaded client device based on the active transformation count) to be shared by both the ECC driver and upcoming Atmel crypto modules. Refactor the ECC driver's transformation context initialization (init_tfm) and teardown (exit_tfm) paths to use this centralized core API. No functional change is intended. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 50 +++----------------------------------- drivers/crypto/atmel-i2c.c | 46 +++++++++++++++++++++++++++++++++++ drivers/crypto/atmel-i2c.h | 3 +++ 3 files changed, 52 insertions(+), 47 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index f166144febfe..19e9ee9c15e5 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -203,50 +203,6 @@ static int atmel_ecdh_compute_shared_secret(struct kpp= _request *req) return ret; } =20 -static struct i2c_client *atmel_ecc_i2c_client_alloc(void) -{ - struct atmel_i2c_client_priv *i2c_priv, *min_i2c_priv =3D NULL; - struct i2c_client *client =3D ERR_PTR(-ENODEV); - int min_tfm_cnt =3D INT_MAX; - int tfm_cnt; - - spin_lock(&atmel_i2c_mgmt.i2c_list_lock); - - if (list_empty(&atmel_i2c_mgmt.i2c_client_list)) { - spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); - return ERR_PTR(-ENODEV); - } - - list_for_each_entry(i2c_priv, &atmel_i2c_mgmt.i2c_client_list, - i2c_client_list_node) { - if (!i2c_priv->ready) - continue; - tfm_cnt =3D atomic_read(&i2c_priv->tfm_count); - if (tfm_cnt < min_tfm_cnt) { - min_tfm_cnt =3D tfm_cnt; - min_i2c_priv =3D i2c_priv; - } - if (!min_tfm_cnt) - break; - } - - if (min_i2c_priv) { - atomic_inc(&min_i2c_priv->tfm_count); - client =3D min_i2c_priv->client; - } - - spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); - - return client; -} - -static void atmel_ecc_i2c_client_free(struct i2c_client *client) -{ - struct atmel_i2c_client_priv *i2c_priv =3D i2c_get_clientdata(client); - - atomic_dec(&i2c_priv->tfm_count); -} - static int atmel_ecdh_init_tfm(struct crypto_kpp *tfm) { const char *alg =3D kpp_alg_name(tfm); @@ -254,7 +210,7 @@ static int atmel_ecdh_init_tfm(struct crypto_kpp *tfm) struct atmel_ecdh_ctx *ctx =3D kpp_tfm_ctx(tfm); =20 ctx->curve_id =3D ECC_CURVE_NIST_P256; - ctx->client =3D atmel_ecc_i2c_client_alloc(); + ctx->client =3D atmel_i2c_client_alloc(); if (IS_ERR(ctx->client)) { pr_err("tfm - i2c_client binding failed\n"); return PTR_ERR(ctx->client); @@ -264,7 +220,7 @@ static int atmel_ecdh_init_tfm(struct crypto_kpp *tfm) if (IS_ERR(fallback)) { dev_err(&ctx->client->dev, "Failed to allocate transformation for '%s': = %ld\n", alg, PTR_ERR(fallback)); - atmel_ecc_i2c_client_free(ctx->client); + atmel_i2c_client_free(ctx->client); return PTR_ERR(fallback); } =20 @@ -280,7 +236,7 @@ static void atmel_ecdh_exit_tfm(struct crypto_kpp *tfm) =20 kfree(ctx->public_key); crypto_free_kpp(ctx->fallback); - atmel_ecc_i2c_client_free(ctx->client); + atmel_i2c_client_free(ctx->client); } =20 static unsigned int atmel_ecdh_max_size(struct crypto_kpp *tfm) diff --git a/drivers/crypto/atmel-i2c.c b/drivers/crypto/atmel-i2c.c index cf3c57745414..e10713a7bcfe 100644 --- a/drivers/crypto/atmel-i2c.c +++ b/drivers/crypto/atmel-i2c.c @@ -57,6 +57,52 @@ static void atmel_i2c_checksum(struct atmel_i2c_cmd *cmd) *__crc16 =3D cpu_to_le16(bitrev16(crc16(0, data, len))); } =20 +struct i2c_client *atmel_i2c_client_alloc(void) +{ + struct atmel_i2c_client_priv *i2c_priv, *min_i2c_priv =3D NULL; + struct i2c_client *client =3D ERR_PTR(-ENODEV); + int min_tfm_cnt =3D INT_MAX; + int tfm_cnt; + + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + + if (list_empty(&atmel_i2c_mgmt.i2c_client_list)) { + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + return ERR_PTR(-ENODEV); + } + + list_for_each_entry(i2c_priv, &atmel_i2c_mgmt.i2c_client_list, + i2c_client_list_node) { + if (!i2c_priv->ready) + continue; + tfm_cnt =3D atomic_read(&i2c_priv->tfm_count); + if (tfm_cnt < min_tfm_cnt) { + min_tfm_cnt =3D tfm_cnt; + min_i2c_priv =3D i2c_priv; + } + if (!min_tfm_cnt) + break; + } + + if (min_i2c_priv) { + atomic_inc(&min_i2c_priv->tfm_count); + client =3D min_i2c_priv->client; + } + + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + + return client; +} +EXPORT_SYMBOL_GPL(atmel_i2c_client_alloc); + +void atmel_i2c_client_free(struct i2c_client *client) +{ + struct atmel_i2c_client_priv *i2c_priv =3D i2c_get_clientdata(client); + + atomic_dec(&i2c_priv->tfm_count); +} +EXPORT_SYMBOL_GPL(atmel_i2c_client_free); + void atmel_i2c_init_read_config_cmd(struct atmel_i2c_cmd *cmd) { cmd->word_addr =3D COMMAND; diff --git a/drivers/crypto/atmel-i2c.h b/drivers/crypto/atmel-i2c.h index 351306c426aa..6c2d86fd9068 100644 --- a/drivers/crypto/atmel-i2c.h +++ b/drivers/crypto/atmel-i2c.h @@ -192,6 +192,9 @@ void atmel_i2c_init_genkey_cmd(struct atmel_i2c_cmd *cm= d, u16 keyid); int atmel_i2c_init_ecdh_cmd(struct atmel_i2c_cmd *cmd, struct scatterlist *pubkey); =20 +struct i2c_client *atmel_i2c_client_alloc(void); +void atmel_i2c_client_free(struct i2c_client *client); + void atmel_i2c_deactivate_client(struct atmel_i2c_client_priv *i2c_priv); void atmel_i2c_unregister_client(struct atmel_i2c_client_priv *i2c_priv); =20 --=20 2.39.5 From nobody Sun May 24 22:35:48 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 633C936403C for ; Wed, 20 May 2026 15:57:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292650; cv=none; b=azXMWG/rqFwHm4pKBP3oDpSsTPOaeDi8R0As1PN5EalIkiqqX3rQcZ8hQlV7QzBpBapz6DQoeGHwDcx1WHIhAGm2LU3XOW5fXqgCcgGonebtbSWwT5ccjE7o8U+lnufaDbMKYX52mfvRxbxdgsnKBZO0bF/FJOis3UKIpFLfoVI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292650; c=relaxed/simple; bh=1ScPq7p1jf0H6LDU94x90s34pusxvX/k/zYe2nKVLmA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Ut4FBJm8yyrHhqSoVNc4/qZsFoVpss7B7Fuj6P8UW2Jozpy3T31/bxN7zG0fV5BLC8eBXPfSD+mJpwrJWrWhMn+J3rkheKnR2henfUJQn9LTjtK4A5TAy1WN1ftb1T/WhtvVx0atGkgU2mz3yE5Xf4C6Ylq/evtouybOhCd/42g= 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=Z1vrsWKc; arc=none smtp.client-ip=209.85.128.53 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="Z1vrsWKc" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-48fde2f2d61so8460625e9.3 for ; Wed, 20 May 2026 08:57:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779292644; x=1779897444; 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=gNOINsowG7WTZn4Wfd0Y0oRU0rQmWn1GPDfPM6W1f5A=; b=Z1vrsWKcgXoIOxipEZFJk4rzojZVlQmgKYJgCkBBqvGt3gIsWUMSFHACHOdK0JEDbq z66jcOmAsSE/iLfI3HZxM8Ogoq88epfxNs9DwDOmJ/O2NzM+UYdFtiPmkuGHDtJbW2df +nUobsmLFYOS/QmZI497wexqXqBsRMmjjevOvBtwfbpsBOXbdrH8cHUqS6FRfNVw+Q+0 CqcgL9tPAHVoQot5rSZrjjvqPdFQxoTPAfRg2ROfr3Lb62e4AGwE6tOc9R+L+FEUyu1Z 5r63eqvCwedF5Up2i5zwIvuAsBIlnsHqfC9EvxzILNd7sss3wP+7Tbtd2/TWIFITJPKj MA+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779292644; x=1779897444; 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=gNOINsowG7WTZn4Wfd0Y0oRU0rQmWn1GPDfPM6W1f5A=; b=o9xm3P45N6k9DCekukI5795Bf1wzJl4ptiHFXdPAR9HqGp4I6/Lv9ldi1sWQ5Qhrvn L9IWDaJTBbgdoksXtpgRF13Yrtzwxtq8YUT1M+ysQ0ElwYcHpFDgQXsSjPXZ/z79vp3f /e93BWs0s6+JcBfrs+EP89bpb2R4T0twwQzncEbd2AgbEtEVGdVcY5PD78kx9Tgs/c9m iua1jYICTBP81N0PQYSt84XFZAu+/TkPcLWHX+Zuxb/zsoJBB0Q/HBbur2wtO5w3E16+ Y4DinUUDIAdH6vVFELYo2p7TQZcjW9eq0TfvJAvxatiqMTHX8IH0u4ZPUT5Xn4zhAdYX JAHg== X-Forwarded-Encrypted: i=1; AFNElJ9MO842hACMZPH3DrSzqm9YbttqfmbExqvctYP4DGR48EDy+H2DgLU0B2R2E4t6SsO3mDEfyBSLSJUXLYM=@vger.kernel.org X-Gm-Message-State: AOJu0YxQTUaxQngi3nZZzu8C1jMizF4KCV9CJmLp2dvky6LrY7fZiSVd 4OsenZKb7B5RTns3+43DRks2IE6HrSPCc0NkJvuBjxz9BgkFv5HlaCCd X-Gm-Gg: Acq92OGuHcVSqaF616DfZSxR741JMMPsekPZJTOqniyA9YwzUWGftdYOdXyiph2aPIs dYK/ceElYsohAtkB8pAfCOaHoRtIMEQLU/Hl6e7FY0mloQXrzrAECchqgvuqm+8z7aWou9k/DGy a1I4hvcP462P9GSzVC28KM9ZCmPYx2S61MYfOX0BIFk+yBQGwEe7ZK/OoyXySosGdtlu8fmF8ZP zx8DxgsWlUvYQexQ66cEmgc/stkT7zkAJ7jyZKgSGe0pPF6V93rHHnc9cNs0Fcl1FWCLnuhGA3/ rWi9Gax09SxLi/kLOAoVeY1w77jRqOhrp60K6P2qMJekoAkMUPrq+0rM89+pFl2I4L3isuZVAmz jYm+KXuOQFNk6GjZQ2muRRNRbaTkBOwgKx1+8Sz3OdCb1p009KvG/AR7N3bySKJk7rrJSklN0Gc bi7Lz6VRuuP/6aHWUfPJ1s+sLplVA+Nc1v6YHE1LlVZW5JqLu6rl8UL/9E/XUnngzJwLzcHSfD1 Q== X-Received: by 2002:a05:600c:4587:b0:48f:d410:605e with SMTP id 5b1f17b1804b1-48fe632143fmr188644315e9.7.1779292643905; Wed, 20 May 2026 08:57:23 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe79ce3sm137216715e9.31.2026.05.20.08.57.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 08:57:23 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev, tudor.ambarus@linaro.org, ardb@kernel.org, linusw@kernel.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v3 09/12] crypto: atmel-i2c - implement capability-based client selection Date: Wed, 20 May 2026 15:57:00 +0000 Message-Id: <20260520155703.23018-10-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260520155703.23018-1-l.rubusch@gmail.com> References: <20260520155703.23018-1-l.rubusch@gmail.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" Extend the shared I2C client allocation interface to support feature-aware hardware selection by introducing capability filtering. Add a 'caps' mask to 'struct atmel_i2c_client_priv' alongside an 'atmel_i2c_capability' enum. The allocator now explicitly filters hardware nodes by a requested capability bit while retaining the least-loaded device load-balancing scheme. Update the ECC driver to advertise ATMEL_CAP_ECDH configuration capability during probe, and adapt the tfm context setup execution path to request this specific capability variant. Initialize the bitmask field to zero inside the SHA204A driver context for now. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 4 +++- drivers/crypto/atmel-i2c.c | 6 +++++- drivers/crypto/atmel-i2c.h | 8 +++++++- drivers/crypto/atmel-sha204a.c | 2 ++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index 19e9ee9c15e5..ec8535b1d4f8 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -210,7 +210,7 @@ static int atmel_ecdh_init_tfm(struct crypto_kpp *tfm) struct atmel_ecdh_ctx *ctx =3D kpp_tfm_ctx(tfm); =20 ctx->curve_id =3D ECC_CURVE_NIST_P256; - ctx->client =3D atmel_i2c_client_alloc(); + ctx->client =3D atmel_i2c_client_alloc(ATMEL_CAP_ECDH); if (IS_ERR(ctx->client)) { pr_err("tfm - i2c_client binding failed\n"); return PTR_ERR(ctx->client); @@ -283,6 +283,8 @@ static int atmel_ecc_probe(struct i2c_client *client) i2c_priv =3D i2c_get_clientdata(client); i2c_priv->ready =3D false; =20 + i2c_priv->caps =3D BIT(ATMEL_CAP_ECDH); + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); list_add_tail(&i2c_priv->i2c_client_list_node, &atmel_i2c_mgmt.i2c_client_list); diff --git a/drivers/crypto/atmel-i2c.c b/drivers/crypto/atmel-i2c.c index e10713a7bcfe..7ef62b40c353 100644 --- a/drivers/crypto/atmel-i2c.c +++ b/drivers/crypto/atmel-i2c.c @@ -57,7 +57,7 @@ static void atmel_i2c_checksum(struct atmel_i2c_cmd *cmd) *__crc16 =3D cpu_to_le16(bitrev16(crc16(0, data, len))); } =20 -struct i2c_client *atmel_i2c_client_alloc(void) +struct i2c_client *atmel_i2c_client_alloc(enum atmel_i2c_capability cap) { struct atmel_i2c_client_priv *i2c_priv, *min_i2c_priv =3D NULL; struct i2c_client *client =3D ERR_PTR(-ENODEV); @@ -75,6 +75,10 @@ struct i2c_client *atmel_i2c_client_alloc(void) i2c_client_list_node) { if (!i2c_priv->ready) continue; + + if (!(i2c_priv->caps & BIT(cap))) + continue; + tfm_cnt =3D atomic_read(&i2c_priv->tfm_count); if (tfm_cnt < min_tfm_cnt) { min_tfm_cnt =3D tfm_cnt; diff --git a/drivers/crypto/atmel-i2c.h b/drivers/crypto/atmel-i2c.h index 6c2d86fd9068..636d21bd1348 100644 --- a/drivers/crypto/atmel-i2c.h +++ b/drivers/crypto/atmel-i2c.h @@ -115,6 +115,10 @@ struct atmel_i2c_cmd { #define ECDH_PREFIX_MODE 0x00 =20 /* Used for binding tfm objects to i2c clients. */ +enum atmel_i2c_capability { + ATMEL_CAP_ECDH =3D 0, +}; + struct atmel_i2c_client_mgmt { struct list_head i2c_client_list; spinlock_t i2c_list_lock; @@ -131,6 +135,7 @@ extern struct atmel_i2c_client_mgmt atmel_i2c_mgmt; * @tfm_count : number of active crypto transformations on i2c c= lient * @hwrng : hold the hardware generated rng * @ready : hw client is ready to use + * @caps : feature capability of the particular driver * * Reads and writes from/to the i2c client are sequential. The first byte * transmitted to the device is treated as the byte size. Any attempt to s= end @@ -148,6 +153,7 @@ struct atmel_i2c_client_priv { atomic_t tfm_count ____cacheline_aligned; struct hwrng hwrng; bool ready; + u32 caps; }; =20 /** @@ -192,7 +198,7 @@ void atmel_i2c_init_genkey_cmd(struct atmel_i2c_cmd *cm= d, u16 keyid); int atmel_i2c_init_ecdh_cmd(struct atmel_i2c_cmd *cmd, struct scatterlist *pubkey); =20 -struct i2c_client *atmel_i2c_client_alloc(void); +struct i2c_client *atmel_i2c_client_alloc(enum atmel_i2c_capability cap); void atmel_i2c_client_free(struct i2c_client *client); =20 void atmel_i2c_deactivate_client(struct atmel_i2c_client_priv *i2c_priv); diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c index 6e6ac4770416..3853d2b95449 100644 --- a/drivers/crypto/atmel-sha204a.c +++ b/drivers/crypto/atmel-sha204a.c @@ -173,6 +173,8 @@ static int atmel_sha204a_probe(struct i2c_client *clien= t) =20 i2c_priv =3D i2c_get_clientdata(client); =20 + i2c_priv->caps =3D 0; + memset(&i2c_priv->hwrng, 0, sizeof(i2c_priv->hwrng)); =20 i2c_priv->hwrng.name =3D dev_name(&client->dev); --=20 2.39.5 From nobody Sun May 24 22:35:48 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 6DC9734EF05 for ; Wed, 20 May 2026 15:57:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292652; cv=none; b=PMDK3br2MF3TM+83nTvXG5YCyaE4ltyhEDPaJhv98upPzxrPRRlv4WMKDzt8QNk2daXJ8AnWuvc9ZJeAzfzFv9DsYUFqsBQTbeNUTmseQjprB0bkRz8scL99EkzOljl7n3OT7/CGlwAD0n5BxlwzIHNx3YVM/UXsR/GvMxiqTyU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292652; c=relaxed/simple; bh=uTqRw9ZHkWp+fln1pdSGn4zT19f/st0v4wNEfxmP3yU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=a/65flk2PqTNwBYxrmWqtvVu/8T44gnkvhieGSrBLeJ8sy107YkC79wkAaHBQ+mNDPp6v2iaj0oexeW5xsOpPDNLtHnjiEN/CjAbWHFFO1GG6ZIaseyD2+f0UrUbsYBmbvYB2iKxZpFW8518e6N6jLMmzStcGrLrwCAp0pCov3o= 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=AzIVlHDS; arc=none smtp.client-ip=209.85.128.54 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="AzIVlHDS" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-4891b02a0acso2821865e9.3 for ; Wed, 20 May 2026 08:57:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779292645; x=1779897445; 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=4fqnKQyfEX10m0YEJcZYCgsQ4k4ZpuOar6eAbgyMF0M=; b=AzIVlHDS0vzfuTe2eJDe1Qcq6PXbvIBC6y8p8k8kB+AQN93wwPblp/B0IUHb5wFH5Y bf4POzUQV6DetBUsyRTZyHS0Nlpuc++0BuV6lsO5uYDIRnLjewaizfJWDHYY2DCfigti 1VENnJKkjHvtHEE2/KaTdv4PzLq0d7wIAI2A5GGuAZJw7nkPPDzf+s4pTMLB+vPv8Lvm qnyrnuJMn8qoeQQLidJsar2Vx09R+825hyn7Ig7mF/KHh+547FOsTavnFDs1lfqL5qtx eFGk5jsdyVy+KvPFY13qyMD6DW2MPMVGytGCRFoFSB2o3+9It0pND9cLvPmuUYiY+uEW 3D8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779292645; x=1779897445; 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=4fqnKQyfEX10m0YEJcZYCgsQ4k4ZpuOar6eAbgyMF0M=; b=NeIkFiYdlm6f+ruJvxRUwuF3M8HpjM8w9gzcq6BX8NsAqaT3sTphO2YptoWdq6xYbD o62xbTUIM6vkiFASEP0p79SXXcswvh5ofJF9GzElh581mblJolioSCKe2RkOv8xsWJxH k9AusEmQLRtgcw2vqrPeRAPES9TRsi1JTwp07FsvJB6Pon8JUtQTcy0PfsZD2HHtnV7K Ye/0reOqGg1AYOBpESTM4QYbc/zJS9ASZXwCbRga8syj8ZZHoPgCcje6rF7zP7qgVK8z Jpy60EVuBROPyJM6nIYn65IChj5Xcn6CKNWBfwIYXUcK9gyFv54nVRwLljCAdjZOQ0S8 a3RQ== X-Forwarded-Encrypted: i=1; AFNElJ8p8MWxCSIWejrY26u9Nxz0cA6oWvQ1iq+0hf4d8eRAiZjVSgsR6fg9Kt7iU79vhNdNkM7IXwtU/vflTLA=@vger.kernel.org X-Gm-Message-State: AOJu0YyH7njei75SRQVPC18dVvedhgbG0fvOpaICbMSPg66doW0aJI/R YAimcWkLD21XzW0PWwh8YxjwlhmSq5fFLySHXYjdfjdJCHOmm4oZsuai X-Gm-Gg: Acq92OEOWb3LwAAnfCaHTzYDol0b5afmdMoYQaGfytQNBQ6XTfpNPJnaZRNXFcen37X /5nAS0+NqvMf17rQHi7NcGozQlQ+xhPjSbhrpKb/3wAD1DFty55kQNzeiQt5U2WDv3z7+M7EANe 6nti6ydejTNO+hAd1EfLVTWrtG0omu42L3LyuLAP58+If/2Tm5hYrY5zsHT3bQOdCi70abGiObu SuAFW6Dk14NCVwDmafEl6wg50GcouXd31F41LQyM9t38hibPoL2CVOJDOzQYOlbKoW2dovWNXXG BWzLprvL0TGHUgSHi5NuJrmkpVCFDRxDuoOWxMqec3BtPBkj1kDTs7W5+O0MmUQS5jcYmBM7TVW bPdt5Ly5EcaljQyYAFEzmDl94AmobshxPHPSPBJZ/CwPRribXLCHUb6XcjCsCJWJ1tcbUKdMFDK ZmMOQrgjWTIIpNo003QHSWyoZf1Xlc0R/hHi55as7acPfIEAoXGr4LKc9VvceWvC0= X-Received: by 2002:a05:600c:470e:b0:485:f1d6:2b1d with SMTP id 5b1f17b1804b1-48fe59adb12mr166420295e9.0.1779292645281; Wed, 20 May 2026 08:57:25 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe79ce3sm137216715e9.31.2026.05.20.08.57.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 08:57:24 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev, tudor.ambarus@linaro.org, ardb@kernel.org, linusw@kernel.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v3 10/12] crypto: atmel-sha204a - integrate into core management tracking Date: Wed, 20 May 2026 15:57:01 +0000 Message-Id: <20260520155703.23018-11-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260520155703.23018-1-l.rubusch@gmail.com> References: <20260520155703.23018-1-l.rubusch@gmail.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" Register the SHA204A I2C device instance into the shared atmel_i2c client management tracking list during the probe phase. This allows the driver to participate in the central hardware selection infrastructure. Rework the error-unwind paths inside atmel_sha204a_probe() to prevent stale entries from remaining in the global tracking structures if a partial initialization failure occurs. If sysfs group creation fails, explicitly trigger devm_hwrng_unregister() to preserve the strict lifecycle ordering introduced in previous stability fixes. Convert the removal path to use the core teardown helpers. Ensure the device readiness state is deactivated using atmel_i2c_deactivate_client() and the tracking node is removed via atmel_i2c_unregister_client() before local memory resources are freed. This guarantees that any in-flight work queue items are unconditionally flushed, eliminating a potential Use-After-Free (UAF) window during device removal. No functional change intended beyond improved lifecycle handling. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-sha204a.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c index 3853d2b95449..db61ac0177f6 100644 --- a/drivers/crypto/atmel-sha204a.c +++ b/drivers/crypto/atmel-sha204a.c @@ -172,9 +172,15 @@ static int atmel_sha204a_probe(struct i2c_client *clie= nt) return ret; =20 i2c_priv =3D i2c_get_clientdata(client); + i2c_priv->ready =3D false; =20 i2c_priv->caps =3D 0; =20 + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + list_add_tail(&i2c_priv->i2c_client_list_node, + &atmel_i2c_mgmt.i2c_client_list); + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + memset(&i2c_priv->hwrng, 0, sizeof(i2c_priv->hwrng)); =20 i2c_priv->hwrng.name =3D dev_name(&client->dev); @@ -185,15 +191,28 @@ static int atmel_sha204a_probe(struct i2c_client *cli= ent) i2c_priv->hwrng.quality =3D *quality; =20 ret =3D devm_hwrng_register(&client->dev, &i2c_priv->hwrng); - if (ret) + if (ret) { dev_warn(&client->dev, "failed to register RNG (%d)\n", ret); + goto err_list_del; + } =20 ret =3D sysfs_create_group(&client->dev.kobj, &atmel_sha204a_groups); if (ret) { dev_err(&client->dev, "failed to register sysfs entry\n"); - return ret; + goto err_hwrng_unregister; } =20 + spin_lock(&atmel_i2c_mgmt.i2c_list_lock); + i2c_priv->ready =3D true; + spin_unlock(&atmel_i2c_mgmt.i2c_list_lock); + + return 0; + +err_hwrng_unregister: + devm_hwrng_unregister(&client->dev, &i2c_priv->hwrng); +err_list_del: + atmel_i2c_unregister_client(i2c_priv); + return ret; } =20 @@ -201,9 +220,10 @@ static void atmel_sha204a_remove(struct i2c_client *cl= ient) { struct atmel_i2c_client_priv *i2c_priv =3D i2c_get_clientdata(client); =20 - devm_hwrng_unregister(&client->dev, &i2c_priv->hwrng); - atmel_i2c_flush_queue(); + atmel_i2c_deactivate_client(i2c_priv); =20 + devm_hwrng_unregister(&client->dev, &i2c_priv->hwrng); + atmel_i2c_unregister_client(i2c_priv); sysfs_remove_group(&client->dev.kobj, &atmel_sha204a_groups); =20 kfree((void *)i2c_priv->hwrng.priv); @@ -239,7 +259,6 @@ static int __init atmel_sha204a_init(void) =20 static void __exit atmel_sha204a_exit(void) { - atmel_i2c_flush_queue(); i2c_del_driver(&atmel_sha204a_driver); } =20 --=20 2.39.5 From nobody Sun May 24 22:35:48 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (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 CE8943F39F3 for ; Wed, 20 May 2026 15:57:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292654; cv=none; b=MB7yNveMWwnYbvTljjRpkckYorMyPJ6Gg5TvweMLyhh0+vEbsvZ/afYNO6FKBJaLB2SmCSw+BWHpzp5ae45NNXy0FV5j7g7Gislv2XptJSfdlIC6Z7INcO2Qqq1ZM3Qg+5xR6GizR3jHnPi5Q5os4IVif76DzeCLScUqM8egWOg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292654; c=relaxed/simple; bh=GcT4179KEn1MmyXneciyyOy4CZWvu0iEu43IoD6Z7v4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=g0vW78EEERHcX55E6PdMmF6Kt+9jtzYAVnmVe3P3wmDKibbamQ0G/zYqHWgtZTFG1O03bZn6WgRFQJ/WngSxfYPDkmmLz7Sbv73udSqn/lJOTy3WFbmXrnC2+R1NAOg3Yb7znzbT6+Ssd6hvSbYaq0I2dyEpr1fEvWV7bz9neCc= 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=bfg9BhpI; arc=none smtp.client-ip=209.85.128.51 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="bfg9BhpI" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-48e69e60063so4651525e9.1 for ; Wed, 20 May 2026 08:57:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779292647; x=1779897447; 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=d00Co/CPYFX5ZE7rQHh1/lw+DiNtp4wsDbvq3jgMwnU=; b=bfg9BhpIEV1O5nTTBchU0I53Qigv+0GXX6B5Yed1BlNU5/Be+eqMGfybxxToMyTjbt Ssu+Xdw6u73WjHV64KQ7TWJ6X6fiIjiYyAReshHyd3DOCmQfTySi2sylL9bG1wa2gzOO RzVl+v5WhvsZQFugAIGOV/dJtsMTEvVOYtPkYVMB/6st1eIQKFxwr7zDkpIrb0lM0Hbl fa/vNFt6H9tOhDiZ5YLHiw0QRP3TS01ADhtt3E4pqRwrFTHUWc7jQweV3jm6el1FzjrV zzkdaCgQvC9uJCyJzrulxLbG3+A5OX2+ZhalZss7Mf1uAToxrZ6/cnxYACUfPM9DIbrn VV4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779292647; x=1779897447; 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=d00Co/CPYFX5ZE7rQHh1/lw+DiNtp4wsDbvq3jgMwnU=; b=k2x8sIjQSlrkhjvNBEXk707ARvP6PDUxdr+dWE5HqT63OqtLaGJGa1xzi0qaHtjvQj nSgLoqFxpc/fooGfSsb3CVkgKIozcGPTQ0tKNRGuIfYAKa+17J54ryGQDqQoOkM5agrm jRn0FFHBHYmCaB5MzxgVbm2aVkb1TDEH6yskDJG5C89z67Y/xAp99fPHVKHMs8NTz217 vDFltp3bomwmuQQdSYNYZZSqcIy2gVUrz69Q02cPhFlSqw0VRr5DVBeprhde1r4pviIh 6i5zFosycQUJJvQT3BoDD6E5trOHJoUeFotxAKIVGjmQbCR+bHndgvuXjLk3Xzpcc8L3 HQ1A== X-Forwarded-Encrypted: i=1; AFNElJ/7WqsOJDmt4whmuKXIp7yOsDn3HB4q0OUDq/OudIjDcYCbXX9SvfNKcdfabyDsIvLd5IPPKJbWDK7Ww8k=@vger.kernel.org X-Gm-Message-State: AOJu0Yyqv7rpPFvOUSHuE319LhZAZzknQgPIfatIJn1ju4h8j8+lQlRC tgowQuTUsUN7pj4yPBbdKOoLTUQCzmPlTPK1Qj655QgcQK/4cw6/XXC1 X-Gm-Gg: Acq92OEa1FwcuC8Irb6dpFmwMwG1J5g/QlwiOdDK7g8+oQ8dOdi2c2EXGEV8dvx8s1M FoiMyKoM7UGkHOL5R2lw0OxuSrW3mLXeLHuuA+8n/4jSbKZpU4k1T+Utsfx/Dlos8KBV93b8Mfd ujFUgYPqHmyKhipv1RHDqrXTsKJEfGllGh6IWD2VwpYvRi20Fv1DkcjJSindbzttRrN5nkLbKeh RHoiF9Pmbu3skir3MhVDXVEBCyUjqqxnODUZonWUzdLvR74KzAzBcMykuBkk95uiBO5HH1ZPM/3 iWS23LROZBUe9wsJsX3BBnzVXvDzoCRYqlsYvacI+ZMAauvSo2zTtpmsKw0xAKREUtna7RIN/aU BGkmQheLjuvYYzV5OR2okSYQtxqBxbkStmRmhoNdFiXujOH2RWl+glqDghJ0XCfAqZZbhQfI7vi y6FtAv9uJlc0WJVfn+mV3UtB/pBpPhNqFU7dF15yN1sEYHtwm3WNp+r8QB+y2arZg= X-Received: by 2002:a05:600c:3594:b0:490:502:8422 with SMTP id 5b1f17b1804b1-4900d55ec74mr107484465e9.6.1779292646691; Wed, 20 May 2026 08:57:26 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe79ce3sm137216715e9.31.2026.05.20.08.57.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 08:57:26 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev, tudor.ambarus@linaro.org, ardb@kernel.org, linusw@kernel.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v3 11/12] crypto: atmel-sha204a - fix heap info leak on I2C transfer failure Date: Wed, 20 May 2026 15:57:02 +0000 Message-Id: <20260520155703.23018-12-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260520155703.23018-1-l.rubusch@gmail.com> References: <20260520155703.23018-1-l.rubusch@gmail.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" When a non-blocking read operation is requested, the driver dynamically allocates memory to track asynchronous transfer status. If the underlying I2C transmission fails, atmel_sha204a_rng_done() logs a rate-limited warning but incorrectly proceeds to cache the pointer to this uninitialized buffer inside the rng->priv data field anyway. On subsequent execution passes, atmel_sha204a_rng_read_nonblocking() detects the stale rng->priv value, skips executing a hardware data read, and copies up to 32 bytes of uninitialized kernel heap data from this garbage memory pool straight back into the system's hwrng data stream. Fix this information disclosure vector by immediately releasing the allocated asynchronous work data buffer and explicitly clearing the tracking pointer context whenever an I2C transaction returns a non-zero error status. Additionally, duplicate the tfm counter decrement within the new error path to ensure the reference counter is properly released before executing the early return, maintaining the driver's availability for subsequent requests. Fixes: da001fb651b0 ("crypto: atmel-i2c - add support for SHA204A random nu= mber generator") Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-sha204a.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c index db61ac0177f6..b51031ced7d1 100644 --- a/drivers/crypto/atmel-sha204a.c +++ b/drivers/crypto/atmel-sha204a.c @@ -31,10 +31,15 @@ static void atmel_sha204a_rng_done(struct atmel_i2c_wor= k_data *work_data, struct atmel_i2c_client_priv *i2c_priv =3D work_data->ctx; struct hwrng *rng =3D areq; =20 - if (status) + if (status) { dev_warn_ratelimited(&i2c_priv->client->dev, "i2c transaction failed (%d)\n", status); + kfree(work_data); + rng->priv =3D 0; + atomic_dec(&i2c_priv->tfm_count); + return; + } =20 rng->priv =3D (unsigned long)work_data; atomic_dec(&i2c_priv->tfm_count); --=20 2.39.5 From nobody Sun May 24 22:35:48 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.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 479953CCFB0 for ; Wed, 20 May 2026 15:57:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292654; cv=none; b=ePBaOQ/jeWimVb7uXflHGmUQDU1kAMyWaPd39ir8dLIgoDzeG28cz29+drtiXgyPWHjiwXZAABbVLq8eh35+sDxz6w/gEexPmBYgbvQJTBDHTHr8Rpi0BK8sYWTdM7HThKtCtWWEYGVLRvRejnGsJRGDIzd059l8y0FL1tSVyls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779292654; c=relaxed/simple; bh=uUS9mRgrX2d+D+VTeHIFS9Z4IesaOwUkL2DTLnHENXo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Yz4UbTOrOpB1pBEuDoLRpRKE9Wj7B5i14FQDdE/xsj7Zkv6FEzxrhqUPqFaj8AJvymk5+HHCAKLPUVHJAs/h8XAXOmu8TnRNw2RTTLvX2f+GXCePuMDerbDCDu7aBAdBfYG7gJMUMvpxi7snQ4mtbjp4zgUMFH/z30ImbU0nMrQ= 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=izSdX38+; arc=none smtp.client-ip=209.85.128.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="izSdX38+" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-48d10c981e4so6608095e9.0 for ; Wed, 20 May 2026 08:57:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779292648; x=1779897448; 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=iGnzECxDEMQ5FPGNyBfs1beCyp7+eMuwQgokKJtVuYQ=; b=izSdX38+YHHPCH2kwyOUWcT2WuLqpxIWtzMMkqPceS8seUII974Y+F8SU1awEPNmXm gSB5yzVWNgtjU5pNheFQSRf2+A/EFqzHNN7jrDeCDSKRqxypsHj6L3k5p0+WNgX2pYm8 DepWieSOI3SWmXeAWarjatz1eZGEnh5x6qLJ/BcCk9bnjml0L8Mqgs/zdvjQqcN+JlG/ blLXGfpHKCGbDjcMuORMqOMD06Mw+A9eqxOGzByES6wy/9YP8qjND0/LL6g+flbdWo+o So+bqDDwkqUsCxOojd1ObDGLQuZJyJGDQud6Pw2I+P/YYhFQy4t7+MSjDA4bS5JFJymU ppKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779292648; x=1779897448; 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=iGnzECxDEMQ5FPGNyBfs1beCyp7+eMuwQgokKJtVuYQ=; b=q5liEG3+QKC2zLjlGnhXDrvG6SbiTgJPuxfP415RPVxg3G/QhlAy0NWS05AYWgtQk7 Iw09d7Fs0SK2ZvlPXEXptYC/wrnW7gEXL7r0zrhO/VnQ5zG+mzSNtZQML71b4D6ecP7W BGpC+BolsqB0hJ5E/75JHt1eYuAfi0Qflz6dDrJrYp0LcOaULBoF3PTni2csx6albZZ8 0/kL0UdExTKqZtij4WEf3lXELuENoPzsigmzsZwfcqjvyNeamf0+M//zyuHkHKR6N8o5 huYOKbGflqMJxGeLvL14+7uVS4Rn9L3/9+d/kEyFzVh/Jf51MvVEOyJjC5XOx2ITvhMw pgMA== X-Forwarded-Encrypted: i=1; AFNElJ+1/e0uMPMG3Je/lpuFT4iQUDg9PFfkaatoKHb1PehHSToe5kQpiwWJ8wKWpwevuORVOiC1UkYSTleNrlY=@vger.kernel.org X-Gm-Message-State: AOJu0YwsfHnnsDIOEwYgT8uonC6UXm8y0S1v0WlxtJDG7+AD9OKQRND5 ZgU9devSzbLaGfWytXOrEqgv+a+ambZ4svsZgWSCQ8A9RiNpylmlMqNn X-Gm-Gg: Acq92OEJkArHtW25+MZ4OXSk5sqhgWr1eymozOwVqGth4hLIzEvd6OODjzFyyCeud9H cQDRRxSc00zqXYbFX2qqNALInZI19dgTp5+zgPqL47thAdwYs9yitG7LkwOmbrVOESxQMUn3p4P oXRdbdHGIwXSQF4OQKaHOB++A8lsiWInrlcmPCNLz6SNU2JVoP+YahHpiKLb/i6sPUzsCBDM0s8 vwhupT3klb+JO98TBpx2taAQjjkDOocKz4IHv830ZsZ6jV4w9501GNogezwsTwdBbRIQ2buollk GK6QZuuHow8UqhoKRGWBcQKvbYwdI0CU60ysUfauWY+ERxVpolPMRlzIKPPsUqiB79w9f9QQ/rR yWUWdENfL+J9OgVcbOuDH5/jTYwHOlhEP3w/9et+lpYOwbM14rWIg8kEuDEfEUDsUZLRu3du67Y GFJHFmIQkMZ7vd/Xqk5k1p4NOKkl63U2SRU7pTm9OsZvbxQG+ZjqtkISlbhgs1eBc= X-Received: by 2002:a05:600c:4f8f:b0:486:f634:f2e with SMTP id 5b1f17b1804b1-48fe66423e1mr168105295e9.4.1779292647916; Wed, 20 May 2026 08:57:27 -0700 (PDT) Received: from menon.v.cablecom.net (84-74-0-139.dclient.hispeed.ch. [84.74.0.139]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48febe79ce3sm137216715e9.31.2026.05.20.08.57.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 08:57:27 -0700 (PDT) From: Lothar Rubusch To: thorsten.blum@linux.dev, herbert@gondor.apana.org.au, davem@davemloft.net, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, claudiu.beznea@tuxon.dev, tudor.ambarus@linaro.org, ardb@kernel.org, linusw@kernel.org Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH v3 12/12] crypto: atmel-sha204a - switch to module_i2c_driver Date: Wed, 20 May 2026 15:57:03 +0000 Message-Id: <20260520155703.23018-13-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260520155703.23018-1-l.rubusch@gmail.com> References: <20260520155703.23018-1-l.rubusch@gmail.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" Replace explicit module init and exit boilerplate functions with the module_i2c_driver() macro helper to simplify the driver registration path. Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-sha204a.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c index b51031ced7d1..41685b1df442 100644 --- a/drivers/crypto/atmel-sha204a.c +++ b/drivers/crypto/atmel-sha204a.c @@ -257,18 +257,7 @@ static struct i2c_driver atmel_sha204a_driver =3D { .driver.of_match_table =3D atmel_sha204a_dt_ids, }; =20 -static int __init atmel_sha204a_init(void) -{ - return i2c_add_driver(&atmel_sha204a_driver); -} - -static void __exit atmel_sha204a_exit(void) -{ - i2c_del_driver(&atmel_sha204a_driver); -} - -module_init(atmel_sha204a_init); -module_exit(atmel_sha204a_exit); +module_i2c_driver(atmel_sha204a_driver); =20 MODULE_AUTHOR("Ard Biesheuvel "); MODULE_DESCRIPTION("Microchip / Atmel SHA204A (I2C) driver"); --=20 2.39.5