From: Pei Xiao Date: Thu, 12 Mar 2026 02:47:55 +0000 (+0800) Subject: spi: atcspi200: fix mutex initialization order X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=869d5b4b2a8012f6ef6058a1055cac6922c2cb55;p=thirdparty%2Flinux.git spi: atcspi200: fix mutex initialization order The atcspi_exec_mem_op() function may call mutex_lock() on the driver's mutex before it is properly initialized if a SPI memory operation is initiated immediately after devm_spi_register_controller() is called. The mutex initialization currently occurs after the controller registration, which leaves a window where the mutex could be used uninitialized. Move the mutex initialization to the beginning of the probe function, before any registration or resource allocation. Fixes: 34e3815ea459 ("spi: atcspi200: Add ATCSPI200 SPI controller driver") Signed-off-by: Pei Xiao Link: https://patch.msgid.link/15a71241affc25108a97d40d9d3dd1bc3d2d69ed.1773282905.git.xiaopei01@kylinos.cn Signed-off-by: Mark Brown --- diff --git a/drivers/spi/spi-atcspi200.c b/drivers/spi/spi-atcspi200.c index 257db4e529e27..8f283dffe3caf 100644 --- a/drivers/spi/spi-atcspi200.c +++ b/drivers/spi/spi-atcspi200.c @@ -565,6 +565,8 @@ static int atcspi_probe(struct platform_device *pdev) spi->dev = &pdev->dev; dev_set_drvdata(&pdev->dev, host); + mutex_init(&spi->mutex_lock); + ret = atcspi_init_resources(pdev, spi, &mem_res); if (ret) goto free_controller; @@ -594,11 +596,11 @@ static int atcspi_probe(struct platform_device *pdev) else spi->use_dma = true; } - mutex_init(&spi->mutex_lock); return 0; free_controller: + mutex_destroy(&spi->mutex_lock); spi_controller_put(host); return ret; }