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: Michael Brown <mbrown@fensystems.co.uk>,
	Paul Durrant <paul@xen.org>,
	"David S . Miller" <davem@davemloft.net>,
	Sasha Levin <sashal@kernel.org>,
	xen-devel@lists.xenproject.org, netdev@vger.kernel.org
Subject: [PATCH AUTOSEL 5.10 13/21] xen-netback: Check for hotplug-status existence before watching
Date: Mon, 19 Apr 2021 16:44:11 -0400	[thread overview]
Message-ID: <20210419204420.6375-13-sashal@kernel.org> (raw)
In-Reply-To: <20210419204420.6375-1-sashal@kernel.org>

From: Michael Brown <mbrown@fensystems.co.uk>

[ Upstream commit 2afeec08ab5c86ae21952151f726bfe184f6b23d ]

The logic in connect() is currently written with the assumption that
xenbus_watch_pathfmt() will return an error for a node that does not
exist.  This assumption is incorrect: xenstore does allow a watch to
be registered for a nonexistent node (and will send notifications
should the node be subsequently created).

As of commit 1f2565780 ("xen-netback: remove 'hotplug-status' once it
has served its purpose"), this leads to a failure when a domU
transitions into XenbusStateConnected more than once.  On the first
domU transition into Connected state, the "hotplug-status" node will
be deleted by the hotplug_status_changed() callback in dom0.  On the
second or subsequent domU transition into Connected state, the
hotplug_status_changed() callback will therefore never be invoked, and
so the backend will remain stuck in InitWait.

This failure prevents scenarios such as reloading the xen-netfront
module within a domU, or booting a domU via iPXE.  There is
unfortunately no way for the domU to work around this dom0 bug.

Fix by explicitly checking for existence of the "hotplug-status" node,
thereby creating the behaviour that was previously assumed to exist.

Signed-off-by: Michael Brown <mbrown@fensystems.co.uk>
Reviewed-by: Paul Durrant <paul@xen.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/net/xen-netback/xenbus.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c
index 6f10e0998f1c..94d19158efc1 100644
--- a/drivers/net/xen-netback/xenbus.c
+++ b/drivers/net/xen-netback/xenbus.c
@@ -824,11 +824,15 @@ static void connect(struct backend_info *be)
 	xenvif_carrier_on(be->vif);
 
 	unregister_hotplug_status_watch(be);
-	err = xenbus_watch_pathfmt(dev, &be->hotplug_status_watch, NULL,
-				   hotplug_status_changed,
-				   "%s/%s", dev->nodename, "hotplug-status");
-	if (!err)
+	if (xenbus_exists(XBT_NIL, dev->nodename, "hotplug-status")) {
+		err = xenbus_watch_pathfmt(dev, &be->hotplug_status_watch,
+					   NULL, hotplug_status_changed,
+					   "%s/%s", dev->nodename,
+					   "hotplug-status");
+		if (err)
+			goto err;
 		be->have_hotplug_status_watch = 1;
+	}
 
 	netif_tx_wake_all_queues(be->vif->dev);
 
-- 
2.30.2


  parent reply	other threads:[~2021-04-19 20:48 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-19 20:43 [PATCH AUTOSEL 5.10 01/21] HID: google: add don USB id Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 02/21] HID: alps: fix error return code in alps_input_configured() Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 03/21] HID cp2112: fix support for multiple gpiochips Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 04/21] HID: wacom: Assign boolean values to a bool variable Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 05/21] soc: qcom: geni: shield geni_icc_get() for ACPI boot Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 06/21] dmaengine: xilinx: dpdma: Fix descriptor issuing on video group Sasha Levin
2021-04-19 20:44   ` Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 07/21] dmaengine: xilinx: dpdma: Fix race condition in done IRQ Sasha Levin
2021-04-19 20:44   ` Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 08/21] ARM: dts: Fix swapped mmc order for omap3 Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 09/21] net: geneve: check skb is large enough for IPv4/IPv6 header Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 10/21] dmaengine: tegra20: Fix runtime PM imbalance on error Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 11/21] s390/entry: save the caller of psw_idle Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 12/21] arm64: kprobes: Restore local irqflag if kprobes is cancelled Sasha Levin
2021-04-19 20:44   ` Sasha Levin
2021-04-19 20:44   ` Sasha Levin
2021-04-19 20:44 ` Sasha Levin [this message]
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 14/21] cavium/liquidio: Fix duplicate argument Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 15/21] i2c: mv64xxx: Fix random system lock caused by runtime PM Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 16/21] kasan: fix hwasan build for gcc Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 17/21] csky: change a Kconfig symbol name to fix e1000 build error Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 18/21] ia64: fix discontig.c section mismatches Sasha Levin
2021-04-19 20:44   ` Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 19/21] ia64: tools: remove duplicate definition of ia64_mf() on ia64 Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 20/21] gcov: clang: fix clang-11+ build Sasha Levin
2021-04-19 20:44 ` [PATCH AUTOSEL 5.10 21/21] readdir: make sure to verify directory entry for legacy interfaces too 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=20210419204420.6375-13-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mbrown@fensystems.co.uk \
    --cc=netdev@vger.kernel.org \
    --cc=paul@xen.org \
    --cc=stable@vger.kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    /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.