linux-stable/drivers/isdn
Yang Yingliang 9634f668ad mISDN: hfcmulti: don't call dev_kfree_skb/kfree_skb() under spin_lock_irqsave()
[ Upstream commit 1232946cf5 ]

It is not allowed to call kfree_skb() or consume_skb() from hardware
interrupt context or with hardware interrupts being disabled.

skb_queue_purge() is called under spin_lock_irqsave() in handle_dmsg()
and hfcm_l1callback(), kfree_skb() is called in them, to fix this, use
skb_queue_splice_init() to move the dch->squeue to a free queue, also
enqueue the tx_skb and rx_skb, at last calling __skb_queue_purge() to
free the SKBs afer unlock.

Fixes: af69fb3a8f ("Add mISDN HFC multiport driver")
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Reviewed-by: Alexander Duyck <alexanderduyck@fb.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-01-18 09:26:28 +01:00
..
capi isdn: cpai: check ctr->cnr to avoid array index out of bound 2021-10-27 09:51:40 +02:00
divert
gigaset staging: gigaset: add endpoint-type sanity check 2019-12-17 20:39:06 +01:00
hardware mISDN: hfcmulti: don't call dev_kfree_skb/kfree_skb() under spin_lock_irqsave() 2023-01-18 09:26:28 +01:00
hisax
hysdn
i4l
isdnloop
mISDN mISDN: fix misuse of put_device() in mISDN_register_device() 2022-11-25 17:36:50 +01:00
Kconfig
Makefile