summaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
authorMichael Thalmeier <michael.thalmeier@hale.at>2017-05-19 10:32:09 +0200
committerPeter Chen <peter.chen@nxp.com>2017-05-23 08:36:54 +0800
commitcbb22ebcfb9920380ed69854a7095d497798063d (patch)
tree6576185df1b84ba1c70170967d95ee54a8291a42 /drivers/usb
parent0340ff83cd4475261e7474033a381bc125b45244 (diff)
downloadlinux-cbb22ebcfb9920380ed69854a7095d497798063d.tar.gz
linux-cbb22ebcfb9920380ed69854a7095d497798063d.tar.bz2
linux-cbb22ebcfb9920380ed69854a7095d497798063d.zip
usb: chipidea: core: check before accessing ci_role in ci_role_show
ci_role BUGs when the role is >= CI_ROLE_END. This is the case while the role is changing. Signed-off-by: Michael Thalmeier <michael.thalmeier@hale.at> Signed-off-by: Peter Chen <peter.chen@nxp.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/chipidea/core.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index 9e217b1361ea..fe4fe2440729 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -843,7 +843,10 @@ static ssize_t ci_role_show(struct device *dev, struct device_attribute *attr,
{
struct ci_hdrc *ci = dev_get_drvdata(dev);
- return sprintf(buf, "%s\n", ci_role(ci)->name);
+ if (ci->role != CI_ROLE_END)
+ return sprintf(buf, "%s\n", ci_role(ci)->name);
+
+ return 0;
}
static ssize_t ci_role_store(struct device *dev,