CC: [email protected]
TO: [email protected]
TO: Guenter Roeck <[email protected]>

tree:   https://chromium.googlesource.com/chromiumos/third_party/kernel 
chromeos-5.10
head:   b835807fdef9926d771cd85d0b5ef3a5efeb14f7
commit: 300b775fa1ab25e08a75ae54a2ddbfb6190cb1e2 [77/82] CHROMIUM: virtio-wl: 
Use vmalloc for larger messages in virtwl_vfd_send().
:::::: branch date: 2 days ago
:::::: commit date: 3 days ago
config: ia64-randconfig-c004-20210709 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Julia Lawall <[email protected]>


cocci warnings: (new ones prefixed by >>)
>> drivers/virtio/virtio_wl.c:965:17-18: WARNING kmalloc is used to allocate 
>> this memory at line 889
>> drivers/virtio/virtio_wl.c:965:17-18: WARNING vmalloc is used to allocate 
>> this memory at line 892

vim +965 drivers/virtio/virtio_wl.c

e3c760a99cdc2d Zach Reizner     2017-08-14  788  
e3c760a99cdc2d Zach Reizner     2017-08-14  789  static int 
virtwl_vfd_send(struct file *filp, const char __user *buffer,
e3c760a99cdc2d Zach Reizner     2017-08-14  790                                 
               u32 len, int *vfd_fds)
