[<prev] [next>] [day] [month] [year] [list]
Message-Id: <1377762948-13545-1-git-send-email-oleksandr.kozaruk@globallogic.com>
Date: Thu, 29 Aug 2013 10:55:48 +0300
From: Oleksandr Kozaruk <alkhozar@...il.com>
To: gregkh@...uxfoundation.org, chao.bi@...el.com,
yongjun_wei@...ndmicro.com.cn
Cc: linux-kernel@...r.kernel.org
Subject: [PATCH] drivers: misc: ti-st: fix potential race if st_kim_start fails
If st_kim_start() fails registered protocols should be removed. This is
done by calling st_reg_complete(), which as comment states is called
with spin lock held. But in st_register() when st_kim_start fails it
is called without holding spin lock, creating possibility of concurrent
access to st_gdata data members.
Hold spin lock while calling st_reg_complete if st_kim_start() fails.
Signed-off-by: Oleksandr Kozaruk <oleksandr.kozaruk@...ballogic.com>
---
drivers/misc/ti-st/st_core.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/misc/ti-st/st_core.c b/drivers/misc/ti-st/st_core.c
index 0a14280..8d64b68 100644
--- a/drivers/misc/ti-st/st_core.c
+++ b/drivers/misc/ti-st/st_core.c
@@ -562,7 +562,9 @@ long st_register(struct st_proto_s *new_proto)
if ((st_gdata->protos_registered != ST_EMPTY) &&
(test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
pr_err(" KIM failure complete callback ");
+ spin_lock_irqsave(&st_gdata->lock, flags);
st_reg_complete(st_gdata, err);
+ spin_unlock_irqrestore(&st_gdata->lock, flags);
clear_bit(ST_REG_PENDING, &st_gdata->st_state);
}
return -EINVAL;
--
1.8.1.2
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists