summaryrefslogtreecommitdiff
path: root/net/hsr/Kconfig
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>2022-11-29 17:48:10 +0100
committerJakub Kicinski <kuba@kernel.org>2022-12-01 20:26:21 -0800
commit0c74d9f79ec4299365bbe803baa736ae0068179e (patch)
treedccab62a77a6efe3ec1323aeed6484bb1a4006dd /net/hsr/Kconfig
parent5aa2820177af650293b2f9f1873c1f6f8e4ad7a4 (diff)
hsr: Avoid double remove of a node.
Due to the hashed-MAC optimisation one problem become visible: hsr_handle_sup_frame() walks over the list of available nodes and merges two node entries into one if based on the information in the supervision both MAC addresses belong to one node. The list-walk happens on a RCU protected list and delete operation happens under a lock. If the supervision arrives on both slave interfaces at the same time then this delete operation can occur simultaneously on two CPUs. The result is the first-CPU deletes the from the list and the second CPUs BUGs while attempting to dereference a poisoned list-entry. This happens more likely with the optimisation because a new node for the mac_B entry is created once a packet has been received and removed (merged) once the supervision frame has been received. Avoid removing/ cleaning up a hsr_node twice by adding a `removed' field which is set to true after the removal and checked before the removal. Fixes: f266a683a4804 ("net/hsr: Better frame dispatch") Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/hsr/Kconfig')
0 files changed, 0 insertions, 0 deletions