diff options
author | Szymon Janc <szymon.janc@tieto.com> | 2012-10-25 17:29:45 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2012-11-20 00:09:25 +0100 |
commit | 60ad07ab6bc86f48b6ebda1788d79ca5f88d824c (patch) | |
tree | 5a2947353b130138c3258cc135d596414aed667a | |
parent | 16a78e9fed5e8baa8480ae3413f4328c4537c599 (diff) | |
download | op-kernel-dev-60ad07ab6bc86f48b6ebda1788d79ca5f88d824c.zip op-kernel-dev-60ad07ab6bc86f48b6ebda1788d79ca5f88d824c.tar.gz |
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>
-rw-r--r-- | drivers/nfc/pn533.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/nfc/pn533.c b/drivers/nfc/pn533.c index 97c440a..328f2b6 100644 --- a/drivers/nfc/pn533.c +++ b/drivers/nfc/pn533.c @@ -698,13 +698,14 @@ static void pn533_wq_cmd(struct work_struct *work) cmd = list_first_entry(&dev->cmd_queue, struct pn533_cmd, queue); + list_del(&cmd->queue); + mutex_unlock(&dev->cmd_lock); __pn533_send_cmd_frame_async(dev, cmd->out_frame, cmd->in_frame, cmd->in_frame_len, cmd->cmd_complete, cmd->arg, cmd->flags); - list_del(&cmd->queue); kfree(cmd); } |