Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

crypto: atmel-ecc - Remove duplicated error reporting in .remove()

Returning an error value in an i2c remove callback results in an error
message being emitted by the i2c core, but otherwise it doesn't make a
difference. The device goes away anyhow and the devm cleanups are
called.

As atmel_ecc_remove() already emits an error message on failure and the
additional error message by the i2c core doesn't add any useful
information, change the return value to zero to suppress this message.

Also make the error message a bit more drastical because when the device
is still busy on remove, it's likely that it will access freed memory
soon.

This patch is a preparation for making i2c remove callbacks return void.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: Tudor Ambarus <tudor.ambarus@microchip.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Uwe Kleine-König and committed by
Herbert Xu
7df7563b 6cb3f9b2

+10 -2
+10 -2
drivers/crypto/atmel-ecc.c
··· 349 349 350 350 /* Return EBUSY if i2c client already allocated. */ 351 351 if (atomic_read(&i2c_priv->tfm_count)) { 352 - dev_err(&client->dev, "Device is busy\n"); 353 - return -EBUSY; 352 + /* 353 + * After we return here, the memory backing the device is freed. 354 + * That happens no matter what the return value of this function 355 + * is because in the Linux device model there is no error 356 + * handling for unbinding a driver. 357 + * If there is still some action pending, it probably involves 358 + * accessing the freed memory. 359 + */ 360 + dev_emerg(&client->dev, "Device is busy, expect memory corruption.\n"); 361 + return 0; 354 362 } 355 363 356 364 crypto_unregister_kpp(&atmel_ecdh_nist_p256);