All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Berger <stefanb@linux.ibm.com>
To: Tushar Sugandhi <tusharsu@linux.microsoft.com>,
	zohar@linux.ibm.com, noodles@fb.com, bauermann@kolabnow.com,
	kexec@lists.infradead.org, linux-integrity@vger.kernel.org
Cc: code@tyhicks.com, nramas@linux.microsoft.com, paul@paul-moore.com
Subject: Re: [PATCH 05/10] kexec: implement functions to map and unmap segment to kimage
Date: Fri, 7 Jul 2023 08:28:17 -0400	[thread overview]
Message-ID: <ab4c5f9a-5b70-5d45-80d9-2ec48ea49913@linux.ibm.com> (raw)
In-Reply-To: <20230703215709.1195644-6-tusharsu@linux.microsoft.com>



On 7/3/23 17:57, Tushar Sugandhi wrote:
> Currently, there's no mechanism to map and unmap segments to the kimage
> structure.  This functionality is needed when dealing with memory segments
> in the context of a kexec operation.
> 
> The patch adds two new functions: kimage_map_segment() and
> kimage_unmap_segment().
> 
> Implement kimage_map_segment() which takes a kimage pointer, an address,
> and a size.  Ensures that the entire segment is being mapped by comparing
> the given address and size to each segment in the kimage's segment array.
> Collect the source pages that correspond to the given address range,
> allocate an array of pointers to these pages, and map them to a contiguous
> range of virtual addresses.  If the mapping operation is successful, the
> function returns the start of this range.  Otherwise, it frees the page
> pointer array and returns NULL.
> 
> Implement kimage_unmap_segment() that takes a pointer to a segment buffer
> and unmaps it using vunmap().
> 
> Finally, move for_each_kimage_entry() macro to kexec.h.
> 
> Note: Use kimage_map_segment() and kimage_unmap_segment() carefully to
> avoid memory leaks and ensure that all mapped segments are properly
> unmapped when they're no longer needed.
> 
> Signed-off-by: Tushar Sugandhi <tusharsu@linux.microsoft.com>

