All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: linux-usb@vger.kernel.org
Cc: Andreas Noever <andreas.noever@gmail.com>,
	Michael Jamet <michael.jamet@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Yehezkel Bernat <YehezkelShB@gmail.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Rajmohan Mani <rajmohan.mani@intel.com>,
	Lukas Wunner <lukas@wunner.de>
Subject: [PATCH 04/17] thunderbolt: Check that both ports are reachable when allocating path
Date: Mon, 15 Jun 2020 17:26:32 +0300	[thread overview]
Message-ID: <20200615142645.56209-5-mika.westerberg@linux.intel.com> (raw)
In-Reply-To: <20200615142645.56209-1-mika.westerberg@linux.intel.com>

Add sanity check that given src and dst ports are reachable through path
walk before allocating a path. If they are not then bail out early.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
 drivers/thunderbolt/path.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/thunderbolt/path.c b/drivers/thunderbolt/path.c
index 77abb1fa80c0..854ff3412161 100644
--- a/drivers/thunderbolt/path.c
+++ b/drivers/thunderbolt/path.c
@@ -229,7 +229,7 @@ struct tb_path *tb_path_alloc(struct tb *tb, struct tb_port *src, int src_hopid,
 			      struct tb_port *dst, int dst_hopid, int link_nr,
 			      const char *name)
 {
-	struct tb_port *in_port, *out_port;
+	struct tb_port *in_port, *out_port, *first_port, *last_port;
 	int in_hopid, out_hopid;
 	struct tb_path *path;
 	size_t num_hops;
@@ -239,9 +239,20 @@ struct tb_path *tb_path_alloc(struct tb *tb, struct tb_port *src, int src_hopid,
 	if (!path)
 		return NULL;
 
+	first_port = last_port = NULL;
 	i = 0;
-	tb_for_each_port_on_path(src, dst, in_port)
+	tb_for_each_port_on_path(src, dst, in_port) {
+		if (!first_port)
+			first_port = in_port;
+		last_port = in_port;
 		i++;
+	}
+
+	/* Check that src and dst are reachable */
+	if (first_port != src || last_port != dst) {
+		kfree(path);
+		return NULL;
+	}
 
 	/* Each hop takes two ports */
 	num_hops = i / 2;
-- 
2.27.0.rc2


  parent reply	other threads:[~2020-06-15 14:27 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-15 14:26 [PATCH 00/17] thunderbolt: Tunneling improvements Mika Westerberg
2020-06-15 14:26 ` [PATCH 01/17] thunderbolt: Fix path indices used in USB3 tunnel discovery Mika Westerberg
2020-06-25 12:51   ` Mika Westerberg
2020-06-15 14:26 ` [PATCH 02/17] thunderbolt: Make tb_next_port_on_path() work with tree topologies Mika Westerberg
2020-06-15 14:26 ` [PATCH 03/17] thunderbolt: Make tb_path_alloc() " Mika Westerberg
2020-06-15 14:26 ` Mika Westerberg [this message]
2020-06-15 14:26 ` [PATCH 05/17] thunderbolt: Handle incomplete PCIe/USB3 paths correctly in discovery Mika Westerberg
2020-06-15 14:26 ` [PATCH 06/17] thunderbolt: Increase path length " Mika Westerberg
2020-06-15 14:26 ` [PATCH 07/17] thunderbolt: Add KUnit tests for path walking Mika Westerberg
2020-06-15 14:26 ` [PATCH 08/17] thunderbolt: Add DP IN resources for all routers Mika Westerberg
2020-06-15 14:26 ` [PATCH 09/17] thunderbolt: Do not tunnel USB3 if link is not USB4 Mika Westerberg
2020-07-17  6:16   ` Prashant Malani
2020-07-20  9:02     ` Mika Westerberg
2020-07-22  5:45       ` Prashant Malani
2020-06-15 14:26 ` [PATCH 10/17] thunderbolt: Make usb4_switch_map_usb3_down() also return enabled ports Mika Westerberg
2020-06-15 14:26 ` [PATCH 11/17] thunderbolt: Make usb4_switch_map_pcie_down() " Mika Westerberg
2020-06-15 14:26 ` [PATCH 12/17] thunderbolt: Report consumed bandwidth in both directions Mika Westerberg
2020-06-15 14:26 ` [PATCH 13/17] thunderbolt: Increase DP DPRX wait timeout Mika Westerberg
2020-06-15 14:26 ` [PATCH 14/17] thunderbolt: Implement USB3 bandwidth negotiation routines Mika Westerberg
2020-06-15 14:26 ` [PATCH 15/17] thunderbolt: Make tb_port_get_link_speed() available to other files Mika Westerberg
2020-06-15 14:26 ` [PATCH 16/17] thunderbolt: Add USB3 bandwidth management Mika Westerberg
2020-06-15 14:26 ` [PATCH 17/17] thunderbolt: Add KUnit tests for tunneling Mika Westerberg
2020-06-29 15:39 ` [PATCH 00/17] thunderbolt: Tunneling improvements Mika Westerberg

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=20200615142645.56209-5-mika.westerberg@linux.intel.com \
    --to=mika.westerberg@linux.intel.com \
    --cc=YehezkelShB@gmail.com \
    --cc=andreas.noever@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=lukas@wunner.de \
    --cc=michael.jamet@intel.com \
    --cc=rajmohan.mani@intel.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.