All of lore.kernel.org
 help / color / mirror / Atom feed
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 4.9 04/23] neighbour: Disregard DEAD dst in neigh_update
Date: Mon, 12 Apr 2021 12:26:45 -0400	[thread overview]
Message-ID: <20210412162704.315783-4-sashal@kernel.org> (raw)
In-Reply-To: <20210412162704.315783-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 d267dc04d9f7..2aa5c231560d 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -1230,7 +1230,7 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
 			 * 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


  parent reply	other threads:[~2021-04-12 16:48 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-12 16:26 [PATCH AUTOSEL 4.9 01/23] net: ieee802154: nl-mac: fix check on panid Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 02/23] ARM: dts: Fix moving mmc devices with aliases for omap4 & 5 Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 03/23] arc: kernel: Return -EFAULT if copy_to_user() fails Sasha Levin
2021-04-12 16:26   ` Sasha Levin
2021-04-12 16:26 ` Sasha Levin [this message]
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 05/23] ARM: keystone: fix integer overflow warning Sasha Levin
2021-04-12 16:26   ` Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 06/23] drivers: net: fix memory leak in atusb_probe Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 07/23] drivers: net: fix memory leak in peak_usb_create_dev Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 08/23] ASoC: fsl_esai: Fix TDM slot setup for I2S mode Sasha Levin
2021-04-12 16:26   ` Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 09/23] net: ieee802154: forbid monitor for set llsec params Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 10/23] net: ieee802154: stop dump llsec keys for monitors Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 11/23] net: ieee802154: stop dump llsec devs " Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 12/23] net: ieee802154: forbid monitor for add llsec dev Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 13/23] net: ieee802154: stop dump llsec devkeys for monitors Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 14/23] net: ieee802154: forbid monitor for add llsec devkey Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 15/23] net: ieee802154: stop dump llsec seclevels for monitors Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 16/23] net: ieee802154: forbid monitor for add llsec seclevel Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 17/23] net: ieee802154: forbid monitor for del " Sasha Levin
2021-04-12 16:26 ` [PATCH AUTOSEL 4.9 18/23] net: ieee802154: stop dump llsec params for monitors Sasha Levin
2021-04-12 16:27 ` [PATCH AUTOSEL 4.9 19/23] net: mac802154: Fix general protection fault Sasha Levin
2021-04-12 16:27 ` [PATCH AUTOSEL 4.9 20/23] pcnet32: Use pci_resource_len to validate PCI resource Sasha Levin
2021-04-12 16:27   ` Sasha Levin
2021-04-12 16:27 ` [PATCH AUTOSEL 4.9 21/23] net/rds: Avoid potential use after free in rds_send_remove_from_sock Sasha Levin
2021-04-12 16:27 ` [PATCH AUTOSEL 4.9 22/23] net: tipc: Fix spelling errors in net/tipc module Sasha Levin
2021-04-12 16:27 ` [PATCH AUTOSEL 4.9 23/23] cfg80211: remove WARN_ON() in cfg80211_sme_connect 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=20210412162704.315783-4-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.