linux-stable/net
Sebastian Andrzej Siewior 21a061772b hsr: Synchronize sequence number updates.
[ Upstream commit 5c7aa13210 ]

hsr_register_frame_out() compares new sequence_nr vs the old one
recorded in hsr_node::seq_out and if the new sequence_nr is higher then
it will be written to hsr_node::seq_out as the new value.

This operation isn't locked so it is possible that two frames with the
same sequence number arrive (via the two slave devices) and are fed to
hsr_register_frame_out() at the same time. Both will pass the check and
update the sequence counter later to the same value. As a result the
content of the same packet is fed into the stack twice.

This was noticed by running ping and observing DUP being reported from
time to time.

Instead of using the hsr_priv::seqnr_lock for the whole receive path (as
it is for sending in the master node) add an additional lock that is only
used for sequence number checks and updates.

Add a per-node lock that is used during sequence number reads and
updates.

Fixes: f421436a59 ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-12-31 13:14:15 +01:00
..
6lowpan
9p 9p/xen: check logical size for buffer size 2022-12-14 11:37:17 +01:00
802
8021q net: use eth_hw_addr_set() instead of ether_addr_copy() 2022-08-31 17:16:37 +02:00
appletalk
atm net/atm: fix proc_mpc_write incorrect return value 2022-10-29 10:12:55 +02:00
ax25
batman-adv
bluetooth Bluetooth: L2CAP: Fix u8 overflow 2022-12-21 17:36:38 +01:00
bpf bpf: Move skb->len == 0 checks into __bpf_redirect 2022-12-31 13:14:11 +01:00
bpfilter
bridge bridge: switchdev: Fix memory leaks when changing VLAN protocol 2022-11-26 09:24:40 +01:00
caif net: caif: fix double disconnect client in chnl_net_open() 2022-11-26 09:24:39 +01:00
can can: af_can: fix NULL pointer dereference in can_rcv_filter 2022-12-14 11:37:22 +01:00
ceph
core bpf, sockmap: Fix missing BPF_F_INGRESS flag when using apply_bytes 2022-12-31 13:14:14 +01:00
dcb
dccp dccp/tcp: Reset saddr on failure after inet6?_hash_connect(). 2022-12-02 17:41:07 +01:00
decnet net: Fix data-races around sysctl_[rw]mem(_offset)?. 2022-08-03 12:03:51 +02:00
dns_resolver
dsa net: dsa: sja1105: Check return value 2022-12-14 11:37:25 +01:00
ethernet
ethtool ethtool: eeprom: fix null-deref on genl_info in dump 2022-11-03 23:59:14 +09:00
hsr hsr: Synchronize sequence number updates. 2022-12-31 13:14:15 +01:00
ieee802154 net: ieee802154: fix error return code in dgram_bind() 2022-11-03 23:59:14 +09:00
ife
ipv4 bpf, sockmap: Fix data loss caused by using apply_bytes on ingress redirect 2022-12-31 13:14:14 +01:00
ipv6 ipv6: avoid use-after-free in ip6_fragment() 2022-12-14 11:37:29 +01:00
iucv
kcm kcm: close race conditions on sk_receive_queue 2022-11-26 09:24:50 +01:00
key xfrm: Fix oops in __xfrm_state_delete() 2022-12-02 17:41:06 +01:00
l2tp
l3mdev
lapb
llc
mac80211 wifi: mac80211: fix memory leak in ieee80211_if_add() 2022-12-31 13:14:14 +01:00
mac802154 mac802154: fix missing INIT_LIST_HEAD in ieee802154_if_add() 2022-12-14 11:37:25 +01:00
mctp mctp: Fix an error handling path in mctp_init() 2022-11-16 09:58:22 +01:00
mpls net: Use u64_stats_fetch_begin_irq() for stats fetch. 2022-09-08 12:28:07 +02:00
mptcp mptcp: Fix crash due to tcp_tsorted_anchor was initialized before release skb 2022-08-31 17:16:50 +02:00
ncsi
netfilter netfilter: conntrack: set icmpv6 redirects as RELATED 2022-12-31 13:14:14 +01:00
netlabel
netlink net: genl: fix error path memory leak in policy dumping 2022-08-25 11:40:25 +02:00
netrom
nfc NFC: nci: Bounds check struct nfc_target arrays 2022-12-14 11:37:27 +01:00
nsh
openvswitch netfilter: conntrack: Fix data-races around ct mark 2022-12-02 17:41:04 +01:00
packet packet: do not set TP_STATUS_CSUM_VALID on CHECKSUM_COMPLETE 2022-12-08 11:28:41 +01:00
phonet
psample
qrtr net: qrtr: start MHI channel after endpoit creation 2022-08-25 11:40:29 +02:00
rds net: rds: don't hold sock lock when cancelling work from rds_tcp_reset_callbacks() 2022-10-26 12:34:49 +02:00
rfkill
rose rose: Fix NULL pointer dereference in rose_send_frame() 2022-11-10 18:15:29 +01:00
rxrpc rxrpc: Fix ack.bufferSize to be 0 when generating an ack 2022-12-31 13:14:09 +01:00
sched net: sched: allow act_ct to be built without NF_NAT 2022-12-02 17:41:06 +01:00
sctp sctp: fix memory leak in sctp_stream_outq_migrate() 2022-12-08 11:28:41 +01:00
smc net/smc: Fix possible leaked pernet namespace in smc_init() 2022-11-10 18:15:31 +01:00
strparser
sunrpc SUNRPC: Fix null-ptr-deref when xps sysfs alloc failed 2022-11-10 18:15:26 +01:00
switchdev
tipc tipc: call tipc_lxc_xmit without holding node_read_lock 2022-12-14 11:37:29 +01:00
tls bpf, sockmap: Fix missing BPF_F_INGRESS flag when using apply_bytes 2022-12-31 13:14:14 +01:00
unix af_unix: Get user_ns from in_skb in unix_diag_get_exact(). 2022-12-14 11:37:24 +01:00
vmw_vsock vsock: fix possible infinite sleep in vsock_connectible_wait_data() 2022-11-10 18:15:31 +01:00
wireless wifi: cfg80211: Fix not unregister reg_pdev when load_builtin_regdb_keys() fails 2022-12-31 13:14:14 +01:00
x25 net/x25: Fix skb leak in x25_lapb_receive_frame() 2022-11-26 09:24:41 +01:00
xdp xsk: Fix backpressure mechanism on Tx 2022-10-26 12:34:40 +02:00
xfrm xfrm: replay: Fix ESN wrap around for GSO 2022-12-02 17:41:02 +01:00
compat.c
devres.c
Kconfig
Makefile
socket.c net: Fix a data-race around sysctl_somaxconn. 2022-08-31 17:16:45 +02:00
sysctl_net.c