]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdkfd: Add bounds check for AMDKFD_IOC_WAIT_EVENTS
authorSunday Clement <Sunday.Clement@amd.com>
Tue, 19 May 2026 14:02:30 +0000 (10:02 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 4 Jun 2026 20:00:11 +0000 (16:00 -0400)
The kfd_wait_on_events ioctl passes a user-supplied num_events parameter
directly to alloc_event_waiters() which calls kcalloc() without validation.
This allows unprivileged users with /dev/kfd access to trigger large kernel
memory allocations, potentially causing memory exhaustion and denial of
service via the OOM killer.

Add a check to reject num_events values exceeding KFD_SIGNAL_EVENT_LIMIT
(4096), which is the maximum number of events a single process can create.

Signed-off-by: Sunday Clement <Sunday.Clement@amd.com>
Reviewed-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 39eb6da7acee8d0cc12a8959235b590f295d7b4c)

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

index 44150a71ffd5144e483e10eef49ec9e16276b1a4..e65b323aafbf3770b1433cc5a3f72705a043bd17 100644 (file)
@@ -795,6 +795,8 @@ static struct kfd_event_waiter *alloc_event_waiters(uint32_t num_events)
        struct kfd_event_waiter *event_waiters;
        uint32_t i;
 
+       if (num_events > KFD_SIGNAL_EVENT_LIMIT)
+               return NULL;
        event_waiters = kzalloc_objs(struct kfd_event_waiter, num_events);
        if (!event_waiters)
                return NULL;