Skip to content

Commit 8f067aa

Browse files
DanisJiangrafaeljw
authored andcommitted
ACPI: video: Fix use-after-free in acpi_video_switch_brightness()
The switch_brightness_work delayed work accesses device->brightness and device->backlight, freed by acpi_video_dev_unregister_backlight() during device removal. If the work executes after acpi_video_bus_unregister_backlight() frees these resources, it causes a use-after-free when acpi_video_switch_brightness() dereferences device->brightness or device->backlight. Fix this by calling cancel_delayed_work_sync() for each device's switch_brightness_work in acpi_video_bus_remove_notify_handler() after removing the notify handler that queues the work. This ensures the work completes before the memory is freed. Fixes: 8ab58e8 ("ACPI / video: Fix backlight taking 2 steps on a brightness up/down keypress") Cc: All applicable <stable@vger.kernel.org> Signed-off-by: Yuhao Jiang <danisjiang@gmail.com> Reviewed-by: Hans de Goede <hansg@kernel.org> [ rjw: Changelog edit ] Link: https://patch.msgid.link/20251022200704.2655507-1-danisjiang@gmail.com Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent 211ddde commit 8f067aa

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

drivers/acpi/acpi_video.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1959,8 +1959,10 @@ static void acpi_video_bus_remove_notify_handler(struct acpi_video_bus *video)
19591959
struct acpi_video_device *dev;
19601960

19611961
mutex_lock(&video->device_list_lock);
1962-
list_for_each_entry(dev, &video->video_device_list, entry)
1962+
list_for_each_entry(dev, &video->video_device_list, entry) {
19631963
acpi_video_dev_remove_notify_handler(dev);
1964+
cancel_delayed_work_sync(&dev->switch_brightness_work);
1965+
}
19641966
mutex_unlock(&video->device_list_lock);
19651967

19661968
acpi_video_bus_stop_devices(video);

0 commit comments

Comments
 (0)