> +
> +	i = 0;
> +	for_each_kimage_entry(image, ptr, entry) {
> +		if (entry & IND_DESTINATION)
> +			dest_page_addr = entry & PAGE_MASK;
> +		else if (entry & IND_SOURCE) {
> +			if (dest_page_addr >= addr && dest_page_addr < eaddr) {
> +				src_page_addr = entry & PAGE_MASK;
> +				src_pages[i++] = phys_to_page(src_page_addr);

Since phys_to_page is not defined on many/most architectures I change it for ppc64 and have successfully used the following:

+                               src_pages[i++] = virt_to_page(__va(src_page_addr))


After several kexecs the following check still works:

# evmctl ima_measurement --ignore-violations /sys/kernel/security/ima/binary_runtime_measurements
Matched per TPM bank calculated digest(s).


    Stefan


WARNING: multiple messages have this Message-ID (diff)
From: Stefan Berger <stefanb@linux.ibm.com>
To: Tushar Sugandhi <tusharsu@linux.microsoft.com>,
	zohar@linux.ibm.com, noodles@fb.com, bauermann@kolabnow.com,
	kexec@lists.infradead.org, linux-integrity@vger.kernel.org
Cc: code@tyhicks.com, nramas@linux.microsoft.com, paul@paul-moore.com
Subject: Re: [PATCH 05/10] kexec: implement functions to map and unmap segment to kimage
Date: Fri, 7 Jul 2023 08:28:17 -0400	[thread overview]
Message-ID: <ab4c5f9a-5b70-5d45-80d9-2ec48ea49913@linux.ibm.com> (raw)
In-Reply-To: <20230703215709.1195644-6-tusharsu@linux.microsoft.com>



On 7/3/23 17:57, Tushar Sugandhi wrote:
> Currently, there's no mechanism to map and unmap segments to the kimage
> structure.  This functionality is needed when dealing with memory segments
> in the context of a kexec operation.
> 
> The patch adds two new functions: kimage_map_segment() and
> kimage_unmap_segment().
> 
> Implement kimage_map_segment() which takes a kimage pointer, an address,
> and a size.  Ensures that the entire segment is being mapped by comparing
> the given address and size to each segment in the kimage's segment array.
> Collect the source pages that correspond to the given address range,
> allocate an array of pointers to these pages, and map them to a contiguous
> range of virtual addresses.  If the mapping operation is successful, the
> function returns the start of this range.  Otherwise, it frees the page
> pointer array and returns NULL.
> 
> Implement kimage_unmap_segment() that takes a pointer to a segment buffer
> and unmaps it using vunmap().
> 
> Finally, move for_each_kimage_entry() macro to kexec.h.
> 
> Note: Use kimage_map_segment() and kimage_unmap_segment() carefully to
> avoid memory leaks and ensure that all mapped segments are properly
> unmapped when they're no longer needed.
> 
> Signed-off-by: Tushar Sugandhi <tusharsu@linux.microsoft.com>

> +
> +	i = 0;
> +	for_each_kimage_entry(image, ptr, entry) {
> +		if (entry & IND_DESTINATION)
> +			dest_page_addr = entry & PAGE_MASK;
> +		else if (entry & IND_SOURCE) {
> +			if (dest_page_addr >= addr && dest_page_addr < eaddr) {
> +				src_page_addr = entry & PAGE_MASK;
> +				src_pages[i++] = phys_to_page(src_page_addr);

Since phys_to_page is not defined on many/most architectures I change it for ppc64 and have successfully used the following:

+                               src_pages[i++] = virt_to_page(__va(src_page_addr))


After several kexecs the following check still works:

# evmctl ima_measurement --ignore-violations /sys/kernel/security/ima/binary_runtime_measurements
Matched per TPM bank calculated digest(s).


    Stefan


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

  reply	other threads:[~2023-07-07 12:28 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-03 21:56 [PATCH 00/10] ima: measure events between kexec load and execute Tushar Sugandhi
2023-07-03 21:56 ` Tushar Sugandhi
2023-07-03 21:57 ` [PATCH 01/10] ima: implement function to allocate buffer at kexec load Tushar Sugandhi
2023-07-03 21:57   ` Tushar Sugandhi
2023-07-07 13:00   ` Mimi Zohar
2023-07-07 13:00     ` Mimi Zohar
2023-07-11 17:59     ` Tushar Sugandhi
2023-07-11 17:59       ` Tushar Sugandhi
2023-07-11 21:11       ` Mimi Zohar
2023-07-11 21:11         ` Mimi Zohar
2023-07-12 19:49         ` Tushar Sugandhi
2023-07-12 19:49           ` Tushar Sugandhi
2023-07-03 21:57 ` [PATCH 02/10] ima: implement function to populate buffer at kexec execute Tushar Sugandhi
2023-07-03 21:57   ` Tushar Sugandhi
2023-07-07 13:00   ` Mimi Zohar
2023-07-07 13:00     ` Mimi Zohar
2023-07-11 18:05     ` Tushar Sugandhi
2023-07-11 18:05       ` Tushar Sugandhi
2023-07-03 21:57 ` [PATCH 03/10] ima: allocate buffer at kexec load to hold ima measurements Tushar Sugandhi
2023-07-03 21:57   ` Tushar Sugandhi
2023-07-07 13:01   ` Mimi Zohar
2023-07-07 13:01     ` Mimi Zohar
2023-07-11 18:31     ` Tushar Sugandhi
2023-07-11 18:31       ` Tushar Sugandhi
2023-07-11 20:16   ` Stefan Berger
2023-07-11 20:16     ` Stefan Berger
2023-07-12 19:39     ` Tushar Sugandhi
2023-07-12 19:39       ` Tushar Sugandhi
2023-07-03 21:57 ` [PATCH 04/10] ima: implement functions to suspend and resume measurements Tushar Sugandhi
2023-07-03 21:57   ` Tushar Sugandhi
2023-07-03 21:57 ` [PATCH 05/10] kexec: implement functions to map and unmap segment to kimage Tushar Sugandhi
2023-07-03 21:57   ` Tushar Sugandhi
2023-07-07 12:28   ` Stefan Berger [this message]
2023-07-07 12:28     ` Stefan Berger
2023-07-11 18:41     ` Tushar Sugandhi
2023-07-11 18:41       ` Tushar Sugandhi
2023-07-11 19:19       ` Stefan Berger
2023-07-11 19:19         ` Stefan Berger
2023-07-12 19:51         ` Tushar Sugandhi
2023-07-12 19:51           ` Tushar Sugandhi
2023-07-03 21:57 ` [PATCH 06/10] ima: update buffer at kexec execute with ima measurements Tushar Sugandhi
2023-07-03 21:57   ` Tushar Sugandhi
2023-07-07 15:01   ` Mimi Zohar
2023-07-07 15:01     ` Mimi Zohar
2023-07-07 19:49     ` Mimi Zohar
2023-07-07 19:49       ` Mimi Zohar
2023-07-11 19:08       ` Tushar Sugandhi
2023-07-11 19:08         ` Tushar Sugandhi
2023-07-12 15:45         ` Mimi Zohar
2023-07-12 15:45           ` Mimi Zohar
2023-07-11 19:05     ` Tushar Sugandhi
2023-07-11 19:05       ` Tushar Sugandhi
2023-07-03 21:57 ` [PATCH 07/10] ima: remove function ima_dump_measurement_list Tushar Sugandhi
2023-07-03 21:57   ` Tushar Sugandhi
2023-07-07 13:55   ` Mimi Zohar
2023-07-07 13:55     ` Mimi Zohar
2023-07-11 19:11     ` Tushar Sugandhi
2023-07-11 19:11       ` Tushar Sugandhi
2023-07-03 21:57 ` [PATCH 08/10] ima: implement and register a reboot notifier function to update kexec buffer Tushar Sugandhi
2023-07-03 21:57   ` Tushar Sugandhi
2023-07-03 21:57 ` [PATCH 09/10] ima: suspend measurements while the kexec buffer is being copied Tushar Sugandhi
2023-07-03 21:57   ` Tushar Sugandhi
2023-07-03 21:57 ` [PATCH 10/10] kexec: update kexec_file_load syscall to call ima_kexec_post_load Tushar Sugandhi
2023-07-03 21:57   ` Tushar Sugandhi
2023-07-07  8:20   ` RuiRui Yang
2023-07-07  8:20     ` RuiRui Yang
2023-07-11 19:14     ` Tushar Sugandhi
2023-07-11 19:14       ` Tushar Sugandhi
2023-07-12  1:28       ` RuiRui Yang
2023-07-12  1:28         ` RuiRui Yang
2023-07-12 19:30         ` Tushar Sugandhi
2023-07-12 19:30           ` Tushar Sugandhi
2023-07-07  8:18 ` [PATCH 00/10] ima: measure events between kexec load and execute Dave Young
2023-07-07  8:18   ` Dave Young
2023-07-11 17:52   ` Tushar Sugandhi
2023-07-11 17:52     ` Tushar Sugandhi
2023-07-07 15:55 ` Mimi Zohar
2023-07-07 15:55   ` Mimi Zohar
2023-07-11 17:51   ` Tushar Sugandhi
2023-07-11 17:51     ` Tushar Sugandhi
2023-09-22 18:59     ` Tushar Sugandhi
2023-09-22 18:59       ` Tushar Sugandhi

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=ab4c5f9a-5b70-5d45-80d9-2ec48ea49913@linux.ibm.com \
    --to=stefanb@linux.ibm.com \
    --cc=bauermann@kolabnow.com \
    --cc=code@tyhicks.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-integrity@vger.kernel.org \
    --cc=noodles@fb.com \
    --cc=nramas@linux.microsoft.com \
    --cc=paul@paul-moore.com \
    --cc=tusharsu@linux.microsoft.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.