Hi Arnaud,

url:    
https://github.com/0day-ci/linux/commits/Arnaud-Pouliquen/introduce-generic-IOCTL-interface-for-RPMsg-channels-management/20201222-190521
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
8653b778e454a7708847aeafe689bce07aeeb94e
config: x86_64-randconfig-m001-20201221 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

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

smatch warnings:
drivers/rpmsg/virtio_rpmsg_bus.c:978 rpmsg_probe() error: uninitialized symbol 
'vch'.
drivers/rpmsg/virtio_rpmsg_bus.c:979 rpmsg_probe() error: uninitialized symbol 
'rpdev_ctrl'.

vim +/vch +978 drivers/rpmsg/virtio_rpmsg_bus.c

bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  846  static int 
rpmsg_probe(struct virtio_device *vdev)
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  847  {
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  848    vq_callback_t *vq_cbs[] 
= { rpmsg_recv_done, rpmsg_xmit_done };
f7ad26ff952b3ca Stefan Hajnoczi      2015-12-17  849    static const char * 
const names[] = { "input", "output" };
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  850    struct virtqueue 
*vqs[2];
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  851    struct virtproc_info 
*vrp;
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  852    struct 
virtio_rpmsg_channel *vch;
                                                                                
     ^^^
532ff49403675dd Arnaud Pouliquen     2020-12-22  853    struct rpmsg_device 
*rpdev_ns, *rpdev_ctrl;
                                                                                
        ^^^^^^^^^^

bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  854    void *bufs_va;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  855    int err = 0, i;
b1b9891441fa33f Suman Anna           2014-09-16  856    size_t total_buf_space;
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  857    bool notify;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  858  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  859    vrp = 
kzalloc(sizeof(*vrp), GFP_KERNEL);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  860    if (!vrp)
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  861            return -ENOMEM;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  862  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  863    vrp->vdev = vdev;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  864  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  865    
idr_init(&vrp->endpoints);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  866    
mutex_init(&vrp->endpoints_lock);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  867    
mutex_init(&vrp->tx_lock);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  868    
init_waitqueue_head(&vrp->sendq);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  869  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  870    /* We expect two 
virtqueues, rx and tx (and in this order) */
9b2bbdb22758845 Michael S. Tsirkin   2017-03-06  871    err = 
virtio_find_vqs(vdev, 2, vqs, vq_cbs, names, NULL);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  872    if (err)
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  873            goto free_vrp;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  874  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  875    vrp->rvq = vqs[0];
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  876    vrp->svq = vqs[1];
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  877  
b1b9891441fa33f Suman Anna           2014-09-16  878    /* we expect symmetric 
tx/rx vrings */
b1b9891441fa33f Suman Anna           2014-09-16  879    
WARN_ON(virtqueue_get_vring_size(vrp->rvq) !=
b1b9891441fa33f Suman Anna           2014-09-16  880            
virtqueue_get_vring_size(vrp->svq));
b1b9891441fa33f Suman Anna           2014-09-16  881  
b1b9891441fa33f Suman Anna           2014-09-16  882    /* we need less buffers 
if vrings are small */
b1b9891441fa33f Suman Anna           2014-09-16  883    if 
(virtqueue_get_vring_size(vrp->rvq) < MAX_RPMSG_NUM_BUFS / 2)
b1b9891441fa33f Suman Anna           2014-09-16  884            vrp->num_bufs = 
virtqueue_get_vring_size(vrp->rvq) * 2;
b1b9891441fa33f Suman Anna           2014-09-16  885    else
b1b9891441fa33f Suman Anna           2014-09-16  886            vrp->num_bufs = 
MAX_RPMSG_NUM_BUFS;
b1b9891441fa33f Suman Anna           2014-09-16  887  
f93848f9eeb0f87 Loic Pallardy        2017-03-28  888    vrp->buf_size = 
MAX_RPMSG_BUF_SIZE;
f93848f9eeb0f87 Loic Pallardy        2017-03-28  889  
f93848f9eeb0f87 Loic Pallardy        2017-03-28  890    total_buf_space = 
vrp->num_bufs * vrp->buf_size;
b1b9891441fa33f Suman Anna           2014-09-16  891  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  892    /* allocate coherent 
memory for the buffers */
d999b622fcfb392 Loic Pallardy        2019-01-10  893    bufs_va = 
dma_alloc_coherent(vdev->dev.parent,
b1b9891441fa33f Suman Anna           2014-09-16  894                            
     total_buf_space, &vrp->bufs_dma,
b1b9891441fa33f Suman Anna           2014-09-16  895                            
     GFP_KERNEL);
3119b487e03650b Wei Yongjun          2013-04-29  896    if (!bufs_va) {
3119b487e03650b Wei Yongjun          2013-04-29  897            err = -ENOMEM;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  898            goto vqs_del;
3119b487e03650b Wei Yongjun          2013-04-29  899    }
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  900  
de4064af76537f1 Suman Anna           2018-10-23  901    dev_dbg(&vdev->dev, 
"buffers: va %pK, dma %pad\n",
8d95b322ba34b15 Anna, Suman          2016-08-12  902            bufs_va, 
&vrp->bufs_dma);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  903  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  904    /* half of the buffers 
is dedicated for RX */
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  905    vrp->rbufs = bufs_va;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  906  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  907    /* and half is 
dedicated for TX */
b1b9891441fa33f Suman Anna           2014-09-16  908    vrp->sbufs = bufs_va + 
total_buf_space / 2;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  909  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  910    /* set up the receive 
buffers */
b1b9891441fa33f Suman Anna           2014-09-16  911    for (i = 0; i < 
vrp->num_bufs / 2; i++) {
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  912            struct 
scatterlist sg;
f93848f9eeb0f87 Loic Pallardy        2017-03-28  913            void *cpu_addr 
= vrp->rbufs + i * vrp->buf_size;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  914  
9dd87c2af651b09 Loic Pallardy        2017-03-28  915            
rpmsg_sg_init(&sg, cpu_addr, vrp->buf_size);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  916  
cee51d69a45b6ce Rusty Russell        2013-03-20  917            err = 
virtqueue_add_inbuf(vrp->rvq, &sg, 1, cpu_addr,
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  918                            
          GFP_KERNEL);
57e1a37347d31c6 Rusty Russell        2012-10-16  919            WARN_ON(err); 
/* sanity check; this can't really happen */
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  920    }
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  921  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  922    /* suppress 
"tx-complete" interrupts */
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  923    
virtqueue_disable_cb(vrp->svq);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  924  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  925    vdev->priv = vrp;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  926  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  927    /* if supported by the 
remote processor, enable the name service */
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  928    if 
(virtio_has_feature(vdev, VIRTIO_RPMSG_F_NS)) {
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  929            vch = 
kzalloc(sizeof(*vch), GFP_KERNEL);

Not initialized if virtio_has_feature() is false.

950a7388f02bf77 Arnaud Pouliquen     2020-11-20  930            if (!vch) {
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  931                    err = 
-ENOMEM;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  932                    goto 
free_coherent;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  933            }
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  934  
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  935            /* Link the 
channel to our vrp */
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  936            vch->vrp = vrp;
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  937  
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  938            /* Assign 
public information to the rpmsg_device */
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  939            rpdev_ns = 
&vch->rpdev;
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  940            rpdev_ns->ops = 
&virtio_rpmsg_ops;
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  941            
rpdev_ns->little_endian = virtio_is_little_endian(vrp->vdev);
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  942  
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  943            
rpdev_ns->dev.parent = &vrp->vdev->dev;
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  944            
rpdev_ns->dev.release = virtio_rpmsg_release_device;
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  945  
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  946            err = 
rpmsg_ns_register_device(rpdev_ns);
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  947            if (err)
950a7388f02bf77 Arnaud Pouliquen     2020-11-20  948                    goto 
free_coherent;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  949    }
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  950  
532ff49403675dd Arnaud Pouliquen     2020-12-22  951    rpdev_ctrl = 
rpmsg_virtio_add_char_dev(vdev);
532ff49403675dd Arnaud Pouliquen     2020-12-22  952    if (IS_ERR(rpdev_ctrl)) 
{
532ff49403675dd Arnaud Pouliquen     2020-12-22  953            err = 
PTR_ERR(rpdev_ctrl);
532ff49403675dd Arnaud Pouliquen     2020-12-22  954            goto 
free_coherent;
532ff49403675dd Arnaud Pouliquen     2020-12-22  955    }
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  956    /*
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  957     * Prepare to kick but 
don't notify yet - we can't do this before
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  958     * device is ready.
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  959     */
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  960    notify = 
virtqueue_kick_prepare(vrp->rvq);
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  961  
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  962    /* From this point on, 
we can notify and get callbacks. */
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  963    
virtio_device_ready(vdev);
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  964  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  965    /* tell the remote 
processor it can start sending messages */
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  966    /*
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  967     * this might be 
concurrent with callbacks, but we are only
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  968     * doing notify, not a 
full kick here, so that's ok.
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  969     */
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  970    if (notify)
71e4b8bf0482fc7 Michael S. Tsirkin   2015-03-12  971            
virtqueue_notify(vrp->rvq);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  972  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  973    dev_info(&vdev->dev, 
"rpmsg host is online\n");
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  974  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  975    return 0;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  976  
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  977  free_coherent:
950a7388f02bf77 Arnaud Pouliquen     2020-11-20 @978    kfree(vch);
                                                        ^^^^^^^^^^^

532ff49403675dd Arnaud Pouliquen     2020-12-22 @979    
kfree(to_virtio_rpmsg_channel(rpdev_ctrl));
                                                                                
      ^^^^^^^^^^

d999b622fcfb392 Loic Pallardy        2019-01-10  980    
dma_free_coherent(vdev->dev.parent, total_buf_space,
eeb0074f36d1ab0 Fernando Guzman Lugo 2012-08-29  981                      
bufs_va, vrp->bufs_dma);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  982  vqs_del:
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  983    
vdev->config->del_vqs(vrp->vdev);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  984  free_vrp:
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  985    kfree(vrp);
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  986    return err;
bcabbccabffe732 Ohad Ben-Cohen       2011-10-20  987  }

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

Attachment: .config.gz
Description: application/gzip

Reply via email to