From 46b5ab1a7cfef72cc15e9de135650851619bc406 Mon Sep 17 00:00:00 2001 From: David Ahern Date: Wed, 26 Oct 2016 13:21:33 -0700 Subject: [PATCH] net: dev: Fix non-RCU based lower dev walker netdev_walk_all_lower_dev is not properly walking the lower device list. Commit 1a3f060c1a47 made netdev_walk_all_lower_dev similar to netdev_walk_all_upper_dev_rcu and netdev_walk_all_lower_dev_rcu but failed to update its netdev_next_lower_dev iterator. This patch fixes that. Fixes: 1a3f060c1a47 ("net: Introduce new api for walking upper and lower devices") Reported-by: Ido Schimmel Signed-off-by: David Ahern Tested-by: Ido Schimmel Signed-off-by: David S. Miller --- net/core/dev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index f55fb4536016..6aa43cd8cbb5 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -5400,12 +5400,12 @@ static struct net_device *netdev_next_lower_dev(struct net_device *dev, { struct netdev_adjacent *lower; - lower = list_entry(*iter, struct netdev_adjacent, list); + lower = list_entry((*iter)->next, struct netdev_adjacent, list); if (&lower->list == &dev->adj_list.lower) return NULL; - *iter = lower->list.next; + *iter = &lower->list; return lower->dev; } -- 2.20.1