]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: check num_entries in GEM_OP GET_MAPPING_INFO
authorZiyi Guo <n7l8m4@u.northwestern.edu>
Sun, 8 Feb 2026 00:02:55 +0000 (00:02 +0000)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 27 May 2026 15:55:06 +0000 (11:55 -0400)
kvcalloc(args->num_entries, sizeof(*vm_entries), GFP_KERNEL) at
amdgpu_gem.c:1050 uses the user-supplied num_entries directly without
any upper bounds check. Since num_entries is a __u32 and
sizeof(drm_amdgpu_gem_vm_entry) is 32 bytes, a large num_entries
produces an allocation exceeding INT_MAX, triggering
WARNING in __kvmalloc_node_noprof(), causing a kernel WARNING,
TAINT_WARN, and panic on CONFIG_PANIC_ON_WARN=y systems.

Add a size bounds check before we invoke the kvzalloc() to
reject oversized num_entries early with -EINVAL.

Fixes: 4d82724f7f2b ("drm/amdgpu: Add mapping info option for GEM_OP ioctl")
Signed-off-by: Ziyi Guo <n7l8m4@u.northwestern.edu>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 1fe7bf5457f6efd7be60b17e23163ba54341d73d)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c

index 06dd2e8a5b4712808809499c72e5fda04123d313..fe6d988e7f245c4a506f7036be44182baa1152a5 100644 (file)
@@ -1093,6 +1093,11 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data,
                 * If that number is larger than the size of the array, the ioctl must
                 * be retried.
                 */
+               if (args->num_entries > INT_MAX / sizeof(*vm_entries)) {
+                       r = -EINVAL;
+                       goto out_exec;
+               }
+
                vm_entries = kvcalloc(args->num_entries, sizeof(*vm_entries), GFP_KERNEL);
                if (!vm_entries) {
                        r = -ENOMEM;