Skip to content

x86/mce: Make sure to grab mce_sysfs_mutex in set_bank()

Steve Best requested to merge sfbest/centos-stream-9:37264 into main

JIRA: https://issues.redhat.com/browse/RHEL-37264
CVE: CVE-2024-35876

https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=61385231
Tested: Did sanity mce testing using intel-arrowlake-s-02 system.

commit 3ddf944b32f88741c303f0b21459dbb3872b8bc5
Author: Borislav Petkov (AMD) bp@alien8.de
Date: Wed Mar 13 14:48:27 2024 +0100

x86/mce: Make sure to grab mce_sysfs_mutex in set_bank()  

Modifying a MCA bank's MCA_CTL bits which control which error types to  
be reported is done over  

  /sys/devices/system/machinecheck/  
  ├── machinecheck0  
  │   ├── bank0  
  │   ├── bank1  
  │   ├── bank10  
  │   ├── bank11  
  ...  

sysfs nodes by writing the new bit mask of events to enable.  

When the write is accepted, the kernel deletes all current timers and  
reinits all banks.  

Doing that in parallel can lead to initializing a timer which is already  
armed and in the timer wheel, i.e., in use already:  

  ODEBUG: init active (active state 0) object: ffff888063a28000 object  
  type: timer_list hint: mce_timer_fn+0x0/0x240 arch/x86/kernel/cpu/mce/core.c:2642  
  WARNING: CPU: 0 PID: 8120 at lib/debugobjects.c:514  
  debug_print_object+0x1a0/0x2a0 lib/debugobjects.c:514  

Fix that by grabbing the sysfs mutex as the rest of the MCA sysfs code  
does.  

Reported by: Yue Sun <samsun1006219@gmail.com>  
Reported by: xingwei lee <xrivendell7@gmail.com>  
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>  
Cc: <stable@kernel.org>  
Link: https://lore.kernel.org/r/CAEkJfYNiENwQY8yV1LYJ9LjJs%2Bx_-PqMv98gKig55=2vbzffRw@mail.gmail.com  

Signed-off-by: Steve Best sbest@redhat.com

Merge request reports