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
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel