Skip to content

Commit

Permalink
rfkill: Register LED triggers before registering switch
Browse files Browse the repository at this point in the history
Registering the switch triggers a LED event, so we must register
LED triggers before the switch.
This has a potential to fix a crash, depending on how the device
driver initializes the rfkill data structure.

Signed-off-by: Michael Buesch <[email protected]>
Signed-off-by: Ivo van Doorn <[email protected]>
Signed-off-by: John W. Linville <[email protected]>
  • Loading branch information
Michael Buesch authored and David S. Miller committed Nov 11, 2007
1 parent 8d8c90e commit 8a8f1c0
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions net/rfkill/rfkill.c
Original file line number Diff line number Diff line change
Expand Up @@ -388,19 +388,20 @@ int rfkill_register(struct rfkill *rfkill)
if (!rfkill->toggle_radio)
return -EINVAL;

snprintf(dev->bus_id, sizeof(dev->bus_id),
"rfkill%ld", (long)atomic_inc_return(&rfkill_no) - 1);

rfkill_led_trigger_register(rfkill);

error = rfkill_add_switch(rfkill);
if (error)
return error;

snprintf(dev->bus_id, sizeof(dev->bus_id),
"rfkill%ld", (long)atomic_inc_return(&rfkill_no) - 1);

error = device_add(dev);
if (error) {
rfkill_remove_switch(rfkill);
return error;
}
rfkill_led_trigger_register(rfkill);

return 0;
}
Expand All @@ -416,9 +417,9 @@ EXPORT_SYMBOL(rfkill_register);
*/
void rfkill_unregister(struct rfkill *rfkill)
{
rfkill_led_trigger_unregister(rfkill);
device_del(&rfkill->dev);
rfkill_remove_switch(rfkill);
rfkill_led_trigger_unregister(rfkill);
put_device(&rfkill->dev);
}
EXPORT_SYMBOL(rfkill_unregister);
Expand Down

0 comments on commit 8a8f1c0

Please sign in to comment.