linux/net/nfc
Szymon Janc 3c0cc8aa23 NFC: Fix sleeping in invalid context when netlink socket is closed
netlink_register_notifier requires notify functions to not sleep.
nfc_stop_poll locks device mutex and must not be called from notifier.
Create workqueue that will handle this for all devices.

BUG: sleeping function called from invalid context at kernel/mutex.c:269
in_atomic(): 0, irqs_disabled(): 0, pid: 4497, name: neard
1 lock held by neard/4497:
Pid: 4497, comm: neard Not tainted 3.5.0-999-nfc+ #5
Call Trace:
[<ffffffff810952c5>] __might_sleep+0x145/0x200
[<ffffffff81743dde>] mutex_lock_nested+0x2e/0x50
[<ffffffff816ffd19>] nfc_stop_poll+0x39/0xb0
[<ffffffff81700a17>] nfc_genl_rcv_nl_event+0x77/0xc0
[<ffffffff8174aa8c>] notifier_call_chain+0x5c/0x120
[<ffffffff8174abd6>] __atomic_notifier_call_chain+0x86/0x140
[<ffffffff8174ab50>] ? notifier_call_chain+0x120/0x120
[<ffffffff815e1347>] ? skb_dequeue+0x67/0x90
[<ffffffff8174aca6>] atomic_notifier_call_chain+0x16/0x20
[<ffffffff8162119a>] netlink_release+0x24a/0x280
[<ffffffff815d7aa8>] sock_release+0x28/0xa0
[<ffffffff815d7be7>] sock_close+0x17/0x30
[<ffffffff811b2a7c>] __fput+0xcc/0x250
[<ffffffff811b2c0e>] ____fput+0xe/0x10
[<ffffffff81085009>] task_work_run+0x69/0x90
[<ffffffff8101b951>] do_notify_resume+0x81/0xd0
[<ffffffff8174ef22>] int_signal+0x12/0x17

Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2012-09-27 10:52:17 +02:00
..
hci NFC: Add dummy nfc_llc_shdlc_register definition 2012-09-27 10:48:08 +02:00
llcp NFC: LLCP raw socket support 2012-09-27 10:47:59 +02:00
nci NFC: Implement NCI dep_link_up and dep_link_down 2012-09-25 00:17:23 +02:00
af_nfc.c NFC: Core code identation fixes 2012-03-06 15:16:25 -05:00
core.c NFC: Use system_nrt_wq instead of custom ones 2012-09-25 00:17:23 +02:00
Kconfig NFC: HCI support 2012-04-12 15:10:34 -04:00
Makefile NFC: HCI support 2012-04-12 15:10:34 -04:00
netlink.c NFC: Fix sleeping in invalid context when netlink socket is closed 2012-09-27 10:52:17 +02:00
nfc.h NFC: Introduce target mode rx data callback 2012-06-04 21:34:31 +02:00
rawsock.c NFC: Return from rawsock_release when sk is NULL 2012-06-26 01:35:26 +02:00