summaryrefslogtreecommitdiff
path: root/include/linux/kernelcapi.h
diff options
context:
space:
mode:
authorGui-Dong Han <hanguidong02@gmail.com>2026-02-03 11:19:43 +0800
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2026-02-03 22:22:37 +0100
commit5c9ecd8e6437cd55a38ea4f1e1d19cee8e226cb8 (patch)
treeb8fcbe32593b687f8d58f8b5ff7ea0c0811a7490 /include/linux/kernelcapi.h
parent75ce02f4bc9a8b8350b6b1b01872467b0cc960cc (diff)
PM: sleep: wakeirq: harden dev_pm_clear_wake_irq() against races
dev_pm_clear_wake_irq() currently uses a dangerous pattern where dev->power.wakeirq is read and checked for NULL outside the lock. If two callers invoke this function concurrently, both might see a valid pointer and proceed. This could result in a double-free when the second caller acquires the lock and tries to release the same object. Address this by removing the lockless check of dev->power.wakeirq. Instead, acquire dev->power.lock immediately to ensure the check and the subsequent operations are atomic. If dev->power.wakeirq is NULL under the lock, simply unlock and return. This guarantees that concurrent calls cannot race to free the same object. Based on a quick scan of current users, I did not find an actual bug as drivers seem to rely on their own synchronization. However, since asynchronous usage patterns exist (e.g., in drivers/net/wireless/ti/wlcore), I believe a race is theoretically possible if the API is used less carefully in the future. This change hardens the API to be robust against such cases. Fixes: 4990d4fe327b ("PM / Wakeirq: Add automated device wake IRQ handling") Signed-off-by: Gui-Dong Han <hanguidong02@gmail.com> Link: https://patch.msgid.link/20260203031943.1924-1-hanguidong02@gmail.com Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'include/linux/kernelcapi.h')
0 files changed, 0 insertions, 0 deletions