[tip: timers/core] clockevents: Match the CPU when unbinding devices via sysfs

From: tip-bot2 for Avi Weiss

Date: Mon Nov 09 2026 - 15:03:34 EST


The following commit has been merged into the timers/core branch of tip:

Commit-ID: 6b1f622e0a725e0b9a3dc36c24276d24b5b6e295
Gitweb: https://git.kernel.org/tip/6b1f622e0a725e0b9a3dc36c24276d24b5b6e295
Author: Avi Weiss <thnkslprpt@xxxxxxxxx>
AuthorDate: Sun, 01 Nov 2026 16:11:20 +02:00
Committer: Thomas Gleixner <tglx@xxxxxxxxxx>
CommitterDate: Mon, 09 Nov 2026 20:25:25 +01:00

clockevents: Match the CPU when unbinding devices via sysfs

Clockevent devices belonging to different CPUs can share the same
name. The sysfs unbind handler selects the first matching name from
the global device list, which can cause a request for one CPU to
unbind another CPU's device or incorrectly return -EBUSY.

Check the device's CPU mask when selecting the clockevent to unbind
so that the request targets a device eligible for the specified CPU.

Fixes: 03e13cf5ee60 ("clockevents: Implement unbind functionality")
Signed-off-by: Avi Weiss <thnkslprpt@xxxxxxxxx>
Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxx>
Reviewed-by: Frederic Weisbecker <frederic@xxxxxxxxxx>
Link: https://patch.msgid.link/20261101141120.367124-1-thnkslprpt@xxxxxxxxx
---
kernel/time/clockevents.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c
index 62ad7c0..05e9d96 100644
--- a/kernel/time/clockevents.c
+++ b/kernel/time/clockevents.c
@@ -756,7 +756,8 @@ static ssize_t unbind_device_store(struct device *dev,
mutex_lock(&clockevents_mutex);
raw_spin_lock_irq(&clockevents_lock);
list_for_each_entry(iter, &clockevent_devices, list) {
- if (!strcmp(iter->name, name)) {
+ if (!strcmp(iter->name, name) &&
+ cpumask_test_cpu(dev->id, iter->cpumask)) {
ret = __clockevents_try_unbind(iter, dev->id);
ce = iter;
break;