diff options
author | Paul Moore <paul.moore@hp.com> | 2007-08-07 20:53:10 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-08-07 20:53:10 -0400 |
commit | 3482fd9099e8aab8b8096eb6da93571ea5a0b4c2 (patch) | |
tree | 6ea34d94e11d42738fbac12c0934ed973a990908 /net/netlabel | |
parent | 4a2a4df7b6db25df8f3d5cc6dd0b096119359d92 (diff) |
[NetLabel]: add missing rcu_dereference() calls in the LSM domain mapping hash table
The LSM domain mapping head table pointer was not being referenced via the RCU
safe dereferencing function, rcu_dereference(). This patch adds those missing
calls to the NetLabel code.
This has been tested using recent linux-2.6 git kernels with no visible
regressions.
Signed-off-by: Paul Moore <paul.moore@hp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netlabel')
-rw-r--r-- | net/netlabel/netlabel_domainhash.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/net/netlabel/netlabel_domainhash.c b/net/netlabel/netlabel_domainhash.c index f46a0aeec44f..b6c844b7e1c1 100644 --- a/net/netlabel/netlabel_domainhash.c +++ b/net/netlabel/netlabel_domainhash.c | |||
@@ -126,7 +126,9 @@ static struct netlbl_dom_map *netlbl_domhsh_search(const char *domain, u32 def) | |||
126 | 126 | ||
127 | if (domain != NULL) { | 127 | if (domain != NULL) { |
128 | bkt = netlbl_domhsh_hash(domain); | 128 | bkt = netlbl_domhsh_hash(domain); |
129 | list_for_each_entry_rcu(iter, &netlbl_domhsh->tbl[bkt], list) | 129 | list_for_each_entry_rcu(iter, |
130 | &rcu_dereference(netlbl_domhsh)->tbl[bkt], | ||
131 | list) | ||
130 | if (iter->valid && strcmp(iter->domain, domain) == 0) | 132 | if (iter->valid && strcmp(iter->domain, domain) == 0) |
131 | return iter; | 133 | return iter; |
132 | } | 134 | } |
@@ -227,7 +229,7 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry, | |||
227 | spin_lock(&netlbl_domhsh_lock); | 229 | spin_lock(&netlbl_domhsh_lock); |
228 | if (netlbl_domhsh_search(entry->domain, 0) == NULL) | 230 | if (netlbl_domhsh_search(entry->domain, 0) == NULL) |
229 | list_add_tail_rcu(&entry->list, | 231 | list_add_tail_rcu(&entry->list, |
230 | &netlbl_domhsh->tbl[bkt]); | 232 | &rcu_dereference(netlbl_domhsh)->tbl[bkt]); |
231 | else | 233 | else |
232 | ret_val = -EEXIST; | 234 | ret_val = -EEXIST; |
233 | spin_unlock(&netlbl_domhsh_lock); | 235 | spin_unlock(&netlbl_domhsh_lock); |
@@ -423,8 +425,8 @@ int netlbl_domhsh_walk(u32 *skip_bkt, | |||
423 | iter_bkt < rcu_dereference(netlbl_domhsh)->size; | 425 | iter_bkt < rcu_dereference(netlbl_domhsh)->size; |
424 | iter_bkt++, chain_cnt = 0) { | 426 | iter_bkt++, chain_cnt = 0) { |
425 | list_for_each_entry_rcu(iter_entry, | 427 | list_for_each_entry_rcu(iter_entry, |
426 | &netlbl_domhsh->tbl[iter_bkt], | 428 | &rcu_dereference(netlbl_domhsh)->tbl[iter_bkt], |
427 | list) | 429 | list) |
428 | if (iter_entry->valid) { | 430 | if (iter_entry->valid) { |
429 | if (chain_cnt++ < *skip_chain) | 431 | if (chain_cnt++ < *skip_chain) |
430 | continue; | 432 | continue; |