From b74cf10e55858ee4c2c320c3112ea009aa88feee Mon Sep 17 00:00:00 2001 From: Michael Wang Date: Thu, 16 Aug 2012 18:33:39 +0000 Subject: [PATCH] --- yaml --- r: 327582 b: refs/heads/master c: 6705e86724f1ac83394592be7dbfc0c07ac25aa2 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/netfilter/core.c | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index f9daae861f95..0009d2a45563 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2834a6386b86a5dd20380aadb01897c525448aa7 +refs/heads/master: 6705e86724f1ac83394592be7dbfc0c07ac25aa2 diff --git a/trunk/net/netfilter/core.c b/trunk/net/netfilter/core.c index 0bc6b60db4df..8f4b0b2b6f80 100644 --- a/trunk/net/netfilter/core.c +++ b/trunk/net/netfilter/core.c @@ -131,14 +131,13 @@ unsigned int nf_iterate(struct list_head *head, int hook_thresh) { unsigned int verdict; + struct nf_hook_ops *elem = list_entry_rcu(*i, struct nf_hook_ops, list); /* * The caller must not block between calls to this * function because of risk of continuing from deleted element. */ - list_for_each_continue_rcu(*i, head) { - struct nf_hook_ops *elem = (struct nf_hook_ops *)*i; - + list_for_each_entry_continue_rcu(elem, head, list) { if (hook_thresh > elem->priority) continue; @@ -155,11 +154,14 @@ unsigned int nf_iterate(struct list_head *head, continue; } #endif - if (verdict != NF_REPEAT) + if (verdict != NF_REPEAT) { + *i = &elem->list; return verdict; + } goto repeat; } } + *i = &elem->list; return NF_ACCEPT; }