tree:   git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git 
staging-testing
head:   59cc3399efd61fabb7f4aa23d4498bd9b01e5f6d
commit: 9bc79bbcd0c526e3ec7b98e08c5d34648bb3c158 [413/420] Staging: most: add 
MOST driver's aim-cdev module

drivers/staging/most/aim-cdev/cdev.c:128 aim_close() error: dereferencing freed 
memory 'channel'
drivers/staging/most/aim-cdev/cdev.c:191 aim_write() error: we previously 
assumed 'mbo' could be null (see line 170)

git remote add staging 
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
git remote update staging
git checkout 9bc79bbcd0c526e3ec7b98e08c5d34648bb3c158
vim +/channel +128 drivers/staging/most/aim-cdev/cdev.c

9bc79bbcd Christian Gromm 2015-07-24  122               
atomic_dec(&channel->access_ref);
9bc79bbcd Christian Gromm 2015-07-24  123               
device_destroy(aim_class, channel->devno);
9bc79bbcd Christian Gromm 2015-07-24  124               
cdev_del(&channel->cdev);
9bc79bbcd Christian Gromm 2015-07-24  125               
kfifo_free(&channel->fifo);
9bc79bbcd Christian Gromm 2015-07-24  126               
list_del(&channel->list);
9bc79bbcd Christian Gromm 2015-07-24  127               kfree(channel);
9bc79bbcd Christian Gromm 2015-07-24 @128               
ida_simple_remove(&minor_id, MINOR(channel->devno));
9bc79bbcd Christian Gromm 2015-07-24  129               
wake_up_interruptible(&channel->wq);
9bc79bbcd Christian Gromm 2015-07-24  130               return 0;
9bc79bbcd Christian Gromm 2015-07-24  131       }
9bc79bbcd Christian Gromm 2015-07-24  132       
mutex_unlock(&channel->io_mutex);
9bc79bbcd Christian Gromm 2015-07-24  133  
9bc79bbcd Christian Gromm 2015-07-24  134       while (0 != kfifo_out((struct 
kfifo *)&channel->fifo, &mbo, 1))
9bc79bbcd Christian Gromm 2015-07-24  135               most_put_mbo(mbo);
9bc79bbcd Christian Gromm 2015-07-24  136       if (channel->keep_mbo == true)
9bc79bbcd Christian Gromm 2015-07-24  137               
most_put_mbo(channel->stacked_mbo);
9bc79bbcd Christian Gromm 2015-07-24  138       ret = 
most_stop_channel(channel->iface, channel->channel_id);
9bc79bbcd Christian Gromm 2015-07-24  139       
atomic_dec(&channel->access_ref);
9bc79bbcd Christian Gromm 2015-07-24  140       
wake_up_interruptible(&channel->wq);
9bc79bbcd Christian Gromm 2015-07-24  141       return ret;
9bc79bbcd Christian Gromm 2015-07-24  142  }
9bc79bbcd Christian Gromm 2015-07-24  143  
9bc79bbcd Christian Gromm 2015-07-24  144  /**
9bc79bbcd Christian Gromm 2015-07-24  145   * aim_write - implements the 
syscall to write to the device
9bc79bbcd Christian Gromm 2015-07-24  146   * @filp: file pointer
9bc79bbcd Christian Gromm 2015-07-24  147   * @buf: pointer to user buffer
9bc79bbcd Christian Gromm 2015-07-24  148   * @count: number of bytes to write
9bc79bbcd Christian Gromm 2015-07-24  149   * @offset: offset from where to 
start writing
9bc79bbcd Christian Gromm 2015-07-24  150   */
9bc79bbcd Christian Gromm 2015-07-24  151  static ssize_t aim_write(struct file 
*filp, const char __user *buf,
9bc79bbcd Christian Gromm 2015-07-24  152                        size_t count, 
loff_t *offset)
9bc79bbcd Christian Gromm 2015-07-24  153  {
9bc79bbcd Christian Gromm 2015-07-24  154       int ret, err;
9bc79bbcd Christian Gromm 2015-07-24  155       size_t actual_len = 0;
9bc79bbcd Christian Gromm 2015-07-24  156       size_t max_len = 0;
9bc79bbcd Christian Gromm 2015-07-24  157       ssize_t retval;
9bc79bbcd Christian Gromm 2015-07-24  158       struct mbo *mbo;
9bc79bbcd Christian Gromm 2015-07-24  159       struct aim_channel *channel = 
filp->private_data;
9bc79bbcd Christian Gromm 2015-07-24  160  
9bc79bbcd Christian Gromm 2015-07-24  161       mutex_lock(&channel->io_mutex);
9bc79bbcd Christian Gromm 2015-07-24  162       if (unlikely(!channel->dev)) {
9bc79bbcd Christian Gromm 2015-07-24  163               
mutex_unlock(&channel->io_mutex);
9bc79bbcd Christian Gromm 2015-07-24  164               return -EPIPE;
9bc79bbcd Christian Gromm 2015-07-24  165       }
9bc79bbcd Christian Gromm 2015-07-24  166       
mutex_unlock(&channel->io_mutex);
9bc79bbcd Christian Gromm 2015-07-24  167  
9bc79bbcd Christian Gromm 2015-07-24  168       mbo = 
most_get_mbo(channel->iface, channel->channel_id);
9bc79bbcd Christian Gromm 2015-07-24  169  
9bc79bbcd Christian Gromm 2015-07-24 @170       if (!mbo && channel->dev) {
9bc79bbcd Christian Gromm 2015-07-24  171               if ((filp->f_flags & 
O_NONBLOCK))
9bc79bbcd Christian Gromm 2015-07-24  172                       return -EAGAIN;
9bc79bbcd Christian Gromm 2015-07-24  173               if 
(wait_event_interruptible(
9bc79bbcd Christian Gromm 2015-07-24  174                           channel->wq,
9bc79bbcd Christian Gromm 2015-07-24  175                           (mbo = 
most_get_mbo(channel->iface,
9bc79bbcd Christian Gromm 2015-07-24  176                                       
        channel->channel_id)) ||
9bc79bbcd Christian Gromm 2015-07-24  177                           
(channel->dev == NULL)))
9bc79bbcd Christian Gromm 2015-07-24  178                       return 
-ERESTARTSYS;
9bc79bbcd Christian Gromm 2015-07-24  179       }
9bc79bbcd Christian Gromm 2015-07-24  180  
9bc79bbcd Christian Gromm 2015-07-24  181       mutex_lock(&channel->io_mutex);
9bc79bbcd Christian Gromm 2015-07-24  182       if (unlikely(!channel->dev)) {
9bc79bbcd Christian Gromm 2015-07-24  183               
mutex_unlock(&channel->io_mutex);
9bc79bbcd Christian Gromm 2015-07-24  184               err = -EPIPE;
9bc79bbcd Christian Gromm 2015-07-24  185               goto error;
9bc79bbcd Christian Gromm 2015-07-24  186       }
9bc79bbcd Christian Gromm 2015-07-24  187       
mutex_unlock(&channel->io_mutex);
9bc79bbcd Christian Gromm 2015-07-24  188  
9bc79bbcd Christian Gromm 2015-07-24  189       max_len = 
channel->cfg->buffer_size;
9bc79bbcd Christian Gromm 2015-07-24  190       actual_len = min(count, 
max_len);
9bc79bbcd Christian Gromm 2015-07-24 @191       mbo->buffer_length = actual_len;
9bc79bbcd Christian Gromm 2015-07-24  192  
9bc79bbcd Christian Gromm 2015-07-24  193       retval = 
copy_from_user(mbo->virt_address, buf, mbo->buffer_length);
9bc79bbcd Christian Gromm 2015-07-24  194       if (retval) {

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
_______________________________________________
kbuild mailing list
kbuild@lists.01.org
https://lists.01.org/mailman/listinfo/kbuild

Reply via email to