From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Tong Zhu <zhutong@amazon.com>,
"David S . Miller" <davem@davemloft.net>,
Sasha Levin <sashal@kernel.org>,
netdev@vger.kernel.org
Subject: [PATCH AUTOSEL 5.4 11/39] neighbour: Disregard DEAD dst in neigh_update
Date: Mon, 12 Apr 2021 12:24:33 -0400 [thread overview]
Message-ID: <20210412162502.314854-11-sashal@kernel.org> (raw)
In-Reply-To: <20210412162502.314854-1-sashal@kernel.org>
From: Tong Zhu <zhutong@amazon.com>
[ Upstream commit d47ec7a0a7271dda08932d6208e4ab65ab0c987c ]
After a short network outage, the dst_entry is timed out and put
in DST_OBSOLETE_DEAD. We are in this code because arp reply comes
from this neighbour after network recovers. There is a potential
race condition that dst_entry is still in DST_OBSOLETE_DEAD.
With that, another neighbour lookup causes more harm than good.
In best case all packets in arp_queue are lost. This is
counterproductive to the original goal of finding a better path
for those packets.
I observed a worst case with 4.x kernel where a dst_entry in
DST_OBSOLETE_DEAD state is associated with loopback net_device.
It leads to an ethernet header with all zero addresses.
A packet with all zero source MAC address is quite deadly with
mac80211, ath9k and 802.11 block ack. It fails
ieee80211_find_sta_by_ifaddr in ath9k (xmit.c). Ath9k flushes tx
queue (ath_tx_complete_aggr). BAW (block ack window) is not
updated. BAW logic is damaged and ath9k transmission is disabled.
Signed-off-by: Tong Zhu <zhutong@amazon.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/core/neighbour.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 7080d708b7d0..6635b83113f8 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -1379,7 +1379,7 @@ static int __neigh_update(struct neighbour *neigh, const u8 *lladdr,
* we can reinject the packet there.
*/
n2 = NULL;
- if (dst) {
+ if (dst && dst->obsolete != DST_OBSOLETE_DEAD) {
n2 = dst_neigh_lookup_skb(dst, skb);
if (n2)
n1 = n2;
--
2.30.2
next prev parent reply other threads:[~2021-04-12 16:30 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-12 16:24 [PATCH AUTOSEL 5.4 01/39] net: ieee802154: fix nl802154 del llsec key Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 02/39] net: ieee802154: fix nl802154 del llsec dev Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 03/39] net: ieee802154: fix nl802154 add llsec key Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 04/39] net: ieee802154: fix nl802154 del llsec devkey Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 05/39] net: ieee802154: nl-mac: fix check on panid Sasha Levin
2021-04-12 16:24 ` Sasha Levin [this message]
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 14/39] drivers: net: fix memory leak in atusb_probe Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 15/39] drivers: net: fix memory leak in peak_usb_create_dev Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 19/39] net: ieee802154: forbid monitor for set llsec params Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 20/39] net: ieee802154: stop dump llsec keys for monitors Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 21/39] net: ieee802154: forbid monitor for add llsec key Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 22/39] net: ieee802154: forbid monitor for del " Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 23/39] net: ieee802154: stop dump llsec devs for monitors Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 24/39] net: ieee802154: forbid monitor for add llsec dev Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 25/39] net: ieee802154: forbid monitor for del " Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 26/39] net: ieee802154: stop dump llsec devkeys for monitors Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 27/39] net: ieee802154: forbid monitor for add llsec devkey Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 28/39] net: ieee802154: forbid monitor for del " Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 29/39] net: ieee802154: stop dump llsec seclevels for monitors Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 30/39] net: ieee802154: forbid monitor for add llsec seclevel Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 31/39] net: ieee802154: forbid monitor for del " Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 32/39] net: ieee802154: stop dump llsec params for monitors Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 33/39] net: mac802154: Fix general protection fault Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 34/39] pcnet32: Use pci_resource_len to validate PCI resource Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 35/39] net/rds: Avoid potential use after free in rds_send_remove_from_sock Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 36/39] net: tipc: Fix spelling errors in net/tipc module Sasha Levin
2021-04-12 16:24 ` [PATCH AUTOSEL 5.4 37/39] mac80211: clear sta->fast_rx when STA removed from 4-addr VLAN Sasha Levin
2021-04-12 16:25 ` [PATCH AUTOSEL 5.4 38/39] cfg80211: remove WARN_ON() in cfg80211_sme_connect Sasha Levin
2021-04-12 16:25 ` [PATCH AUTOSEL 5.4 39/39] virt_wifi: Return micros for BSS TSF values Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210412162502.314854-11-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=zhutong@amazon.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).