e3c760a99cdc2d Zach Reizner     2017-08-14  791  {
e3c760a99cdc2d Zach Reizner     2017-08-14  792         struct virtwl_vfd *vfd 
= filp->private_data;
e3c760a99cdc2d Zach Reizner     2017-08-14  793         struct virtwl_info *vi 
= vfd->vi;
e3c760a99cdc2d Zach Reizner     2017-08-14  794         struct fd 
vfd_files[VIRTWL_SEND_MAX_ALLOCS] = { { 0 } };
e3c760a99cdc2d Zach Reizner     2017-08-14  795         struct virtwl_vfd 
*vfds[VIRTWL_SEND_MAX_ALLOCS] = { 0 };
e3c760a99cdc2d Zach Reizner     2017-08-14  796  #ifdef SEND_VIRTGPU_RESOURCES
e3c760a99cdc2d Zach Reizner     2017-08-14  797         struct dma_buf 
*virtgpu_dma_bufs[VIRTWL_SEND_MAX_ALLOCS] = { 0 };
4250dbcb9e0e98 David Stevens    2020-04-22  798         struct dma_fence 
*virtgpu_dma_fence[VIRTWL_SEND_MAX_ALLOCS] = { 0 };
e3c760a99cdc2d Zach Reizner     2017-08-14  799         bool foreign_id = false;
e3c760a99cdc2d Zach Reizner     2017-08-14  800  #endif
e3c760a99cdc2d Zach Reizner     2017-08-14  801         size_t vfd_count = 0;
e3c760a99cdc2d Zach Reizner     2017-08-14  802         size_t vfd_ids_size;
e3c760a99cdc2d Zach Reizner     2017-08-14  803         size_t ctrl_send_size;
e3c760a99cdc2d Zach Reizner     2017-08-14  804         struct 
virtio_wl_ctrl_vfd_send *ctrl_send;
e3c760a99cdc2d Zach Reizner     2017-08-14  805         u8 *vfd_ids;
e3c760a99cdc2d Zach Reizner     2017-08-14  806         u8 *out_buffer;
e3c760a99cdc2d Zach Reizner     2017-08-14  807         struct completion 
finish_completion;
e3c760a99cdc2d Zach Reizner     2017-08-14  808         struct scatterlist 
out_sg;
e3c760a99cdc2d Zach Reizner     2017-08-14  809         struct scatterlist 
in_sg;
300b775fa1ab25 Suleiman Souhlal 2021-06-08  810         struct sg_table sgt;
300b775fa1ab25 Suleiman Souhlal 2021-06-08  811         struct vm_struct *area;
300b775fa1ab25 Suleiman Souhlal 2021-06-08  812         bool vmalloced;
e3c760a99cdc2d Zach Reizner     2017-08-14  813         int ret;
e3c760a99cdc2d Zach Reizner     2017-08-14  814         int i;
e3c760a99cdc2d Zach Reizner     2017-08-14  815  
e3c760a99cdc2d Zach Reizner     2017-08-14  816         if (vfd_fds) {
e3c760a99cdc2d Zach Reizner     2017-08-14  817                 for (i = 0; i < 
VIRTWL_SEND_MAX_ALLOCS; i++) {
e3c760a99cdc2d Zach Reizner     2017-08-14  818                         struct 
fd vfd_file;
e3c760a99cdc2d Zach Reizner     2017-08-14  819                         int fd 
= vfd_fds[i];
e3c760a99cdc2d Zach Reizner     2017-08-14  820  
e3c760a99cdc2d Zach Reizner     2017-08-14  821                         if (fd 
< 0)
e3c760a99cdc2d Zach Reizner     2017-08-14  822                                 
break;
e3c760a99cdc2d Zach Reizner     2017-08-14  823  
e3c760a99cdc2d Zach Reizner     2017-08-14  824                         
vfd_file = fdget(vfd_fds[i]);
e3c760a99cdc2d Zach Reizner     2017-08-14  825                         if 
(!vfd_file.file) {
e3c760a99cdc2d Zach Reizner     2017-08-14  826                                 
ret = -EBADFD;
e3c760a99cdc2d Zach Reizner     2017-08-14  827                                 
goto put_files;
e3c760a99cdc2d Zach Reizner     2017-08-14  828                         }
e3c760a99cdc2d Zach Reizner     2017-08-14  829  
e3c760a99cdc2d Zach Reizner     2017-08-14  830                         if 
(vfd_file.file->f_op == &virtwl_vfd_fops) {
e3c760a99cdc2d Zach Reizner     2017-08-14  831                                 
vfd_files[i] = vfd_file;
e3c760a99cdc2d Zach Reizner     2017-08-14  832  
e3c760a99cdc2d Zach Reizner     2017-08-14  833                                 
vfds[i] = vfd_file.file->private_data;
e3c760a99cdc2d Zach Reizner     2017-08-14  834                                 
if (vfds[i] && vfds[i]->id) {
e3c760a99cdc2d Zach Reizner     2017-08-14  835                                 
        vfd_count++;
e3c760a99cdc2d Zach Reizner     2017-08-14  836                                 
        continue;
e3c760a99cdc2d Zach Reizner     2017-08-14  837                                 
}
e3c760a99cdc2d Zach Reizner     2017-08-14  838  
e3c760a99cdc2d Zach Reizner     2017-08-14  839                                 
ret = -EINVAL;
e3c760a99cdc2d Zach Reizner     2017-08-14  840                                 
goto put_files;
e3c760a99cdc2d Zach Reizner     2017-08-14  841                         } else {
e3c760a99cdc2d Zach Reizner     2017-08-14  842                                 
struct dma_buf *dma_buf = ERR_PTR(-EINVAL);
4250dbcb9e0e98 David Stevens    2020-04-22  843                                 
struct dma_fence *dma_fence = ERR_PTR(-EINVAL);
4250dbcb9e0e98 David Stevens    2020-04-22  844                                 
bool handled = false;
4250dbcb9e0e98 David Stevens    2020-04-22  845  
e3c760a99cdc2d Zach Reizner     2017-08-14  846  #ifdef SEND_VIRTGPU_RESOURCES
e3c760a99cdc2d Zach Reizner     2017-08-14  847                                 
dma_buf = dma_buf_get(vfd_fds[i]);
4250dbcb9e0e98 David Stevens    2020-04-22  848                                 
dma_fence = vi->use_send_vfd_v2
4250dbcb9e0e98 David Stevens    2020-04-22  849                                 
        ? sync_file_get_fence(vfd_fds[i])
4250dbcb9e0e98 David Stevens    2020-04-22  850                                 
        : ERR_PTR(-EINVAL);
4250dbcb9e0e98 David Stevens    2020-04-22  851                                 
handled = !IS_ERR(dma_buf) ||
4250dbcb9e0e98 David Stevens    2020-04-22  852                                 
          !IS_ERR(dma_fence);
4250dbcb9e0e98 David Stevens    2020-04-22  853  
e3c760a99cdc2d Zach Reizner     2017-08-14  854                                 
if (!IS_ERR(dma_buf)) {
e3c760a99cdc2d Zach Reizner     2017-08-14  855                                 
        virtgpu_dma_bufs[i] = dma_buf;
4250dbcb9e0e98 David Stevens    2020-04-22  856                                 
} else {
4250dbcb9e0e98 David Stevens    2020-04-22  857                                 
        virtgpu_dma_fence[i] = dma_fence;
4250dbcb9e0e98 David Stevens    2020-04-22  858                                 
}
4250dbcb9e0e98 David Stevens    2020-04-22  859  
e3c760a99cdc2d Zach Reizner     2017-08-14  860                                 
foreign_id = true;
e3c760a99cdc2d Zach Reizner     2017-08-14  861                                 
vfd_count++;
e3c760a99cdc2d Zach Reizner     2017-08-14  862  #endif
e3c760a99cdc2d Zach Reizner     2017-08-14  863                                 
fdput(vfd_file);
4250dbcb9e0e98 David Stevens    2020-04-22  864                                 
if (!handled) {
4250dbcb9e0e98 David Stevens    2020-04-22  865                                 
        ret = IS_ERR(dma_buf) ?
4250dbcb9e0e98 David Stevens    2020-04-22  866                                 
                PTR_ERR(dma_buf) :
4250dbcb9e0e98 David Stevens    2020-04-22  867                                 
                PTR_ERR(dma_fence);
e3c760a99cdc2d Zach Reizner     2017-08-14  868                                 
        goto put_files;
e3c760a99cdc2d Zach Reizner     2017-08-14  869                                 
}
e3c760a99cdc2d Zach Reizner     2017-08-14  870                         }
e3c760a99cdc2d Zach Reizner     2017-08-14  871                 }
4250dbcb9e0e98 David Stevens    2020-04-22  872         }
e3c760a99cdc2d Zach Reizner     2017-08-14  873  
e3c760a99cdc2d Zach Reizner     2017-08-14  874         /* Empty writes always 
succeed. */
e3c760a99cdc2d Zach Reizner     2017-08-14  875         if (len == 0 && 
vfd_count == 0)
e3c760a99cdc2d Zach Reizner     2017-08-14  876                 return 0;
e3c760a99cdc2d Zach Reizner     2017-08-14  877  
e3c760a99cdc2d Zach Reizner     2017-08-14  878         vfd_ids_size = 
vfd_count * sizeof(__le32);
e3c760a99cdc2d Zach Reizner     2017-08-14  879  #ifdef SEND_VIRTGPU_RESOURCES
e3c760a99cdc2d Zach Reizner     2017-08-14  880         if (foreign_id) {
4250dbcb9e0e98 David Stevens    2020-04-22  881                 vfd_ids_size = 
vfd_count * (vi->use_send_vfd_v2
4250dbcb9e0e98 David Stevens    2020-04-22  882                         ? 
sizeof(struct virtio_wl_ctrl_vfd_send_vfd_v2)
4250dbcb9e0e98 David Stevens    2020-04-22  883                         : 
sizeof(struct virtio_wl_ctrl_vfd_send_vfd));
e3c760a99cdc2d Zach Reizner     2017-08-14  884         }
e3c760a99cdc2d Zach Reizner     2017-08-14  885  #endif
e3c760a99cdc2d Zach Reizner     2017-08-14  886         ctrl_send_size = 
sizeof(*ctrl_send) + vfd_ids_size + len;
300b775fa1ab25 Suleiman Souhlal 2021-06-08  887         vmalloced = false;
300b775fa1ab25 Suleiman Souhlal 2021-06-08  888         if (ctrl_send_size < 
PAGE_SIZE)
e3c760a99cdc2d Zach Reizner     2017-08-14 @889                 ctrl_send = 
kzalloc(ctrl_send_size, GFP_KERNEL);
300b775fa1ab25 Suleiman Souhlal 2021-06-08  890         else {
300b775fa1ab25 Suleiman Souhlal 2021-06-08  891                 vmalloced = 
true;
300b775fa1ab25 Suleiman Souhlal 2021-06-08 @892                 ctrl_send = 
vzalloc(ctrl_send_size);
300b775fa1ab25 Suleiman Souhlal 2021-06-08  893         }
e3c760a99cdc2d Zach Reizner     2017-08-14  894         if (!ctrl_send) {
e3c760a99cdc2d Zach Reizner     2017-08-14  895                 ret = -ENOMEM;
e3c760a99cdc2d Zach Reizner     2017-08-14  896                 goto put_files;
e3c760a99cdc2d Zach Reizner     2017-08-14  897         }
e3c760a99cdc2d Zach Reizner     2017-08-14  898  
e3c760a99cdc2d Zach Reizner     2017-08-14  899         vfd_ids = (u8 
*)ctrl_send + sizeof(*ctrl_send);
e3c760a99cdc2d Zach Reizner     2017-08-14  900         out_buffer = (u8 
*)ctrl_send + ctrl_send_size - len;
e3c760a99cdc2d Zach Reizner     2017-08-14  901  
e3c760a99cdc2d Zach Reizner     2017-08-14  902         ctrl_send->hdr.type = 
VIRTIO_WL_CMD_VFD_SEND;
e3c760a99cdc2d Zach Reizner     2017-08-14  903  #ifdef SEND_VIRTGPU_RESOURCES
e3c760a99cdc2d Zach Reizner     2017-08-14  904         if (foreign_id) {
4250dbcb9e0e98 David Stevens    2020-04-22  905                 struct 
virtio_wl_ctrl_vfd_send_vfd *v1 = NULL;
4250dbcb9e0e98 David Stevens    2020-04-22  906                 struct 
virtio_wl_ctrl_vfd_send_vfd_v2 *v2 = NULL;
4250dbcb9e0e98 David Stevens    2020-04-22  907  
4250dbcb9e0e98 David Stevens    2020-04-22  908                 if 
(vi->use_send_vfd_v2)
4250dbcb9e0e98 David Stevens    2020-04-22  909                         v2 = 
(struct virtio_wl_ctrl_vfd_send_vfd_v2 *) vfd_ids;
4250dbcb9e0e98 David Stevens    2020-04-22  910                 else
4250dbcb9e0e98 David Stevens    2020-04-22  911                         v1 = 
(struct virtio_wl_ctrl_vfd_send_vfd *) vfd_ids;
4250dbcb9e0e98 David Stevens    2020-04-22  912  
e3c760a99cdc2d Zach Reizner     2017-08-14  913                 
ctrl_send->hdr.type = VIRTIO_WL_CMD_VFD_SEND_FOREIGN_ID;
4250dbcb9e0e98 David Stevens    2020-04-22  914                 ret = 
encode_vfd_ids_foreign(vfds,
4250dbcb9e0e98 David Stevens    2020-04-22  915                         
virtgpu_dma_bufs, virtgpu_dma_fence, vfd_count,
4250dbcb9e0e98 David Stevens    2020-04-22  916                         v1, v2);
e3c760a99cdc2d Zach Reizner     2017-08-14  917         } else {
e3c760a99cdc2d Zach Reizner     2017-08-14  918                 ret = 
encode_vfd_ids(vfds, vfd_count, (__le32 *)vfd_ids);
e3c760a99cdc2d Zach Reizner     2017-08-14  919         }
e3c760a99cdc2d Zach Reizner     2017-08-14  920  #else
e3c760a99cdc2d Zach Reizner     2017-08-14  921         ret = 
encode_vfd_ids(vfds, vfd_count, (__le32 *)vfd_ids);
e3c760a99cdc2d Zach Reizner     2017-08-14  922  #endif
e3c760a99cdc2d Zach Reizner     2017-08-14  923         if (ret)
e3c760a99cdc2d Zach Reizner     2017-08-14  924                 goto 
free_ctrl_send;
e3c760a99cdc2d Zach Reizner     2017-08-14  925         ctrl_send->vfd_id = 
vfd->id;
e3c760a99cdc2d Zach Reizner     2017-08-14  926         ctrl_send->vfd_count = 
vfd_count;
e3c760a99cdc2d Zach Reizner     2017-08-14  927  
e3c760a99cdc2d Zach Reizner     2017-08-14  928         if 
(copy_from_user(out_buffer, buffer, len)) {
e3c760a99cdc2d Zach Reizner     2017-08-14  929                 ret = -EFAULT;
e3c760a99cdc2d Zach Reizner     2017-08-14  930                 goto 
free_ctrl_send;
e3c760a99cdc2d Zach Reizner     2017-08-14  931         }
e3c760a99cdc2d Zach Reizner     2017-08-14  932  
e3c760a99cdc2d Zach Reizner     2017-08-14  933         
init_completion(&finish_completion);
300b775fa1ab25 Suleiman Souhlal 2021-06-08  934         if (!vmalloced) {
e3c760a99cdc2d Zach Reizner     2017-08-14  935                 
sg_init_one(&out_sg, ctrl_send, ctrl_send_size);
300b775fa1ab25 Suleiman Souhlal 2021-06-08  936                 
sg_init_one(&in_sg, ctrl_send,
300b775fa1ab25 Suleiman Souhlal 2021-06-08  937                     
sizeof(struct virtio_wl_ctrl_hdr));
e3c760a99cdc2d Zach Reizner     2017-08-14  938                 ret = 
vq_queue_out(vi, &out_sg, &in_sg, &finish_completion,
e3c760a99cdc2d Zach Reizner     2017-08-14  939                     
filp->f_flags & O_NONBLOCK);
300b775fa1ab25 Suleiman Souhlal 2021-06-08  940         } else {
300b775fa1ab25 Suleiman Souhlal 2021-06-08  941                 area = 
find_vm_area(ctrl_send);
300b775fa1ab25 Suleiman Souhlal 2021-06-08  942                 ret = 
sg_alloc_table_from_pages(&sgt, area->pages,
300b775fa1ab25 Suleiman Souhlal 2021-06-08  943                     
area->nr_pages, 0, ctrl_send_size, GFP_KERNEL);
e3c760a99cdc2d Zach Reizner     2017-08-14  944                 if (ret)
e3c760a99cdc2d Zach Reizner     2017-08-14  945                         goto 
free_ctrl_send;
e3c760a99cdc2d Zach Reizner     2017-08-14  946  
300b775fa1ab25 Suleiman Souhlal 2021-06-08  947                 
sg_init_table(&in_sg, 1);
300b775fa1ab25 Suleiman Souhlal 2021-06-08  948                 
sg_set_page(&in_sg, area->pages[0],
300b775fa1ab25 Suleiman Souhlal 2021-06-08  949                     
sizeof(struct virtio_wl_ctrl_hdr), 0);
300b775fa1ab25 Suleiman Souhlal 2021-06-08  950  
300b775fa1ab25 Suleiman Souhlal 2021-06-08  951                 ret = 
vq_queue_out(vi, sgt.sgl, &in_sg, &finish_completion,
300b775fa1ab25 Suleiman Souhlal 2021-06-08  952                     
filp->f_flags & O_NONBLOCK);
300b775fa1ab25 Suleiman Souhlal 2021-06-08  953         }
300b775fa1ab25 Suleiman Souhlal 2021-06-08  954         if (ret)
300b775fa1ab25 Suleiman Souhlal 2021-06-08  955                 goto free_sgt;
300b775fa1ab25 Suleiman Souhlal 2021-06-08  956  
e3c760a99cdc2d Zach Reizner     2017-08-14  957         
wait_for_completion(&finish_completion);
e3c760a99cdc2d Zach Reizner     2017-08-14  958  
e3c760a99cdc2d Zach Reizner     2017-08-14  959         ret = 
virtwl_resp_err(ctrl_send->hdr.type);
e3c760a99cdc2d Zach Reizner     2017-08-14  960  
300b775fa1ab25 Suleiman Souhlal 2021-06-08  961  free_sgt:
300b775fa1ab25 Suleiman Souhlal 2021-06-08  962         if (vmalloced)
300b775fa1ab25 Suleiman Souhlal 2021-06-08  963                 
sg_free_table(&sgt);
e3c760a99cdc2d Zach Reizner     2017-08-14  964  free_ctrl_send:
300b775fa1ab25 Suleiman Souhlal 2021-06-08 @965         kvfree(ctrl_send);
e3c760a99cdc2d Zach Reizner     2017-08-14  966  put_files:
e3c760a99cdc2d Zach Reizner     2017-08-14  967         for (i = 0; i < 
VIRTWL_SEND_MAX_ALLOCS; i++) {
e3c760a99cdc2d Zach Reizner     2017-08-14  968                 if 
(vfd_files[i].file)
e3c760a99cdc2d Zach Reizner     2017-08-14  969                         
fdput(vfd_files[i]);
e3c760a99cdc2d Zach Reizner     2017-08-14  970  #ifdef SEND_VIRTGPU_RESOURCES
e3c760a99cdc2d Zach Reizner     2017-08-14  971                 if 
(virtgpu_dma_bufs[i])
e3c760a99cdc2d Zach Reizner     2017-08-14  972                         
dma_buf_put(virtgpu_dma_bufs[i]);
4250dbcb9e0e98 David Stevens    2020-04-22  973                 if 
(virtgpu_dma_fence[i])
4250dbcb9e0e98 David Stevens    2020-04-22  974                         
dma_fence_put(virtgpu_dma_fence[i]);
e3c760a99cdc2d Zach Reizner     2017-08-14  975  #endif
e3c760a99cdc2d Zach Reizner     2017-08-14  976         }
e3c760a99cdc2d Zach Reizner     2017-08-14  977         return ret;
e3c760a99cdc2d Zach Reizner     2017-08-14  978  }
e3c760a99cdc2d Zach Reizner     2017-08-14  979  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to