summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2004-09-22 23:17:16 -0700
committerDavid S. Miller <davem@kernel.bkbits.net>2004-09-22 23:17:16 -0700
commit6874d725c31099662b52df53e41a80c30d138fc0 (patch)
tree655bbb963e8cbae1e34203375151290bc387ff26
parent6d3c52b4073f7c87bb22bba0a1931f191d04c20e (diff)
[IPV4]: Fix endless loop in fn_hash_delete.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv4/fib_hash.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/ipv4/fib_hash.c b/net/ipv4/fib_hash.c
index 7a7a5c819bcf..ea2d7c675e42 100644
--- a/net/ipv4/fib_hash.c
+++ b/net/ipv4/fib_hash.c
@@ -609,6 +609,7 @@ fn_hash_delete(struct fib_table *tb, struct rtmsg *r, struct kern_rta *rta,
struct fn_hash *table = (struct fn_hash*)tb->tb_data;
struct fib_node *f;
struct fib_alias *fa, *fa_to_delete;
+ struct list_head *fa_head;
int z = r->rtm_dst_len;
struct fn_zone *fz;
u32 key;
@@ -634,7 +635,8 @@ fn_hash_delete(struct fib_table *tb, struct rtmsg *r, struct kern_rta *rta,
return -ESRCH;
fa_to_delete = NULL;
- list_for_each_entry(fa, fa->fa_list.prev, fa_list) {
+ fa_head = fa->fa_list.prev;
+ list_for_each_entry(fa, fa_head, fa_list) {
struct fib_info *fi = fa->fa_info;
if ((!r->rtm_type ||