drm/amdgpu: check num_entries in GEM_OP GET_MAPPING_INFO

JIRA: https://issues.redhat.com/browse/RHEL-180329

commit 967a00b8e06a7734aded23861faba9ee2462be87
Author: Ziyi Guo <n7l8m4@u.northwestern.edu>
Date:   Sun Feb 8 00:02:55 2026 +0000

    drm/amdgpu: check num_entries in GEM_OP GET_MAPPING_INFO

    commit a1ba4594232c87c3b8defd6f89a2e40f8b08395d upstream.

    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
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Signed-off-by: Anusha Srivatsa <asrivats@redhat.com>
This commit is contained in:
Anusha Srivatsa
2026-08-03 14:53:55 -05:00
parent 3ce85d4fda
commit 5a77ebe0a4
+5
View File
@@ -1095,6 +1095,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;