Merge tag 'perf-urgent-2026-02-01' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull perf events fix from Ingo Molnar:
"Fix a race in the user-callchains code"

* tag 'perf-urgent-2026-02-01' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
perf: sched: Fix perf crash with new is_user_task() helper

+9 -4
+5
include/linux/sched.h
··· 1776 1776 (current->nr_cpus_allowed == 1); 1777 1777 } 1778 1778 1779 + static __always_inline bool is_user_task(struct task_struct *task) 1780 + { 1781 + return task->mm && !(task->flags & (PF_KTHREAD | PF_USER_WORKER)); 1782 + } 1783 + 1779 1784 /* Per-process atomic flags. */ 1780 1785 #define PFA_NO_NEW_PRIVS 0 /* May not gain new privileges. */ 1781 1786 #define PFA_SPREAD_PAGE 1 /* Spread page cache over cpuset */
+1 -1
kernel/events/callchain.c
··· 246 246 247 247 if (user && !crosstask) { 248 248 if (!user_mode(regs)) { 249 - if (current->flags & (PF_KTHREAD | PF_USER_WORKER)) 249 + if (!is_user_task(current)) 250 250 goto exit_put; 251 251 regs = task_pt_regs(current); 252 252 }
+3 -3
kernel/events/core.c
··· 7460 7460 if (user_mode(regs)) { 7461 7461 regs_user->abi = perf_reg_abi(current); 7462 7462 regs_user->regs = regs; 7463 - } else if (!(current->flags & (PF_KTHREAD | PF_USER_WORKER))) { 7463 + } else if (is_user_task(current)) { 7464 7464 perf_get_regs_user(regs_user, regs); 7465 7465 } else { 7466 7466 regs_user->abi = PERF_SAMPLE_REGS_ABI_NONE; ··· 8100 8100 * Try IRQ-safe get_user_page_fast_only first. 8101 8101 * If failed, leave phys_addr as 0. 8102 8102 */ 8103 - if (!(current->flags & (PF_KTHREAD | PF_USER_WORKER))) { 8103 + if (is_user_task(current)) { 8104 8104 struct page *p; 8105 8105 8106 8106 pagefault_disable(); ··· 8215 8215 { 8216 8216 bool kernel = !event->attr.exclude_callchain_kernel; 8217 8217 bool user = !event->attr.exclude_callchain_user && 8218 - !(current->flags & (PF_KTHREAD | PF_USER_WORKER)); 8218 + is_user_task(current); 8219 8219 /* Disallow cross-task user callchains. */ 8220 8220 bool crosstask = event->ctx->task && event->ctx->task != current; 8221 8221 bool defer_user = IS_ENABLED(CONFIG_UNWIND_USER) && user &&