From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.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 B3BD73A7F46 for ; Tue, 12 May 2026 22:44:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778625860; cv=none; b=C/F48ktaKlf6uE3icFHm7YwXvTtiPP8/wf2jTXVAH//q2pecRjF586o1r/NczVOIra/WBtTxLmGOfQymgpXbJFc4Z3ZFM09yf9jqBjbdFMIjIgAOe5lr+nT0fcl8aZlYmqum4ysedOl4UFWC4Fc8Z8Stp8BFsaBqrpCf4JSti+M= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778625860; c=relaxed/simple; bh=+tAodrGc85aAkcl5jIPb86A/c/K86nen8bhICVysBBU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=H4dSM1MMGGn5stjIR2SaviNnJ60RS9ZzY9rYlfnbWZnOFE+0teI1U+2sIjASSbM4uf8abJWwsrwPrbD/Cf5SdACwYiESvNutLiw9sLaYO+PbWh+7ry25/iDg9Hf1V2wzPGdgfgmdGUsmZ4YNoHxw/XXoj8DO6cpJPCDh13NPkH8= 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=f7q9d6o6; arc=none smtp.client-ip=209.85.221.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="f7q9d6o6" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-44b729aa7c5so468866f8f.2 for ; Tue, 12 May 2026 15:44:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778625857; x=1779230657; 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=CQMP+CsFbE9KP3qAcxLaIg4zkOxpF/EIB64y6avymrk=; b=f7q9d6o6xF/0PBHgwXStn4URnaiIhHJSswMKhySSvRBK7HY86uVKm9sGMYr2sS1jQr EbDxSb5AHLGPRE1h4dq6qAMlzHD61gD134+NRABfMjaRtOpCTL4gwvCnx2nNdVMuezQE oW24qRiRipSioL5QC3oqYi4ZMnEfkd6uH/Ru/sJOPqiS48OsyNoIi4ya94cUj6bJ+7t0 9UhWJOvXkK6YCnu61ydsEKHCXOxlZuZi9T1Gfs9LebBreWIBN2BpQn83TxAr8NAtHI0X GbWNH9viN6OOkqybZVHh9JaHNrAP08BxsbgbtbHmWaH7i+mVD49x5kc83n3QTLclNxxH BF0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778625857; x=1779230657; 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=CQMP+CsFbE9KP3qAcxLaIg4zkOxpF/EIB64y6avymrk=; b=fFIhPZb8yLXRjeB7He0hZoaaXhPyh9NLmgqGIAAJVSVWn35A4rNsMGGxmMyGvhwalg AfEnL1FxmqbueTXNVXK+UGCqF7YsotS9SDSajtzTwRDHTiAD0cMmcuAlj9+OR6LZwfkF B28smhnd5+X1wWDwVj6rDzJxDysdz3qcUA4QqeC+LzzAf2vhME0UHyfnajuR+pKtvs2t f3D/GLjP7m+V6eDDBF4Y1Y8AfB3LZHskFJhFApNIDTDRN8o0UHCNP2V9x6aHOaU5RQ2b z1fiSEPAZoteyo4F8HL5avkJ84YeMU5CAec4mfxkn60rdvDmG3gTZh4DthFWNyikgNd3 qmaw== X-Forwarded-Encrypted: i=1; AFNElJ8d8/jp9np0aiA7VT4bWZqHgzztpdmQJ+MtH0Etx/896cYP6DJPnBJzMXkjJ/+EbRGk6cru2IxQZWd5Tk8=@vger.kernel.org X-Gm-Message-State: AOJu0YxyH0TFSVdF7Ke2zSwaruPBTs1g/LuyWK3ZXpm3w7+DcJQw+AAX S/G4VEhrdGclxu+eVyHtymmKV9bebtWqvKMxcStiaeOhBfWkjoon3QrO X-Gm-Gg: Acq92OHl9QNEv/DqOyJ7BGe8Nj2o07MQrU83TGTRRpx1C9mBnzRg/DK31pC9EdiUakj oK2BfVMLj8T+T0y7iF58S5Oixc0KfJAoc+DvExIY/+Ycdov+YRrttMIbHKGJrgtMIcIerXFFxn4 vmXdt1oDzt2nns3Br8f4/SERFKPwhmAkDCZs51XUKXtvB18fEeaQYvvDjzf1WeBq+27S/ONOE5s QGC0JqR6IZ1jfVLigXCFJmACCC0AU3/SvpWAUlEqr92kesxlPz1giRI73ePKYkbHU7xpMizgbup 5Z1KUSfmawImH38lc5lSztsjG3Qde+BxETZdgDEzDu4P685PtbaOcMFCpNKjaVsNR5Dqn5RkICe kMn2i/XKKr5BXKdomD6/3pDGyVlt6J8pgbbaq35yUzFDpJr/QT06ZPgFV3I+DgoC0f1FetBdmxo 6NhNERLIy7ozD38i99zWf3RzqmUTIIUfYQhv4AbsyVcExxWTCv6Q1tYDXATJFRgNSlbU18wWf35 A== X-Received: by 2002:a05:600c:4e8c:b0:489:6c28:dbc9 with SMTP id 5b1f17b1804b1-48fc9a45602mr4727125e9.7.1778625857153; Tue, 12 May 2026 15:44: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-48fce385ea5sm3194025e9.14.2026.05.12.15.44.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 15:44:16 -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 Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, l.rubusch@gmail.com Subject: [PATCH 09/12] crypto: atmel - check client data in remove callbacks Date: Tue, 12 May 2026 22:43:46 +0000 Message-Id: <20260512224349.64621-10-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260512224349.64621-1-l.rubusch@gmail.com> References: <20260512224349.64621-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: 8bit Check the i2c client private data pointer in the remove callbacks of the Atmel ECC and SHA204A drivers before accessing driver state. Move sysfs group removal ahead of the NULL check so cleanup can still proceed even if client data is unavailable. Also downgrade the busy-device warning in the ECC remove path from dev_emerg() to dev_warn(). Signed-off-by: Lothar Rubusch --- drivers/crypto/atmel-ecc.c | 20 ++++++-------------- drivers/crypto/atmel-sha204a.c | 7 +++++-- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/drivers/crypto/atmel-ecc.c b/drivers/crypto/atmel-ecc.c index f6d1a9694d63..9ad6d42b6eef 100644 --- a/drivers/crypto/atmel-ecc.c +++ b/drivers/crypto/atmel-ecc.c @@ -380,19 +380,13 @@ static void atmel_ecc_remove(struct i2c_client *client) { struct atmel_i2c_client_priv *i2c_priv = i2c_get_clientdata(client); - /* 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"); + sysfs_remove_group(&client->dev.kobj, &atmel_ecc508a_groups); + + if (!i2c_priv) return; - } + + if (atomic_read(&i2c_priv->tfm_count)) + dev_warn(&client->dev, "Device is busy, remove it anyhow\n"); atmel_i2c_unregister_client(i2c_priv); atmel_i2c_flush_queue(); @@ -403,8 +397,6 @@ static void atmel_ecc_remove(struct i2c_client *client) kfree((void *)i2c_priv->hwrng.priv); i2c_priv->hwrng.priv = 0; } - - sysfs_remove_group(&client->dev.kobj, &atmel_ecc508a_groups); } static const struct atmel_i2c_of_match_data atecc508a_match_data = { diff --git a/drivers/crypto/atmel-sha204a.c b/drivers/crypto/atmel-sha204a.c index 88726f6ef87c..6a41024ae40d 100644 --- a/drivers/crypto/atmel-sha204a.c +++ b/drivers/crypto/atmel-sha204a.c @@ -111,6 +111,11 @@ static void atmel_sha204a_remove(struct i2c_client *client) { struct atmel_i2c_client_priv *i2c_priv = i2c_get_clientdata(client); + sysfs_remove_group(&client->dev.kobj, &atmel_sha204a_groups); + + if (!i2c_priv) + return; + devm_hwrng_unregister(&client->dev, &i2c_priv->hwrng); atmel_i2c_flush_queue(); @@ -118,8 +123,6 @@ static void atmel_sha204a_remove(struct i2c_client *client) kfree((void *)i2c_priv->hwrng.priv); i2c_priv->hwrng.priv = 0; } - - sysfs_remove_group(&client->dev.kobj, &atmel_sha204a_groups); } static const struct atmel_i2c_of_match_data atsha204_match_data = { -- 2.53.0