NFC: pn533: Fix missing lock while operating on commands list
In pn533_wq_cmd command was removed from list without cmd_lock held (race with pn533_send_cmd_frame_async) which could lead to list corruption. Delete command from list before releasing lock. Signed-off-by: Szymon Janc <szymon.janc@tieto.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:

committed by
Samuel Ortiz

parent
16a78e9fed
commit
60ad07ab6b
@@ -698,13 +698,14 @@ static void pn533_wq_cmd(struct work_struct *work)
|
|||||||
|
|
||||||
cmd = list_first_entry(&dev->cmd_queue, struct pn533_cmd, queue);
|
cmd = list_first_entry(&dev->cmd_queue, struct pn533_cmd, queue);
|
||||||
|
|
||||||
|
list_del(&cmd->queue);
|
||||||
|
|
||||||
mutex_unlock(&dev->cmd_lock);
|
mutex_unlock(&dev->cmd_lock);
|
||||||
|
|
||||||
__pn533_send_cmd_frame_async(dev, cmd->out_frame, cmd->in_frame,
|
__pn533_send_cmd_frame_async(dev, cmd->out_frame, cmd->in_frame,
|
||||||
cmd->in_frame_len, cmd->cmd_complete,
|
cmd->in_frame_len, cmd->cmd_complete,
|
||||||
cmd->arg, cmd->flags);
|
cmd->arg, cmd->flags);
|
||||||
|
|
||||||
list_del(&cmd->queue);
|
|
||||||
kfree(cmd);
|
kfree(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user