Message ID | 1381623217-5883-1-git-send-email-baker.kernel@gmail.com |
---|---|
State | Rejected, archived |
Delegated to: | David Miller |
Headers | show |
On Sun, 2013-10-13 at 08:13 +0800, baker.kernel@gmail.com wrote: > From: "baker.zhang" <baker.kernel@gmail.com> > > fib_table_lookup has included the rcu lock protection. > > Signed-off-by: baker.zhang <baker.kernel@gmail.com> > --- > net/ipv4/fib_frontend.c | 4 ---- > 1 file changed, 4 deletions(-) > > diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c > index b3f627a..0e9127d 100644 > --- a/net/ipv4/fib_frontend.c > +++ b/net/ipv4/fib_frontend.c > @@ -170,12 +170,10 @@ static inline unsigned int __inet_dev_addr_type(struct net *net, > local_table = fib_get_table(net, RT_TABLE_LOCAL); > if (local_table) { > ret = RTN_UNICAST; > - rcu_read_lock(); > if (!fib_table_lookup(local_table, &fl4, &res, FIB_LOOKUP_NOREF)) { > if (!dev || dev == res.fi->fib_dev) > ret = res.type; > } > - rcu_read_unlock(); > } This looks very wrong. res.fi could disappear, and we crash. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index b3f627a..0e9127d 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c @@ -170,12 +170,10 @@ static inline unsigned int __inet_dev_addr_type(struct net *net, local_table = fib_get_table(net, RT_TABLE_LOCAL); if (local_table) { ret = RTN_UNICAST; - rcu_read_lock(); if (!fib_table_lookup(local_table, &fl4, &res, FIB_LOOKUP_NOREF)) { if (!dev || dev == res.fi->fib_dev) ret = res.type; } - rcu_read_unlock(); } return ret; } @@ -933,7 +931,6 @@ static void nl_fib_lookup(struct fib_result_nl *frn, struct fib_table *tb) local_bh_disable(); frn->tb_id = tb->tb_id; - rcu_read_lock(); frn->err = fib_table_lookup(tb, &fl4, &res, FIB_LOOKUP_NOREF); if (!frn->err) { @@ -942,7 +939,6 @@ static void nl_fib_lookup(struct fib_result_nl *frn, struct fib_table *tb) frn->type = res.type; frn->scope = res.scope; } - rcu_read_unlock(); local_bh_enable(); } }