Nikolay Aleksandrov
2018-May-28 15:52 UTC
[Bridge] [PATCH net-next] net: bridge: Lock before br_fdb_find()
On 28/05/18 18:44, Petr Machata wrote:> Callers of br_fdb_find() need to hold the hash lock, which > br_fdb_find_port() doesn't do. Add the missing lock/unlock > pair. > > Signed-off-by: Petr Machata <petrm at mellanox.com> > --- > net/bridge/br_fdb.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c > index b19e310..3f5691a 100644 > --- a/net/bridge/br_fdb.c > +++ b/net/bridge/br_fdb.c > @@ -135,9 +135,11 @@ struct net_device *br_fdb_find_port(const struct net_device *br_dev, > return NULL; > > br = netdev_priv(br_dev); > + spin_lock_bh(&br->hash_lock); > f = br_fdb_find(br, addr, vid); > if (f && f->dst) > dev = f->dst->dev; > + spin_unlock_bh(&br->hash_lock); > > return dev; > } >There's also a lockdep assert for hash_lock in br_find_fdb(). Acked-by: Nikolay Aleksandrov <nikolay at cumulusnetworks.com>
Nikolay Aleksandrov
2018-May-28 15:53 UTC
[Bridge] [PATCH net-next] net: bridge: Lock before br_fdb_find()
On 28/05/18 18:52, Nikolay Aleksandrov wrote:> On 28/05/18 18:44, Petr Machata wrote: >> Callers of br_fdb_find() need to hold the hash lock, which >> br_fdb_find_port() doesn't do. Add the missing lock/unlock >> pair. >> >> Signed-off-by: Petr Machata <petrm at mellanox.com> >> --- >> net/bridge/br_fdb.c | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c >> index b19e310..3f5691a 100644 >> --- a/net/bridge/br_fdb.c >> +++ b/net/bridge/br_fdb.c >> @@ -135,9 +135,11 @@ struct net_device *br_fdb_find_port(const struct net_device *br_dev, >> return NULL; >> >> br = netdev_priv(br_dev); >> + spin_lock_bh(&br->hash_lock); >> f = br_fdb_find(br, addr, vid); >> if (f && f->dst) >> dev = f->dst->dev; >> + spin_unlock_bh(&br->hash_lock); >> >> return dev; >> } >> > > There's also a lockdep assert for hash_lock in br_find_fdb(). > > Acked-by: Nikolay Aleksandrov <nikolay at cumulusnetworks.com> >Fixes: 4d4fd36126d6 ("net: bridge: Publish bridge accessor functions")