Skip to content

Commit dcfc569

Browse files
Mimi Zohartorvalds
authored andcommitted
ima: permit duplicate measurement list entries
Measurements carried across kexec need to be added to the IMA measurement list, but should not prevent measurements of the newly booted kernel from being added to the measurement list. This patch adds support for allowing duplicate measurements. The "boot_aggregate" measurement entry is the delimiter between soft boots. Link: http://lkml.kernel.org/r/1480554346-29071-4-git-send-email-zohar@linux.vnet.ibm.com Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com> Acked-by: Dmitry Kasatkin <dmitry.kasatkin@gmail.com> Cc: Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Andreas Steffen <andreas.steffen@strongswan.org> Cc: Josh Sklar <sklar@linux.vnet.ibm.com> Cc: Dave Young <dyoung@redhat.com> Cc: Vivek Goyal <vgoyal@redhat.com> Cc: Baoquan He <bhe@redhat.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Stewart Smith <stewart@linux.vnet.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 94c3aac commit dcfc569

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

security/integrity/ima/ima_queue.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,13 @@ static struct ima_queue_entry *ima_lookup_digest_entry(u8 *digest_value,
6565
}
6666

6767
/* ima_add_template_entry helper function:
68-
* - Add template entry to measurement list and hash table.
68+
* - Add template entry to the measurement list and hash table, for
69+
* all entries except those carried across kexec.
6970
*
7071
* (Called with ima_extend_list_mutex held.)
7172
*/
72-
static int ima_add_digest_entry(struct ima_template_entry *entry)
73+
static int ima_add_digest_entry(struct ima_template_entry *entry,
74+
bool update_htable)
7375
{
7476
struct ima_queue_entry *qe;
7577
unsigned int key;
@@ -85,8 +87,10 @@ static int ima_add_digest_entry(struct ima_template_entry *entry)
8587
list_add_tail_rcu(&qe->later, &ima_measurements);
8688

8789
atomic_long_inc(&ima_htable.len);
88-
key = ima_hash_key(entry->digest);
89-
hlist_add_head_rcu(&qe->hnext, &ima_htable.queue[key]);
90+
if (update_htable) {
91+
key = ima_hash_key(entry->digest);
92+
hlist_add_head_rcu(&qe->hnext, &ima_htable.queue[key]);
93+
}
9094
return 0;
9195
}
9296

@@ -126,7 +130,7 @@ int ima_add_template_entry(struct ima_template_entry *entry, int violation,
126130
}
127131
}
128132

129-
result = ima_add_digest_entry(entry);
133+
result = ima_add_digest_entry(entry, 1);
130134
if (result < 0) {
131135
audit_cause = "ENOMEM";
132136
audit_info = 0;
@@ -155,7 +159,7 @@ int ima_restore_measurement_entry(struct ima_template_entry *entry)
155159
int result = 0;
156160

157161
mutex_lock(&ima_extend_list_mutex);
158-
result = ima_add_digest_entry(entry);
162+
result = ima_add_digest_entry(entry, 0);
159163
mutex_unlock(&ima_extend_list_mutex);
160164
return result;
161165
}

0 commit comments

Comments
 (0)