From: steven chen <chenste@linux.microsoft.com>
To: zohar@linux.ibm.com, stefanb@linux.ibm.com,
roberto.sassu@huaweicloud.com, roberto.sassu@huawei.com,
eric.snowberg@oracle.com, ebiederm@xmission.com,
paul@paul-moore.com, code@tyhicks.com, bauermann@kolabnow.com,
linux-integrity@vger.kernel.org, kexec@lists.infradead.org,
linux-security-module@vger.kernel.org,
linux-kernel@vger.kernel.org
Cc: madvenka@linux.microsoft.com, nramas@linux.microsoft.com,
James.Bottomley@HansenPartnership.com, bhe@redhat.com,
vgoyal@redhat.com, dyoung@redhat.com
Subject: [PATCH v11 1/9] ima: rename variable the set_file "file" to "ima_kexec_file"
Date: Wed, 2 Apr 2025 05:47:14 -0700 [thread overview]
Message-ID: <20250402124725.5601-2-chenste@linux.microsoft.com> (raw)
In-Reply-To: <20250402124725.5601-1-chenste@linux.microsoft.com>
The current kernel behavior is IMA measurements snapshot is taken at
kexec 'load' and not at kexec 'execute'. IMA log is then carried
over to the new kernel after kexec 'execute'. However, the time gap
between kexec load and kexec reboot can be very long. During this
time window, new events extended into TPM PCRs miss the chance
to be carried over to the second kernel.
To address the above, the following approach is proposed:
- Allocate the necessary buffer during the kexec load phase.
- Populate this buffer with the IMA measurements during
the kexec execute phase.
In the current implementation, a local variable "file" of type seq_file
is used in the API ima_dump_measurement_list() to store the IMA measurements
to be carried over across kexec system call. To make this buffer accessible
at kexec 'execute' time, rename it to "ima_kexec_file" before making it
a file variable to better reflect its purpose.
Renaming the local variable "file" of type seq_file defined in the
ima_dump_measurement_list function to "ima_kexec_file" will improve code
readability and maintainability by making the variable's role more explicit.
Suggested-by: Mimi Zohar <zohar@linux.ibm.com>
Signed-off-by: steven chen <chenste@linux.microsoft.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
---
security/integrity/ima/ima_kexec.c | 31 +++++++++++++++---------------
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/security/integrity/ima/ima_kexec.c b/security/integrity/ima/ima_kexec.c
index 9d45f4d26f73..650beb74346c 100644
--- a/security/integrity/ima/ima_kexec.c
+++ b/security/integrity/ima/ima_kexec.c
@@ -18,30 +18,30 @@
static int ima_dump_measurement_list(unsigned long *buffer_size, void **buffer,
unsigned long segment_size)
{
+ struct seq_file ima_kexec_file;
struct ima_queue_entry *qe;
- struct seq_file file;
struct ima_kexec_hdr khdr;
int ret = 0;
/* segment size can't change between kexec load and execute */
- file.buf = vmalloc(segment_size);
- if (!file.buf) {
+ ima_kexec_file.buf = vmalloc(segment_size);
+ if (!ima_kexec_file.buf) {
ret = -ENOMEM;
goto out;
}
- file.file = NULL;
- file.size = segment_size;
- file.read_pos = 0;
- file.count = sizeof(khdr); /* reserved space */
+ ima_kexec_file.file = NULL;
+ ima_kexec_file.size = segment_size;
+ ima_kexec_file.read_pos = 0;
+ ima_kexec_file.count = sizeof(khdr); /* reserved space */
memset(&khdr, 0, sizeof(khdr));
khdr.version = 1;
/* This is an append-only list, no need to hold the RCU read lock */
list_for_each_entry_rcu(qe, &ima_measurements, later, true) {
- if (file.count < file.size) {
+ if (ima_kexec_file.count < ima_kexec_file.size) {
khdr.count++;
- ima_measurements_show(&file, qe);
+ ima_measurements_show(&ima_kexec_file, qe);
} else {
ret = -EINVAL;
break;
@@ -55,23 +55,24 @@ static int ima_dump_measurement_list(unsigned long *buffer_size, void **buffer,
* fill in reserved space with some buffer details
* (eg. version, buffer size, number of measurements)
*/
- khdr.buffer_size = file.count;
+ khdr.buffer_size = ima_kexec_file.count;
if (ima_canonical_fmt) {
khdr.version = cpu_to_le16(khdr.version);
khdr.count = cpu_to_le64(khdr.count);
khdr.buffer_size = cpu_to_le64(khdr.buffer_size);
}
- memcpy(file.buf, &khdr, sizeof(khdr));
+ memcpy(ima_kexec_file.buf, &khdr, sizeof(khdr));
print_hex_dump_debug("ima dump: ", DUMP_PREFIX_NONE, 16, 1,
- file.buf, file.count < 100 ? file.count : 100,
+ ima_kexec_file.buf, ima_kexec_file.count < 100 ?
+ ima_kexec_file.count : 100,
true);
- *buffer_size = file.count;
- *buffer = file.buf;
+ *buffer_size = ima_kexec_file.count;
+ *buffer = ima_kexec_file.buf;
out:
if (ret == -EINVAL)
- vfree(file.buf);
+ vfree(ima_kexec_file.buf);
return ret;
}
--
2.25.1
next prev parent reply other threads:[~2025-04-02 12:47 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-02 12:47 [PATCH v11 0/9] ima: kexec: measure events between kexec load and execute steven chen
2025-04-02 12:47 ` steven chen [this message]
2025-04-08 2:23 ` [PATCH v11 1/9] ima: rename variable the set_file "file" to "ima_kexec_file" Baoquan He
2025-04-08 4:37 ` Mimi Zohar
2025-04-02 12:47 ` [PATCH v11 2/9] ima: define and call ima_alloc_kexec_file_buf() steven chen
2025-04-08 2:58 ` Baoquan He
2025-04-08 4:07 ` Mimi Zohar
2025-04-08 4:39 ` Baoquan He
2025-04-08 5:03 ` Mimi Zohar
2025-04-08 8:18 ` Baoquan He
2025-04-08 12:23 ` Mimi Zohar
2025-04-08 15:02 ` Baoquan He
2025-04-02 12:47 ` [PATCH v11 3/9] kexec: define functions to map and unmap segments steven chen
2025-04-08 3:10 ` Baoquan He
2025-04-10 14:11 ` steven chen
2025-04-02 12:47 ` [PATCH v11 4/9] ima: kexec: skip IMA segment validation after kexec soft reboot steven chen
2025-04-08 3:17 ` Baoquan He
2025-04-10 14:12 ` steven chen
2025-04-02 12:47 ` [PATCH v11 5/9] ima: kexec: define functions to copy IMA log at soft boot steven chen
2025-04-08 14:21 ` Mimi Zohar
2025-04-10 14:13 ` steven chen
2025-04-02 12:47 ` [PATCH v11 6/9] ima: kexec: move IMA log copy from kexec load to execute steven chen
2025-04-08 16:17 ` Mimi Zohar
2025-04-10 14:15 ` steven chen
2025-04-02 12:47 ` [PATCH v11 7/9] ima: verify if the segment size has changed steven chen
2025-04-08 3:54 ` Baoquan He
2025-04-08 14:22 ` Mimi Zohar
2025-04-02 12:47 ` [PATCH v11 8/9] ima: make the kexec extra memory configurable steven chen
2025-04-10 9:54 ` Baoquan He
2025-04-10 16:59 ` steven chen
2025-04-10 18:04 ` Mimi Zohar
2025-04-10 18:49 ` steven chen
2025-04-10 19:47 ` Mimi Zohar
2025-04-02 12:47 ` [PATCH v11 9/9] ima: measure kexec load and exec events as critical data steven chen
2025-04-08 16:31 ` Mimi Zohar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250402124725.5601-2-chenste@linux.microsoft.com \
--to=chenste@linux.microsoft.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=bauermann@kolabnow.com \
--cc=bhe@redhat.com \
--cc=code@tyhicks.com \
--cc=dyoung@redhat.com \
--cc=ebiederm@xmission.com \
--cc=eric.snowberg@oracle.com \
--cc=kexec@lists.infradead.org \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=madvenka@linux.microsoft.com \
--cc=nramas@linux.microsoft.com \
--cc=paul@paul-moore.com \
--cc=roberto.sassu@huawei.com \
--cc=roberto.sassu@huaweicloud.com \
--cc=stefanb@linux.ibm.com \
--cc=vgoyal@redhat.com \
--cc=zohar@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).