mbox series

[00/42] crypto: Convert to platform remove callback returning void

Message ID 20231020075521.2121571-44-u.kleine-koenig@pengutronix.de
Headers show
Series crypto: Convert to platform remove callback returning void | expand

Message

Uwe Kleine-König Oct. 20, 2023, 7:55 a.m. UTC
Hello,

this series converts all platform drivers below drivers/crypto to use
.remove_new(). Compared to the traditional .remove() callback
.remove_new() returns no value. This is a good thing because the driver
core doesn't (and cannot) cope for errors during remove. The only effect
of a non-zero return value in .remove() is that the driver core emits a
warning. The device is removed anyhow and an early return from .remove()
usually yields resource leaks and/or use-after-free bugs.

There are three drivers that got that wrong and potentially returned an
error code (caam/jr.c, stm32/stm32-crc32.c, stm32/stm32-cryp.c). These
are fixed accordingly. The other drivers could be transformed trivially.

See commit 5c5a7680e67b ("platform: Provide a remove callback that
returns no value") for an extended explanation and the eventual goal.

There are no interdependencies in this series. As there are still quite
a few drivers to convert, I'm happy about every patch that makes it in.
So even if there is a merge conflict with one patch until you apply (or
a different concern that doesn't apply to all patches), please apply the
remainder of this series anyhow. I'll come back to the part that you
(maybe) skipped at a later point.

Best regards and thanks
Uwe

Uwe Kleine-König (42):
  crypto: sun4i-ss - Convert to platform remove callback returning void
  crypto: sun8i-ce - Convert to platform remove callback returning void
  crypto: sun8i-ss - Convert to platform remove callback returning void
  crypto: amcc/crypto4xx - Convert to platform remove callback returning void
  crypto: amlogic-gxl-core - Convert to platform remove callback returning void
  crypto: aspeed-acry - Convert to platform remove callback returning void
  crypto: aspeed-hace - Convert to platform remove callback returning void
  crypto: atmel-aes - Convert to platform remove callback returning void
  crypto: atmel-sha - Convert to platform remove callback returning void
  crypto: atmel-tdes - Convert to platform remove callback returning void
  crypto: axis/artpec6 - Convert to platform remove callback returning void
  crypto: bcm/cipher - Convert to platform remove callback returning void
  crypto: caam/jr - Convert to platform remove callback returning void
  crypto: ccp/sp - Convert to platform remove callback returning void
  crypto: ccree/cc - Convert to platform remove callback returning void
  crypto: exynos-rng - Convert to platform remove callback returning void
  crypto: gemini/sl3516-ce - Convert to platform remove callback returning void
  crypto: hisilicon/sec - Convert to platform remove callback returning void
  crypto: hisilicon/trng - Convert to platform remove callback returning void
  crypto: img-hash - Convert to platform remove callback returning void
  crypto: inside-secure/safexcel - Convert to platform remove callback returning void
  crypto: intel/ixp4xx-crypto - Convert to platform remove callback returning void
  crypto: intel/keembay-ocs-aes - Convert to platform remove callback returning void
  crypto: intel/keembay-ocs-ecc - Convert to platform remove callback returning void
  crypto: intel/keembay-ocs-hcu - Convert to platform remove callback returning void
  crypto: marvell/cesa - Convert to platform remove callback returning void
  crypto: mxs-dcp - Convert to platform remove callback returning void
  crypto: n2_core - Convert to platform remove callback returning void
  crypto: omap-aes - Convert to platform remove callback returning void
  crypto: omap-des - Convert to platform remove callback returning void
  crypto: omap-sham - Convert to platform remove callback returning void
  crypto: qce - Convert to platform remove callback returning void
  crypto: qcom-rng - Convert to platform remove callback returning void
  crypto: rockchip/rk3288 - Convert to platform remove callback returning void
  crypto: s5p-sss - Convert to platform remove callback returning void
  crypto: sa2ul - Convert to platform remove callback returning void
  crypto: sahara - Convert to platform remove callback returning void
  crypto: stm32/crc32 - Convert to platform remove callback returning void
  crypto: stm32/cryp - Convert to platform remove callback returning void
  crypto: talitos - Convert to platform remove callback returning void
  crypto: xilinx/zynqmp-aes-gcm - Convert to platform remove callback returning void
  crypto: xilinx/zynqmp-sha - Convert to platform remove callback returning void

 .../crypto/allwinner/sun4i-ss/sun4i-ss-core.c |  5 ++---
 .../crypto/allwinner/sun8i-ce/sun8i-ce-core.c |  5 ++---
 .../crypto/allwinner/sun8i-ss/sun8i-ss-core.c |  6 ++---
 drivers/crypto/amcc/crypto4xx_core.c          |  6 ++---
 drivers/crypto/amlogic/amlogic-gxl-core.c     |  5 ++---
 drivers/crypto/aspeed/aspeed-acry.c           |  6 ++---
 drivers/crypto/aspeed/aspeed-hace.c           |  6 ++---
 drivers/crypto/atmel-aes.c                    |  6 ++---
 drivers/crypto/atmel-sha.c                    |  6 ++---
 drivers/crypto/atmel-tdes.c                   |  6 ++---
 drivers/crypto/axis/artpec6_crypto.c          |  5 ++---
 drivers/crypto/bcm/cipher.c                   |  5 ++---
 drivers/crypto/caam/jr.c                      | 22 ++++++++-----------
 drivers/crypto/ccp/sp-platform.c              |  6 ++---
 drivers/crypto/ccree/cc_driver.c              |  6 ++---
 drivers/crypto/exynos-rng.c                   |  6 ++---
 drivers/crypto/gemini/sl3516-ce-core.c        |  6 ++---
 drivers/crypto/hisilicon/sec/sec_drv.c        |  6 ++---
 drivers/crypto/hisilicon/trng/trng.c          |  6 ++---
 drivers/crypto/img-hash.c                     |  6 ++---
 drivers/crypto/inside-secure/safexcel.c       |  6 ++---
 drivers/crypto/intel/ixp4xx/ixp4xx_crypto.c   |  6 ++---
 .../intel/keembay/keembay-ocs-aes-core.c      |  6 ++---
 .../crypto/intel/keembay/keembay-ocs-ecc.c    |  6 ++---
 .../intel/keembay/keembay-ocs-hcu-core.c      |  6 ++---
 drivers/crypto/marvell/cesa/cesa.c            |  6 ++---
 drivers/crypto/mxs-dcp.c                      |  6 ++---
 drivers/crypto/n2_core.c                      | 12 ++++------
 drivers/crypto/omap-aes.c                     |  6 ++---
 drivers/crypto/omap-des.c                     |  6 ++---
 drivers/crypto/omap-sham.c                    |  6 ++---
 drivers/crypto/qce/core.c                     |  5 ++---
 drivers/crypto/qcom-rng.c                     |  6 ++---
 drivers/crypto/rockchip/rk3288_crypto.c       |  5 ++---
 drivers/crypto/s5p-sss.c                      |  6 ++---
 drivers/crypto/sa2ul.c                        |  6 ++---
 drivers/crypto/sahara.c                       |  6 ++---
 drivers/crypto/stm32/stm32-crc32.c            | 15 +++++--------
 drivers/crypto/stm32/stm32-cryp.c             | 16 +++++---------
 drivers/crypto/talitos.c                      |  6 ++---
 drivers/crypto/xilinx/zynqmp-aes-gcm.c        |  6 ++---
 drivers/crypto/xilinx/zynqmp-sha.c            |  6 ++---
 42 files changed, 99 insertions(+), 187 deletions(-)

base-commit: 4230ea146b1e64628f11e44290bb4008e391bc24

Comments

Konrad Dybcio Oct. 21, 2023, 5:23 p.m. UTC | #1
On 10/20/23 09:55, Uwe Kleine-König wrote:
> The .remove() callback for a platform driver returns an int which makes
> many driver authors wrongly assume it's possible to do error handling by
> returning an error code. However the value returned is ignored (apart
> from emitting a warning) and this typically results in resource leaks.
> 
> To improve here there is a quest to make the remove callback return
> void. In the first step of this quest all drivers are converted to
> .remove_new(), which already returns void. Eventually after all drivers
> are converted, .remove_new() will be renamed to .remove().
> 
> Trivially convert this driver from always returning zero in the remove
> callback to the void returning variant.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Konrad