IMA: use list_splice_tail_init_rcu() instead of its open coded variant
Subsystems (4)
PATCH 1/1 IMA: use list_splice_tail_init_rcu() instead of its open coded variant
Hi Mimi,
Please review and consider this patch for mainlining if it looks OK to you. I've tested it on v4.17.0-rc6 and seems to be working fine.
Petko
---
Quoted 1 line
From
e5cb36d4470cf64af2087fba4615ee8539385c98Mon Sep 17 00:00:00 2001
From: Petko Manolov <[email protected]>
Date: Fri, 18 May 2018 14:10:57 +0300
Subject: [PATCH] Replace the open coded version with
list_splice_tail_init_rcu()
Signed-off-by Petko Manolov <[email protected]>
--- security/integrity/ima/ima_policy.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-)
security/integrity/ima/ima_policy.c +2 -15
@@ -509,22 +509,9 @@ int ima_check_policy(void)*/ void ima_update_policy (void ) { -struct list_head *first, *last, *policy; +struct list_head *policy = &ima_policy_rules; -/* append current policy with the new rules */ - first = (&ima_temp_rules)->next; - last = (&ima_temp_rules)->prev; - policy = &ima_policy_rules; - -synchronize_rcu (); - - last->next = policy; -rcu_assign_pointer (list_next_rcu (policy->prev), first); - first->prev = policy->prev; - policy->prev = last; - -/* prepare for the next policy rules addition */ -INIT_LIST_HEAD (&ima_temp_rules); +list_splice_tail_init_rcu (&ima_temp_rules, policy, synchronize_rcu);if (ima_rules != policy) { ima_policy_flag =0 ;
Signature · 1 line
2.11.0
Hi Petko,
On Tue, 2018-05-22 at 17:06 +0300, Petko Manolov wrote:
The patch description is missing. Is the following ok?
Use list_splice_tail_init_rcu() to extend the existing custom IMA policy with additional IMA policy rules.
Mimi
Quoted 35 lines
Signed-off-by Petko Manolov <[email protected]>--- security/integrity/ima/ima_policy.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-)security/integrity/ima/ima_policy.c +2
-15@@ -509,22 +509,9 @@ int ima_check_policy(void)*/ void ima_update_policy (void ) { -struct list_head *first, *last, *policy; +struct list_head *policy = &ima_policy_rules; -/* append current policy with the new rules */ - first = (&ima_temp_rules)->next; - last = (&ima_temp_rules)->prev; - policy = &ima_policy_rules; - -synchronize_rcu (); - - last->next = policy; -rcu_assign_pointer (list_next_rcu (policy->prev), first); - first->prev = policy->prev; - policy->prev = last; - -/* prepare for the next policy rules addition */ -INIT_LIST_HEAD (&ima_temp_rules); +list_splice_tail_init_rcu (&ima_temp_rules, policy, synchronize_rcu);if (ima_rules != policy) { ima_policy_flag =0 ;