projects
/
platform
/
kernel
/
linux-rpi.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
c81935d
)
rpmsg: char: Add mutex protection for rpmsg_eptdev_open()
author
Shengjiu Wang
<shengjiu.wang@nxp.com>
Sat, 21 May 2022 03:35:05 +0000
(11:35 +0800)
committer
Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Wed, 17 Aug 2022 12:24:03 +0000
(14:24 +0200)
[ Upstream commit
abe13e9a561d6b3e82b21362c0d6dd3ecd8a5b13
]
There is no mutex protection for rpmsg_eptdev_open(),
especially for eptdev->ept read and write operation.
It may cause issues when multiple instances call
rpmsg_eptdev_open() in parallel,the return state
may be success or EBUSY.
Fixes:
964e8bedd5a1
("rpmsg: char: Return an error if device already open")
Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Link:
https://lore.kernel.org/r/1653104105-16779-1-git-send-email-shengjiu.wang@nxp.com
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/rpmsg/rpmsg_char.c
patch
|
blob
|
history
diff --git
a/drivers/rpmsg/rpmsg_char.c
b/drivers/rpmsg/rpmsg_char.c
index
49dd5a2
..
88c985f
100644
(file)
--- a/
drivers/rpmsg/rpmsg_char.c
+++ b/
drivers/rpmsg/rpmsg_char.c
@@
-127,8
+127,11
@@
static int rpmsg_eptdev_open(struct inode *inode, struct file *filp)
struct rpmsg_device *rpdev = eptdev->rpdev;
struct device *dev = &eptdev->dev;
- if (eptdev->ept)
+ mutex_lock(&eptdev->ept_lock);
+ if (eptdev->ept) {
+ mutex_unlock(&eptdev->ept_lock);
return -EBUSY;
+ }
get_device(dev);
@@
-136,11
+139,13
@@
static int rpmsg_eptdev_open(struct inode *inode, struct file *filp)
if (!ept) {
dev_err(dev, "failed to open %s\n", eptdev->chinfo.name);
put_device(dev);
+ mutex_unlock(&eptdev->ept_lock);
return -EINVAL;
}
eptdev->ept = ept;
filp->private_data = eptdev;
+ mutex_unlock(&eptdev->ept_lock);
return 0;
}