inetpeer: fix RCU lookup() again
authorEric Dumazet <edumazet@google.com>
Mon, 25 Sep 2017 15:40:02 +0000 (08:40 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 28 Sep 2017 16:39:34 +0000 (09:39 -0700)
My prior fix was not complete, as we were dereferencing a pointer
three times per node, not twice as I initially thought.

Fixes: 4cc5b44b29a9 ("inetpeer: fix RCU lookup()")
Fixes: b145425f269a ("inetpeer: remove AVL implementation in favor of RB tree")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/inetpeer.c

index e7eb590..b20c8ac 100644 (file)
@@ -128,9 +128,9 @@ static struct inet_peer *lookup(const struct inetpeer_addr *daddr,
                        break;
                }
                if (cmp == -1)
-                       pp = &(*pp)->rb_left;
+                       pp = &next->rb_left;
                else
-                       pp = &(*pp)->rb_right;
+                       pp = &next->rb_right;
        }
        *parent_p = parent;
        *pp_p = pp;