Skip to contentSkip to conversation

IMA: use list_splice_tail_init_rcu() instead of its open coded variant

PATCH In review Petko Manolov 2 participants 2 messages May 22, 2018 – May 23, 2018

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

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 e5cb36d4470cf64af2087fba4615ee8539385c98 Mon 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()

---
 security/integrity/ima/ima_policy.c | 17 ++---------------
 1 file changed, 2 insertions(+), 15 deletions(-)
security/integrity/ima/ima_policy.c +2 -15
index d89bebf85421..722466f843ef 100644
@@ -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
#1 lore raw

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
---
 security/integrity/ima/ima_policy.c | 17 ++---------------
 1 file changed, 2 insertions(+), 15 deletions(-)
security/integrity/ima/ima_policy.c +2 -15
index d89bebf85421..722466f843ef 100644
@@ -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;