56 lines
2.0 KiB
Diff
56 lines
2.0 KiB
Diff
From 3ba50a386db1ab9c1bdabbdcea6e7063bd7f875d Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@baylibre.com>
|
|
Date: Thu, 14 Aug 2025 07:11:57 +0200
|
|
Subject: ACPI: APEI: EINJ: Fix resource leak by remove callback in .exit.text
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
The .remove() callback is also used during error handling in
|
|
faux_probe(). As einj_remove() was marked with __exit it's not linked
|
|
into the kernel if the driver is built-in, potentially resulting in
|
|
resource leaks.
|
|
|
|
Also remove the comment justifying the __exit annotation which doesn't
|
|
apply any more since the driver was converted to the faux device
|
|
interface.
|
|
|
|
Fixes: 6cb9441bfe8d ("ACPI: APEI: EINJ: Transition to the faux device interface")
|
|
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
|
|
Cc: 6.16+ <stable@vger.kernel.org> # 6.16+
|
|
Link: https://patch.msgid.link/20250814051157.35867-2-u.kleine-koenig@baylibre.com
|
|
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
|
---
|
|
drivers/acpi/apei/einj-core.c | 12 +++---------
|
|
1 file changed, 3 insertions(+), 9 deletions(-)
|
|
|
|
--- a/drivers/acpi/apei/einj-core.c
|
|
+++ b/drivers/acpi/apei/einj-core.c
|
|
@@ -842,7 +842,7 @@ err_put_table:
|
|
return rc;
|
|
}
|
|
|
|
-static void __exit einj_remove(struct faux_device *fdev)
|
|
+static void einj_remove(struct faux_device *fdev)
|
|
{
|
|
struct apei_exec_context ctx;
|
|
|
|
@@ -864,15 +864,9 @@ static void __exit einj_remove(struct fa
|
|
}
|
|
|
|
static struct faux_device *einj_dev;
|
|
-/*
|
|
- * einj_remove() lives in .exit.text. For drivers registered via
|
|
- * platform_driver_probe() this is ok because they cannot get unbound at
|
|
- * runtime. So mark the driver struct with __refdata to prevent modpost
|
|
- * triggering a section mismatch warning.
|
|
- */
|
|
-static struct faux_device_ops einj_device_ops __refdata = {
|
|
+static struct faux_device_ops einj_device_ops = {
|
|
.probe = einj_probe,
|
|
- .remove = __exit_p(einj_remove),
|
|
+ .remove = einj_remove,
|
|
};
|
|
|
|
static int __init einj_init(void)
|