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:
parent
7459e87ae1
commit
b21d1fbb97
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user