* [PATCH] rfkill: Use mutex_lock() at register and add sanity check
@ 2007-10-28 14:16 Michael Buesch
2007-10-28 15:03 ` Ivo van Doorn
0 siblings, 1 reply; 2+ messages in thread
From: Michael Buesch @ 2007-10-28 14:16 UTC (permalink / raw)
To: John Linville; +Cc: Ivo van Doorn, linux-wireless
Replace mutex_lock_interruptible() by mutex_lock() in rfkill_register(),
as interruptible doesn't make sense there.
Add a sanity check for rfkill->type, as that's used for an unchecked dereference
in an array and might cause hard to debug crashes if the driver sets this
to an invalid value.
Signed-off-by: Michael Buesch <mb@bu3sch.de>
Index: wireless-2.6/net/rfkill/rfkill.c
===================================================================
--- wireless-2.6.orig/net/rfkill/rfkill.c 2007-10-28 14:27:30.000000000 +0100
+++ wireless-2.6/net/rfkill/rfkill.c 2007-10-28 15:07:11.000000000 +0100
@@ -276,21 +276,17 @@ static struct class rfkill_class = {
static int rfkill_add_switch(struct rfkill *rfkill)
{
- int retval;
-
- retval = mutex_lock_interruptible(&rfkill_mutex);
- if (retval)
- return retval;
+ int error;
- retval = rfkill_toggle_radio(rfkill, rfkill_states[rfkill->type]);
- if (retval)
- goto out;
+ mutex_lock(&rfkill_mutex);
- list_add_tail(&rfkill->node, &rfkill_list);
+ error = rfkill_toggle_radio(rfkill, rfkill_states[rfkill->type]);
+ if (!error)
+ list_add_tail(&rfkill->node, &rfkill_list);
- out:
mutex_unlock(&rfkill_mutex);
- return retval;
+
+ return error;
}
static void rfkill_remove_switch(struct rfkill *rfkill)
@@ -387,6 +383,8 @@ int rfkill_register(struct rfkill *rfkil
if (!rfkill->toggle_radio)
return -EINVAL;
+ if (rfkill->type >= RFKILL_TYPE_MAX)
+ return -EINVAL;
snprintf(dev->bus_id, sizeof(dev->bus_id),
"rfkill%ld", (long)atomic_inc_return(&rfkill_no) - 1);
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH] rfkill: Use mutex_lock() at register and add sanity check
2007-10-28 14:16 [PATCH] rfkill: Use mutex_lock() at register and add sanity check Michael Buesch
@ 2007-10-28 15:03 ` Ivo van Doorn
0 siblings, 0 replies; 2+ messages in thread
From: Ivo van Doorn @ 2007-10-28 15:03 UTC (permalink / raw)
To: Michael Buesch; +Cc: John Linville, linux-wireless
On Sunday 28 October 2007, Michael Buesch wrote:
> Replace mutex_lock_interruptible() by mutex_lock() in rfkill_register(),
> as interruptible doesn't make sense there.
>
> Add a sanity check for rfkill->type, as that's used for an unchecked dereference
> in an array and might cause hard to debug crashes if the driver sets this
> to an invalid value.
>
> Signed-off-by: Michael Buesch <mb@bu3sch.de>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
> Index: wireless-2.6/net/rfkill/rfkill.c
> ===================================================================
> --- wireless-2.6.orig/net/rfkill/rfkill.c 2007-10-28 14:27:30.000000000 +0100
> +++ wireless-2.6/net/rfkill/rfkill.c 2007-10-28 15:07:11.000000000 +0100
> @@ -276,21 +276,17 @@ static struct class rfkill_class = {
>
> static int rfkill_add_switch(struct rfkill *rfkill)
> {
> - int retval;
> -
> - retval = mutex_lock_interruptible(&rfkill_mutex);
> - if (retval)
> - return retval;
> + int error;
>
> - retval = rfkill_toggle_radio(rfkill, rfkill_states[rfkill->type]);
> - if (retval)
> - goto out;
> + mutex_lock(&rfkill_mutex);
>
> - list_add_tail(&rfkill->node, &rfkill_list);
> + error = rfkill_toggle_radio(rfkill, rfkill_states[rfkill->type]);
> + if (!error)
> + list_add_tail(&rfkill->node, &rfkill_list);
>
> - out:
> mutex_unlock(&rfkill_mutex);
> - return retval;
> +
> + return error;
> }
>
> static void rfkill_remove_switch(struct rfkill *rfkill)
> @@ -387,6 +383,8 @@ int rfkill_register(struct rfkill *rfkil
>
> if (!rfkill->toggle_radio)
> return -EINVAL;
> + if (rfkill->type >= RFKILL_TYPE_MAX)
> + return -EINVAL;
>
> snprintf(dev->bus_id, sizeof(dev->bus_id),
> "rfkill%ld", (long)atomic_inc_return(&rfkill_no) - 1);
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2007-10-28 14:44 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-28 14:16 [PATCH] rfkill: Use mutex_lock() at register and add sanity check Michael Buesch
2007-10-28 15:03 ` Ivo van Doorn
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).