1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00
linux/drivers/isdn/hardware/mISDN
Zheyu Ma 6510e80a0b isdn: mISDN: Fix sleeping function called from invalid context
The driver can call card->isac.release() function from an atomic
context.

Fix this by calling this function after releasing the lock.

The following log reveals it:

[   44.168226 ] BUG: sleeping function called from invalid context at kernel/workqueue.c:3018
[   44.168941 ] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 5475, name: modprobe
[   44.169574 ] INFO: lockdep is turned off.
[   44.169899 ] irq event stamp: 0
[   44.170160 ] hardirqs last  enabled at (0): [<0000000000000000>] 0x0
[   44.170627 ] hardirqs last disabled at (0): [<ffffffff814209ed>] copy_process+0x132d/0x3e00
[   44.171240 ] softirqs last  enabled at (0): [<ffffffff81420a1a>] copy_process+0x135a/0x3e00
[   44.171852 ] softirqs last disabled at (0): [<0000000000000000>] 0x0
[   44.172318 ] Preemption disabled at:
[   44.172320 ] [<ffffffffa009b0a9>] nj_release+0x69/0x500 [netjet]
[   44.174441 ] Call Trace:
[   44.174630 ]  dump_stack_lvl+0xa8/0xd1
[   44.174912 ]  dump_stack+0x15/0x17
[   44.175166 ]  ___might_sleep+0x3a2/0x510
[   44.175459 ]  ? nj_release+0x69/0x500 [netjet]
[   44.175791 ]  __might_sleep+0x82/0xe0
[   44.176063 ]  ? start_flush_work+0x20/0x7b0
[   44.176375 ]  start_flush_work+0x33/0x7b0
[   44.176672 ]  ? trace_irq_enable_rcuidle+0x85/0x170
[   44.177034 ]  ? kasan_quarantine_put+0xaa/0x1f0
[   44.177372 ]  ? kasan_quarantine_put+0xaa/0x1f0
[   44.177711 ]  __flush_work+0x11a/0x1a0
[   44.177991 ]  ? flush_work+0x20/0x20
[   44.178257 ]  ? lock_release+0x13c/0x8f0
[   44.178550 ]  ? __kasan_check_write+0x14/0x20
[   44.178872 ]  ? do_raw_spin_lock+0x148/0x360
[   44.179187 ]  ? read_lock_is_recursive+0x20/0x20
[   44.179530 ]  ? __kasan_check_read+0x11/0x20
[   44.179846 ]  ? do_raw_spin_unlock+0x55/0x900
[   44.180168 ]  ? ____kasan_slab_free+0x116/0x140
[   44.180505 ]  ? _raw_spin_unlock_irqrestore+0x41/0x60
[   44.180878 ]  ? skb_queue_purge+0x1a3/0x1c0
[   44.181189 ]  ? kfree+0x13e/0x290
[   44.181438 ]  flush_work+0x17/0x20
[   44.181695 ]  mISDN_freedchannel+0xe8/0x100
[   44.182006 ]  isac_release+0x210/0x260 [mISDNipac]
[   44.182366 ]  nj_release+0xf6/0x500 [netjet]
[   44.182685 ]  nj_remove+0x48/0x70 [netjet]
[   44.182989 ]  pci_device_remove+0xa9/0x250

Signed-off-by: Zheyu Ma <zheyuma97@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-10-09 13:42:51 +01:00
..
avmfritz.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
hfc_multi.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
hfc_multi_8xx.h treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
hfc_pci.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 153 2019-05-30 11:26:32 -07:00
hfcmulti.c mISDN: Use DEFINE_SPINLOCK() for spinlock 2021-03-30 13:34:42 -07:00
hfcpci.c mISDN: fix possible use-after-free in HFC_cleanup() 2021-05-11 16:12:46 -07:00
hfcsusb.c isdn: mISDN: correctly handle ph_info allocation failure in hfcsusb_ph_info 2021-05-13 18:32:23 +02:00
hfcsusb.h isdn: hfcsusb: Spelling and grammar fixes 2019-10-28 13:42:36 -07:00
iohelper.h isdn: remove extra spaces in the header file 2021-03-11 18:23:55 -08:00
ipac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 176 2019-05-30 11:29:19 -07:00
isar.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 176 2019-05-30 11:29:19 -07:00
isdnhdlc.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
isdnhdlc.h isdn: deprecate non-mISDN drivers 2019-06-02 17:48:58 -07:00
Kconfig isdn: Fix Kconfig indentation 2019-11-20 12:30:47 -08:00
Makefile isdn: hdlc: move into mISDN 2019-05-31 11:13:10 +02:00
mISDNinfineon.c isdn: mISDNinfineon: check/cleanup ioremap failure correctly in setup_io 2021-05-13 18:32:06 +02:00
mISDNipac.c mISDN: fix crash in fritzpci 2021-03-11 18:23:13 -08:00
mISDNisar.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
netjet.c isdn: mISDN: Fix sleeping function called from invalid context 2021-10-09 13:42:51 +01:00
netjet.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 176 2019-05-30 11:29:19 -07:00
speedfax.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 176 2019-05-30 11:29:19 -07:00
w6692.c Printk changes for 5.5 2019-11-25 19:40:40 -08:00
w6692.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 176 2019-05-30 11:29:19 -07:00