Commit 45809935 authored by Uwe Kleine-König's avatar Uwe Kleine-König Committed by Yi Yang
Browse files

mmc: davinci: Don't strip remove function when driver is builtin

stable inclusion
from stable-v6.6.34
commit 7590da4c04dd4aa9c262da0231e978263861c6eb
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAB0L1
CVE: CVE-2024-39484

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=7590da4c04dd4aa9c262da0231e978263861c6eb



--------------------------------

commit 55c421b364482b61c4c45313a535e61ed5ae4ea3 upstream.

Using __exit for the remove function results in the remove callback being
discarded with CONFIG_MMC_DAVINCI=y. When such a device gets unbound (e.g.
using sysfs or hotplug), the driver is just removed without the cleanup
being performed. This results in resource leaks. Fix it by compiling in the
remove callback unconditionally.

This also fixes a W=1 modpost warning:

WARNING: modpost: drivers/mmc/host/davinci_mmc: section mismatch in
reference: davinci_mmcsd_driver+0x10 (section: .data) ->
davinci_mmcsd_remove (section: .exit.text)

Fixes: b4cff454 ("DaVinci: MMC: MMC/SD controller driver for DaVinci family")
Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20240324114017.231936-2-u.kleine-koenig@pengutronix.de


Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarYi Yang <yiyang13@huawei.com>
parent 9d3114e9
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1344,7 +1344,7 @@ static int davinci_mmcsd_probe(struct platform_device *pdev)
	return ret;
}

static void __exit davinci_mmcsd_remove(struct platform_device *pdev)
static void davinci_mmcsd_remove(struct platform_device *pdev)
{
	struct mmc_davinci_host *host = platform_get_drvdata(pdev);

@@ -1399,7 +1399,7 @@ static struct platform_driver davinci_mmcsd_driver = {
		.of_match_table = davinci_mmc_dt_ids,
	},
	.probe		= davinci_mmcsd_probe,
	.remove_new	= __exit_p(davinci_mmcsd_remove),
	.remove_new	= davinci_mmcsd_remove,
	.id_table	= davinci_mmc_devtype,
};