Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9b488d6 authored by Yang Yingliang's avatar Yang Yingliang Committed by Greg Kroah-Hartman
Browse files

mmc: mmc_spi: fix error handling in mmc_spi_probe()



commit cf4c9d2ac1e42c7d18b921bec39486896645b714 upstream.

If mmc_add_host() fails, it doesn't need to call mmc_remove_host(),
or it will cause null-ptr-deref, because of deleting a not added
device in mmc_remove_host().

To fix this, goto label 'fail_glue_init', if mmc_add_host() fails,
and change the label 'fail_add_host' to 'fail_gpiod_request'.

Fixes: 15a0580c ("mmc_spi host driver")
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
Cc:stable@vger.kernel.org
Link: https://lore.kernel.org/r/20230131013835.3564011-1-yangyingliang@huawei.com


Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 761db46b
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1420,7 +1420,7 @@ static int mmc_spi_probe(struct spi_device *spi)

	status = mmc_add_host(mmc);
	if (status != 0)
		goto fail_add_host;
		goto fail_glue_init;

	/*
	 * Index 0 is card detect
@@ -1428,7 +1428,7 @@ static int mmc_spi_probe(struct spi_device *spi)
	 */
	status = mmc_gpiod_request_cd(mmc, NULL, 0, false, 1, NULL);
	if (status == -EPROBE_DEFER)
		goto fail_add_host;
		goto fail_gpiod_request;
	if (!status) {
		/*
		 * The platform has a CD GPIO signal that may support
@@ -1443,7 +1443,7 @@ static int mmc_spi_probe(struct spi_device *spi)
	/* Index 1 is write protect/read only */
	status = mmc_gpiod_request_ro(mmc, NULL, 1, 0, NULL);
	if (status == -EPROBE_DEFER)
		goto fail_add_host;
		goto fail_gpiod_request;
	if (!status)
		has_ro = true;

@@ -1457,7 +1457,7 @@ static int mmc_spi_probe(struct spi_device *spi)
				? ", cd polling" : "");
	return 0;

fail_add_host:
fail_gpiod_request:
	mmc_remove_host(mmc);
fail_glue_init:
	if (host->dma_dev)