diff options
author | Dan Carpenter <dan.carpenter@oracle.com> | 2017-01-20 23:53:40 -0500 |
---|---|---|
committer | Bjorn Andersson <bjorn.andersson@linaro.org> | 2017-01-30 16:20:24 -0500 |
commit | 0abd6bdde04f3f7e9a1b76d474f3d9e804ef1867 (patch) | |
tree | 7400ddfaf6948eaf48e1e3a8a5bd83438090a48c | |
parent | b70ea16d2d55db5d4b59d615d002046647e49a1e (diff) |
rpmsg: unlock on error in rpmsg_eptdev_read()
We should unlock before returning if skb_dequeue() returns a NULL.
Fixes: c0cdc19f84a4 ("rpmsg: Driver for user space endpoint interface")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
-rw-r--r-- | drivers/rpmsg/rpmsg_char.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c index a78b6b79cea4..0ca2ccc09ca6 100644 --- a/drivers/rpmsg/rpmsg_char.c +++ b/drivers/rpmsg/rpmsg_char.c | |||
@@ -209,11 +209,10 @@ static ssize_t rpmsg_eptdev_read(struct file *filp, char __user *buf, | |||
209 | } | 209 | } |
210 | 210 | ||
211 | skb = skb_dequeue(&eptdev->queue); | 211 | skb = skb_dequeue(&eptdev->queue); |
212 | spin_unlock_irqrestore(&eptdev->queue_lock, flags); | ||
212 | if (!skb) | 213 | if (!skb) |
213 | return -EFAULT; | 214 | return -EFAULT; |
214 | 215 | ||
215 | spin_unlock_irqrestore(&eptdev->queue_lock, flags); | ||
216 | |||
217 | use = min_t(size_t, len, skb->len); | 216 | use = min_t(size_t, len, skb->len); |
218 | if (copy_to_user(buf, skb->data, use)) | 217 | if (copy_to_user(buf, skb->data, use)) |
219 | use = -EFAULT; | 218 | use = -EFAULT; |