2010-08-28 12:57:59

by Stefan Achatz

[permalink] [raw]
Subject: [PATCH] HID: roccat: Fixing race condition on initialization

Fixed raced condition where event occurs before drvdata is set.

Signed-off-by: Stefan Achatz <[email protected]>
---
drivers/hid/hid-roccat-kone.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/hid/hid-roccat-kone.c b/drivers/hid/hid-roccat-kone.c
index f776957..cfeab56 100644
--- a/drivers/hid/hid-roccat-kone.c
+++ b/drivers/hid/hid-roccat-kone.c
@@ -966,6 +966,10 @@ static int kone_raw_event(struct hid_device *hdev, struct hid_report *report,
struct kone_device *kone = hid_get_drvdata(hdev);
struct kone_mouse_event *event = (struct kone_mouse_event *)data;

+ /* possible race condition on initialization */
+ if (!kone)
+ return 0;
+
/* keyboard events are always processed by default handler */
if (size != sizeof(struct kone_mouse_event))
return 0;
--
1.7.2.2



2010-08-28 18:18:22

by Jiri Slaby

[permalink] [raw]
Subject: Re: [PATCH] HID: roccat: Fixing race condition on initialization

On 08/28/2010 02:57 PM, Stefan Achatz wrote:
> Fixed raced condition where event occurs before drvdata is set.
>
> Signed-off-by: Stefan Achatz <[email protected]>
> ---
> drivers/hid/hid-roccat-kone.c | 4 ++++
> 1 files changed, 4 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/hid/hid-roccat-kone.c b/drivers/hid/hid-roccat-kone.c
> index f776957..cfeab56 100644
> --- a/drivers/hid/hid-roccat-kone.c
> +++ b/drivers/hid/hid-roccat-kone.c
> @@ -966,6 +966,10 @@ static int kone_raw_event(struct hid_device *hdev, struct hid_report *report,
> struct kone_device *kone = hid_get_drvdata(hdev);
> struct kone_mouse_event *event = (struct kone_mouse_event *)data;
>
> + /* possible race condition on initialization */
> + if (!kone)
> + return 0;

This kind of "protection" caused much headache in the tty layer in the
past. If there is such a problem, please fix the initialization code
instead.

What sort of problems you are seeing?

thanks,
--
js

2010-08-28 22:11:53

by Stefan Achatz

[permalink] [raw]
Subject: Re: [PATCH] HID: roccat: Fixing race condition on initialization

Am Samstag, den 28.08.2010, 20:18 +0200 schrieb Jiri Slaby:
> On 08/28/2010 02:57 PM, Stefan Achatz wrote:
> > Fixed raced condition where event occurs before drvdata is set.
> >
> > Signed-off-by: Stefan Achatz <[email protected]>
> > ---
> > drivers/hid/hid-roccat-kone.c | 4 ++++
> > 1 files changed, 4 insertions(+), 0 deletions(-)
> >
> > diff --git a/drivers/hid/hid-roccat-kone.c b/drivers/hid/hid-roccat-kone.c
> > index f776957..cfeab56 100644
> > --- a/drivers/hid/hid-roccat-kone.c
> > +++ b/drivers/hid/hid-roccat-kone.c
> > @@ -966,6 +966,10 @@ static int kone_raw_event(struct hid_device *hdev, struct hid_report *report,
> > struct kone_device *kone = hid_get_drvdata(hdev);
> > struct kone_mouse_event *event = (struct kone_mouse_event *)data;
> >
> > + /* possible race condition on initialization */
> > + if (!kone)
> > + return 0;
>
> This kind of "protection" caused much headache in the tty layer in the
> past. If there is such a problem, please fix the initialization code
> instead.
>
> What sort of problems you are seeing?
>
> thanks,

After investigating and now fully understanding the issue I want to draw
back this patch.
The issue was no race condition in the first place, but an erroneous
code I wrote for another mouse. This is a injudicious crossport of a
half baked fix for code that didn't suffer from the problem because the
next 3 lines already do the right thing for this case.
Sorry.