]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdkfd: fix SMI event cross-process information leak
authorYongqiang Sun <Yongqiang.Sun@amd.com>
Wed, 27 May 2026 13:50:47 +0000 (09:50 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 4 Jun 2026 19:53:58 +0000 (15:53 -0400)
kfd_smi_ev_enabled() skips the suser privilege check when pid=0.
PROCESS_START, PROCESS_END, and VMFAULT events are emitted with
pid=0 while carrying another process's PID and command name, so any
/dev/kfd user in the render group can monitor all GPU workloads.

Pass the target process PID into kfd_smi_event_add() for these events
so the existing per-client filter restricts delivery to the owning
process or CAP_SYS_ADMIN subscribers.

Signed-off-by: Yongqiang Sun <Yongqiang.Sun@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 92a8dba246d371fe268280e5fd74b0955688e6df)

drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c

index 15975c23a88eea362775a4d878699de41fcd421a..dfbde5a571f6ae05c4c3c589a4e4646d9994d37b 100644 (file)
@@ -254,8 +254,10 @@ void kfd_smi_event_update_vmfault(struct kfd_node *dev, uint16_t pasid)
        if (task_info) {
                /* Report VM faults from user applications, not retry from kernel */
                if (task_info->task.pid)
-                       kfd_smi_event_add(0, dev, KFD_SMI_EVENT_VMFAULT, KFD_EVENT_FMT_VMFAULT(
-                                         task_info->task.pid, task_info->task.comm));
+                       kfd_smi_event_add(task_info->tgid, dev,
+                                         KFD_SMI_EVENT_VMFAULT,
+                                         KFD_EVENT_FMT_VMFAULT(task_info->task.pid,
+                                                               task_info->task.comm));
                amdgpu_vm_put_task_info(task_info);
        }
 }
@@ -356,7 +358,7 @@ void kfd_smi_event_process(struct kfd_process_device *pdd, bool start)
        task_info = amdgpu_vm_get_task_info_vm(avm);
 
        if (task_info) {
-               kfd_smi_event_add(0, pdd->dev,
+               kfd_smi_event_add(task_info->tgid, pdd->dev,
                                  start ? KFD_SMI_EVENT_PROCESS_START :
                                  KFD_SMI_EVENT_PROCESS_END,
                                  KFD_EVENT_FMT_PROCESS(task_info->task.pid,