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; |
