Commit:     0bcceadceb0907094ba4e40bf9a7cd9b080f13fb
Parent:     9cd40029423701c376391da59d2c6469672b4bed
Author:     Eric Dumazet <[EMAIL PROTECTED]>
AuthorDate: Thu Jan 10 03:55:57 2008 -0800
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Thu Jan 10 03:55:57 2008 -0800

    [IPV4] ROUTE: fix rcu_dereference() uses in /proc/net/rt_cache
    In rt_cache_get_next(), no need to guard seq->private by a
    rcu_dereference() since seq is private to the thread running this
    function. Reading seq.private once (as guaranted bu rcu_dereference())
    or several time if compiler really is dumb enough wont change the
    But we miss real spots where rcu_dereference() are needed, both in
    rt_cache_get_first() and rt_cache_get_next()
    Signed-off-by: Eric Dumazet <[EMAIL PROTECTED]>
    Signed-off-by: Herbert Xu <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
 net/ipv4/route.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index d337706..28484f3 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -283,12 +283,12 @@ static struct rtable *rt_cache_get_first(struct seq_file 
-       return r;
+       return rcu_dereference(r);
 static struct rtable *rt_cache_get_next(struct seq_file *seq, struct rtable *r)
-       struct rt_cache_iter_state *st = rcu_dereference(seq->private);
+       struct rt_cache_iter_state *st = seq->private;
        r = r->u.dst.rt_next;
        while (!r) {
@@ -298,7 +298,7 @@ static struct rtable *rt_cache_get_next(struct seq_file 
*seq, struct rtable *r)
                r = rt_hash_table[st->bucket].chain;
-       return r;
+       return rcu_dereference(r);
 static struct rtable *rt_cache_get_idx(struct seq_file *seq, loff_t pos)
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to