2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00

ACPI: APEI: EINJ: Fix resource leak by remove callback in .exit.text

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: 6cb9441bfe ("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>
This commit is contained in:
Uwe Kleine-König 2025-08-14 07:11:57 +02:00 committed by Rafael J. Wysocki
parent 7459e87ae1
commit b21d1fbb97

View File

@ -1094,7 +1094,7 @@ err_put_table:
return rc; return rc;
} }
static void __exit einj_remove(struct faux_device *fdev) static void einj_remove(struct faux_device *fdev)
{ {
struct apei_exec_context ctx; struct apei_exec_context ctx;
@ -1117,15 +1117,9 @@ static void __exit einj_remove(struct faux_device *fdev)
} }
static struct faux_device *einj_dev; static struct faux_device *einj_dev;
/* static struct faux_device_ops einj_device_ops = {
* 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 = {
.probe = einj_probe, .probe = einj_probe,
.remove = __exit_p(einj_remove), .remove = einj_remove,
}; };
static int __init einj_init(void) static int __init einj_init(void)