From: Simon Horman <horms@kernel.org>
To: Alejandro Hernandez <alhe@linux.microsoft.com>
Cc: kexec@lists.infradead.org
Subject: Re: [PATCH] kexec: restore functionality to preserve fd xattrs for uncompressed kernel images
Date: Tue, 19 May 2026 10:41:53 +0100 [thread overview]
Message-ID: <20260519094153.GA227450@horms.kernel.org> (raw)
In-Reply-To: <20260507215417.2674568-1-alhe@linux.microsoft.com>
On Thu, May 07, 2026 at 09:54:17PM +0000, Alejandro Hernandez wrote:
> Since commit 714fa115 xattrs attached to a kernel image file (such as IMA
> signatures) are not being preserved, do_kexec_file_load() was modified to use
> memfd_create() which now passes an anonymous file descriptor to
> kexec_file_load(). This change eliminated the filesystem inode identity of the
> original kernel file, hence attributes are no longer visible to the kernel IMA
> appraisal handler during kexec_file_load, causing IMA policy enforcement to fail
> even for validly signed kernel images.
>
> This patch attempts to restore such behavior although, only does it for
> uncompressed kernel images. To do this, we first figure out if the image file is
> compressed or not and call each method accordingly.
>
> Compressed images continue to use memfd and cannot carry forward the original fd
> security attributes, since their decompressed bytes do not match the signed
> artifact. Proper handling of compressed images with IMA would require either
> signing the decompressed artifact or kernel-side support for decompression
> within the kexec_file_load path.
>
> Signed-off-by: Alejandro Hernandez Samaniego <alhe@linux.microsoft.com>
Hi Alejandro,
Thanks for the patch.
Overall this looks good to me. But I'm wondering if you could spin a v2
to address a minor code-style issue I have noted inline.
> ---
> kexec/kexec.c | 42 +++++++++++++++++++++++++++++++++++-------
> 1 file changed, 35 insertions(+), 7 deletions(-)
>
> diff --git a/kexec/kexec.c b/kexec/kexec.c
> index 08edfca..a388762 100644
> --- a/kexec/kexec.c
> +++ b/kexec/kexec.c
> @@ -1328,17 +1328,41 @@ static int do_kexec_file_load(int fileind, int argc, char **argv,
>
> kernel = argv[fileind];
>
> - /* slurp in the input kernel */
> + /* Hold original fd with its xattrs */
> + kernel_fd = open(kernel, O_RDONLY);
> + if (kernel_fd == -1) {
> + fprintf(stderr, "Failed to open file %s:%s\n", kernel,
> + strerror(errno));
> + return EFAILED;
> + }
> +
> + /* Compressed vs Uncompressed */
> + struct stat kernel_stat;
> + off_t kernel_file_size = -1;
I would prefer if we stuck to declaring local variables
at the top of this function.
> + if (fstat(kernel_fd, &kernel_stat) == 0)
> + kernel_file_size = kernel_stat.st_size;
> +
> + /* slurp in the input kernel */
> kernel_buf = slurp_decompress_file(kernel, &kernel_size);
> if (!kernel_buf) {
> fprintf(stderr, "Failed to decompress file %s:%s\n", kernel,
> strerror(errno));
> + close(kernel_fd);
> return EFAILED;
> }
...
next prev parent reply other threads:[~2026-05-19 9:42 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-07 21:54 [PATCH] kexec: restore functionality to preserve fd xattrs for uncompressed kernel images Alejandro Hernandez
2026-05-19 9:41 ` Simon Horman [this message]
2026-05-22 17:09 ` Alejandro Hernandez
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=20260519094153.GA227450@horms.kernel.org \
--to=horms@kernel.org \
--cc=alhe@linux.microsoft.com \
--cc=kexec@lists.infradead.org \
/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