mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 07:10:27 +00:00
media: cec: safely unhook lists in cec_data
smatch warns about data->list not being removed from list: drivers/media/cec/core/cec-adap.c:926 cec_transmit_msg_fh() warn: '&data->list' not removed from list It is a false warning, but it doesn't hurt to make the code more robust and safely unhook data->list and data->xfer_list together with a WARN_ON if this is actually ever needed (this really shouldn't happen). Note that fixing the data->list warning just replaced it with a new similar warning for data->xfer_list, so both needed to be addressed. Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
1a59cd88f5
commit
2ddd033094
@ -342,7 +342,7 @@ static void cec_data_completed(struct cec_data *data)
|
||||
* Without that we would be referring to a closed filehandle.
|
||||
*/
|
||||
if (data->fh)
|
||||
list_del(&data->xfer_list);
|
||||
list_del_init(&data->xfer_list);
|
||||
|
||||
if (data->blocking) {
|
||||
/*
|
||||
@ -898,6 +898,8 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
|
||||
|
||||
if (fh)
|
||||
list_add_tail(&data->xfer_list, &fh->xfer_list);
|
||||
else
|
||||
INIT_LIST_HEAD(&data->xfer_list);
|
||||
|
||||
list_add_tail(&data->list, &adap->transmit_queue);
|
||||
adap->transmit_queue_sz++;
|
||||
@ -923,6 +925,10 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
|
||||
|
||||
/* The transmit completed (possibly with an error) */
|
||||
*msg = data->msg;
|
||||
if (WARN_ON(!list_empty(&data->list)))
|
||||
list_del(&data->list);
|
||||
if (WARN_ON(!list_empty(&data->xfer_list)))
|
||||
list_del(&data->xfer_list);
|
||||
kfree(data);
|
||||
return 0;
|
||||
}
|
||||
|
@ -669,7 +669,7 @@ static int cec_release(struct inode *inode, struct file *filp)
|
||||
|
||||
data->blocking = false;
|
||||
data->fh = NULL;
|
||||
list_del(&data->xfer_list);
|
||||
list_del_init(&data->xfer_list);
|
||||
}
|
||||
mutex_unlock(&adap->lock);
|
||||
while (!list_empty(&fh->msgs)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user