decnet: Don't leak entries when rebuilding zone.
authorDavid S. Miller <davem@davemloft.net>
Mon, 18 Apr 2011 03:47:07 +0000 (20:47 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 18 Apr 2011 03:47:07 +0000 (20:47 -0700)
As noticed by Ben Hutchings, when we move entries from
one table to another we leak all except the first entry.

Put back the "next" variable removed by commit
9bf9055eb716f85372c41b3fbc51f90bc7653740 ("decnet: Fix set-but-unused
variable.") and use it properly.

Reported-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/decnet/dn_table.c

index d8ea583..bd0a52d 100644 (file)
@@ -123,11 +123,12 @@ static inline void dn_rebuild_zone(struct dn_zone *dz,
                                   struct dn_fib_node **old_ht,
                                   int old_divisor)
 {
+       struct dn_fib_node *f, **fp, *next;
        int i;
-       struct dn_fib_node *f, **fp;
 
        for(i = 0; i < old_divisor; i++) {
-               for(f = old_ht[i]; f; f = f->fn_next) {
+               for(f = old_ht[i]; f; f = next) {
+                       next = f->fn_next;
                        for(fp = dn_chain_p(f->fn_key, dz);
                                *fp && dn_key_leq((*fp)->fn_key, f->fn_key);
                                fp = &(*fp)->fn_next)