linux/drivers/net/wan
Xie He bf0ffea336 net: hdlc_x25: Prevent racing between "x25_close" and "x25_xmit"/"x25_rx"
"x25_close" is called by "hdlc_close" in "hdlc.c", which is called by
hardware drivers' "ndo_stop" function.
"x25_xmit" is called by "hdlc_start_xmit" in "hdlc.c", which is hardware
drivers' "ndo_start_xmit" function.
"x25_rx" is called by "hdlc_rcv" in "hdlc.c", which receives HDLC frames
from "net/core/dev.c".

"x25_close" races with "x25_xmit" and "x25_rx" because their callers race.

However, we need to ensure that the LAPB APIs called in "x25_xmit" and
"x25_rx" are called before "lapb_unregister" is called in "x25_close".

This patch adds locking to ensure when "x25_xmit" and "x25_rx" are doing
their work, "lapb_unregister" is not yet called in "x25_close".

Reasons for not solving the racing between "x25_close" and "x25_xmit" by
calling "netif_tx_disable" in "x25_close":
1. We still need to solve the racing between "x25_close" and "x25_rx";
2. The design of the HDLC subsystem assumes the HDLC hardware drivers
have full control over the TX queue, and the HDLC protocol drivers (like
this driver) have no control. Controlling the queue here in the protocol
driver may interfere with hardware drivers' control of the queue.

Fixes: 1da177e4c3 ("Linux-2.6.12-rc2")
Signed-off-by: Xie He <xie.he.0141@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-03-15 12:18:58 -07:00
..
lmc net: wan/lmc: dont print format string when not available 2021-02-15 13:03:22 -08:00
.gitignore
Kconfig wan: ds26522: select CONFIG_BITREVERSE 2021-01-05 15:50:36 -08:00
Makefile net: wan: Delete the DLCI / SDLA drivers 2020-11-17 13:33:29 -08:00
c101.c
cosa.c cosa: Add missing kfree in error path of cosa_write 2020-11-11 17:52:01 -08:00
cosa.h
farsync.c net: wan: farsync: use new tasklet API 2021-02-06 12:00:02 -08:00
farsync.h
fsl_ucc_hdlc.c net: wan: fix error return code of uhdlc_init() 2021-03-08 11:56:40 -08:00
fsl_ucc_hdlc.h
hd64570.c
hd64570.h
hd64572.c
hd64572.h
hdlc.c net: hdlc: In hdlc_rcv, check to make sure dev is an HDLC device 2020-10-21 17:20:19 -07:00
hdlc_cisco.c drivers/net/wan/hdlc: Set skb->protocol before transmitting 2020-09-17 16:41:12 -07:00
hdlc_fr.c net: hdlc_fr: Add support for any Ethertype 2020-11-03 15:19:21 -08:00
hdlc_ppp.c net: hdlc_ppp: Fix issues when mod_timer is called while timer is running 2020-12-28 15:09:04 -08:00
hdlc_raw.c
hdlc_raw_eth.c net: hdlc_raw_eth: Clear the IFF_TX_SKB_SHARING flag after calling ether_setup 2020-10-21 17:58:26 -07:00
hdlc_x25.c net: hdlc_x25: Prevent racing between "x25_close" and "x25_xmit"/"x25_rx" 2021-03-15 12:18:58 -07:00
hostess_sv11.c
ixp4xx_hss.c net: wan: Use DEFINE_SPINLOCK() for spinlock 2021-01-05 15:43:41 -08:00
lapbether.c net: lapbether: Remove netif_start_queue / netif_stop_queue 2021-03-09 11:03:09 -08:00
n2.c
pc300too.c
pci200syn.c net: wan: remove trailing semicolon in macro definition 2020-11-30 18:58:31 -08:00
sbni.c net: wan: Replace simple_strtol by simple_strtoul 2021-01-05 15:43:41 -08:00
sbni.h
sealevel.c
slic_ds26522.c
slic_ds26522.h
wanxl.c
wanxl.h
wanxlfw.S
wanxlfw.inc_shipped
z85230.c
z85230.h