Hello Lizhi Hou,

Commit 2f509fe6a42c ("accel/amdxdna: Add ioctl
DRM_IOCTL_AMDXDNA_GET_ARRAY") from Sep 2, 2025 (linux-next), leads to
the following (UNPUBLISHED) Smatch static checker warning:

        drivers/accel/amdxdna/aie2_pci.c:904 aie2_query_ctx_status_array()
        warn: potential user controlled sizeof overflow
        'args->num_element * args->element_size' '1-u32max(user) * 
1-u32max(user)'

drivers/accel/amdxdna/aie2_pci.c
    891 static int aie2_query_ctx_status_array(struct amdxdna_client *client,
    892                                        struct amdxdna_drm_get_array 
*args)
    893 {
    894         struct amdxdna_drm_get_array array_args;
    895         struct amdxdna_dev *xdna = client->xdna;
    896         struct amdxdna_client *tmp_client;
    897         int ret;
    898 
    899         drm_WARN_ON(&xdna->ddev, !mutex_is_locked(&xdna->dev_lock));
    900 
    901         array_args.element_size = min(args->element_size,
    902                                       sizeof(struct 
amdxdna_drm_hwctx_entry));

Instead of min() here we should just return -EINVAL if they are !=.


    903         array_args.buffer = args->buffer;
--> 904         array_args.num_element = args->num_element * args->element_size 
/
                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These are both u32 values controlled by the user so this is an integer
overflow bug.  Security bug.

    905                                 array_args.element_size;
    906         list_for_each_entry(tmp_client, &xdna->client_list, node) {
    907                 ret = amdxdna_hwctx_walk(tmp_client, &array_args,
    908                                          aie2_hwctx_status_cb);
    909                 if (ret)
    910                         break;
    911         }
    912 
    913         args->element_size = array_args.element_size;
    914         args->num_element = (u32)((array_args.buffer - args->buffer) /
    915                                   args->element_size);
    916 
    917         return ret;
    918 }

regards,
dan carpenter

Reply via email to