mbox series

[v5,0/3] use more system keyrings to verify arm64 kdump kernel image signature

Message ID 20220401013118.348084-1-coxu@redhat.com (mailing list archive)
Headers show
Series use more system keyrings to verify arm64 kdump kernel image signature | expand

Message

Coiby Xu April 1, 2022, 1:31 a.m. UTC
Currently, a problem faced by arm64 is if a kernel image is signed by a
MOK key, loading it via the kexec_file_load() system call would be
rejected with the error "Lockdown: kexec: kexec of unsigned images is
restricted; see man kernel_lockdown.7".

This patch set allows arm64 to use more system keyrings to verify kdump 
kernel image signature by making the existing code in x64 public.

v5:
 - improve commit message [Baoquan]

v4:
 - fix commit reference format issue and other checkpatch.pl warnings [Baoquan]

v3:
 - s/arch_kexec_kernel_verify_pe_sig/kexec_kernel_verify_pe_sig [Eric]
 - clean up arch_kexec_kernel_verify_sig [Eric]

v2:
 - only x86_64 and arm64 need to enable PE file signature check [Dave]

Coiby Xu (3):
  kexec: clean up arch_kexec_kernel_verify_sig
  kexec, KEYS: make the code in bzImage64_verify_sig generic
  arm64: kexec_file: use more system keyrings to verify kernel image
    signature

 arch/arm64/kernel/kexec_image.c   |  4 +--
 arch/x86/kernel/kexec-bzimage64.c | 13 +-------
 include/linux/kexec.h             |  7 +++--
 kernel/kexec_file.c               | 51 ++++++++++++++++++-------------
 4 files changed, 37 insertions(+), 38 deletions(-)

Comments

Baoquan He April 8, 2022, 7:17 a.m. UTC | #1
Hi Coiby,

On 04/01/22 at 09:31am, Coiby Xu wrote:
> Currently, a problem faced by arm64 is if a kernel image is signed by a
> MOK key, loading it via the kexec_file_load() system call would be
> rejected with the error "Lockdown: kexec: kexec of unsigned images is
> restricted; see man kernel_lockdown.7".
> 
> This patch set allows arm64 to use more system keyrings to verify kdump 
> kernel image signature by making the existing code in x64 public.

Thanks for updating. It would be great to tell why the problem is
met, then allow arm64 to use more system keyrings can solve it.

Meanwhile, I noticed Michal also posted a patchset to address the same
issue, while he tries to make it work on s390 too. Could you check and
consider if these two patches can be integrated?

[PATCH 0/4] Unifrom keyring support across architectures and functions
https://lore.kernel.org/lkml/cover.1644953683.git.msuchanek@suse.de/

Thanks
Baoquan

> 
> v5:
>  - improve commit message [Baoquan]
> 
> v4:
>  - fix commit reference format issue and other checkpatch.pl warnings [Baoquan]
> 
> v3:
>  - s/arch_kexec_kernel_verify_pe_sig/kexec_kernel_verify_pe_sig [Eric]
>  - clean up arch_kexec_kernel_verify_sig [Eric]
> 
> v2:
>  - only x86_64 and arm64 need to enable PE file signature check [Dave]
> 
> Coiby Xu (3):
>   kexec: clean up arch_kexec_kernel_verify_sig
>   kexec, KEYS: make the code in bzImage64_verify_sig generic
>   arm64: kexec_file: use more system keyrings to verify kernel image
>     signature
> 
>  arch/arm64/kernel/kexec_image.c   |  4 +--
>  arch/x86/kernel/kexec-bzimage64.c | 13 +-------
>  include/linux/kexec.h             |  7 +++--
>  kernel/kexec_file.c               | 51 ++++++++++++++++++-------------
>  4 files changed, 37 insertions(+), 38 deletions(-)
> 
> -- 
> 2.34.1
>
Michal Suchanek April 8, 2022, 8:59 a.m. UTC | #2
On Fri, Apr 08, 2022 at 03:17:19PM +0800, Baoquan He wrote:
> Hi Coiby,
> 
> On 04/01/22 at 09:31am, Coiby Xu wrote:
> > Currently, a problem faced by arm64 is if a kernel image is signed by a
> > MOK key, loading it via the kexec_file_load() system call would be
> > rejected with the error "Lockdown: kexec: kexec of unsigned images is
> > restricted; see man kernel_lockdown.7".
> > 
> > This patch set allows arm64 to use more system keyrings to verify kdump 
> > kernel image signature by making the existing code in x64 public.
> 
> Thanks for updating. It would be great to tell why the problem is
> met, then allow arm64 to use more system keyrings can solve it.

The reason is that MOK keys are (if anywhere) linked to the secondary
keyring, and only primary keyring is used on arm64.

Thanks

Michal

> 
> Meanwhile, I noticed Michal also posted a patchset to address the same
> issue, while he tries to make it work on s390 too. Could you check and
> consider if these two patches can be integrated?
> 
> [PATCH 0/4] Unifrom keyring support across architectures and functions
> https://lore.kernel.org/lkml/cover.1644953683.git.msuchanek@suse.de/
> 
> Thanks
> Baoquan
> 
> > 
> > v5:
> >  - improve commit message [Baoquan]
> > 
> > v4:
> >  - fix commit reference format issue and other checkpatch.pl warnings [Baoquan]
> > 
> > v3:
> >  - s/arch_kexec_kernel_verify_pe_sig/kexec_kernel_verify_pe_sig [Eric]
> >  - clean up arch_kexec_kernel_verify_sig [Eric]
> > 
> > v2:
> >  - only x86_64 and arm64 need to enable PE file signature check [Dave]
> > 
> > Coiby Xu (3):
> >   kexec: clean up arch_kexec_kernel_verify_sig
> >   kexec, KEYS: make the code in bzImage64_verify_sig generic
> >   arm64: kexec_file: use more system keyrings to verify kernel image
> >     signature
> > 
> >  arch/arm64/kernel/kexec_image.c   |  4 +--
> >  arch/x86/kernel/kexec-bzimage64.c | 13 +-------
> >  include/linux/kexec.h             |  7 +++--
> >  kernel/kexec_file.c               | 51 ++++++++++++++++++-------------
> >  4 files changed, 37 insertions(+), 38 deletions(-)
> > 
> > -- 
> > 2.34.1
> > 
>
Baoquan He April 11, 2022, 1:13 a.m. UTC | #3
On 04/08/22 at 10:59am, Michal Suchánek wrote:
> On Fri, Apr 08, 2022 at 03:17:19PM +0800, Baoquan He wrote:
> > Hi Coiby,
> > 
> > On 04/01/22 at 09:31am, Coiby Xu wrote:
> > > Currently, a problem faced by arm64 is if a kernel image is signed by a
> > > MOK key, loading it via the kexec_file_load() system call would be
> > > rejected with the error "Lockdown: kexec: kexec of unsigned images is
> > > restricted; see man kernel_lockdown.7".
> > > 
> > > This patch set allows arm64 to use more system keyrings to verify kdump 
> > > kernel image signature by making the existing code in x64 public.
> > 
> > Thanks for updating. It would be great to tell why the problem is
> > met, then allow arm64 to use more system keyrings can solve it.
> 
> The reason is that MOK keys are (if anywhere) linked to the secondary
> keyring, and only primary keyring is used on arm64.

Thanks for explaining. This is valuable information and should
be put into log for better understanding when reviewing or
reading code later.
Coiby Xu April 11, 2022, 1:52 a.m. UTC | #4
On Mon, Apr 11, 2022 at 09:13:32AM +0800, Baoquan He wrote:
>On 04/08/22 at 10:59am, Michal Suchánek wrote:
>> On Fri, Apr 08, 2022 at 03:17:19PM +0800, Baoquan He wrote:
>> > Hi Coiby,
>> >
>> > On 04/01/22 at 09:31am, Coiby Xu wrote:
>> > > Currently, a problem faced by arm64 is if a kernel image is signed by a
>> > > MOK key, loading it via the kexec_file_load() system call would be
>> > > rejected with the error "Lockdown: kexec: kexec of unsigned images is
>> > > restricted; see man kernel_lockdown.7".
>> > >
>> > > This patch set allows arm64 to use more system keyrings to verify kdump
>> > > kernel image signature by making the existing code in x64 public.
>> >
>> > Thanks for updating. It would be great to tell why the problem is
>> > met, then allow arm64 to use more system keyrings can solve it.
>>
>> The reason is that MOK keys are (if anywhere) linked to the secondary
                                                                ^^^^^^^^^
                                                                platform?
>> keyring, and only primary keyring is used on arm64.

Thanks Michal for providing the info! Btw, I think you made a typo
because MOK keys are linked to the platform keyring, right?

>
>Thanks for explaining. This is valuable information and should
>be put into log for better understanding when reviewing or
>reading code later.

Thanks for the reminder! I'll include this info in the commit message.

>
Michal Suchanek April 11, 2022, 8:43 a.m. UTC | #5
On Mon, Apr 11, 2022 at 09:52:18AM +0800, Coiby Xu wrote:
> On Mon, Apr 11, 2022 at 09:13:32AM +0800, Baoquan He wrote:
> > On 04/08/22 at 10:59am, Michal Suchánek wrote:
> > > On Fri, Apr 08, 2022 at 03:17:19PM +0800, Baoquan He wrote:
> > > > Hi Coiby,
> > > >
> > > > On 04/01/22 at 09:31am, Coiby Xu wrote:
> > > > > Currently, a problem faced by arm64 is if a kernel image is signed by a
> > > > > MOK key, loading it via the kexec_file_load() system call would be
> > > > > rejected with the error "Lockdown: kexec: kexec of unsigned images is
> > > > > restricted; see man kernel_lockdown.7".
> > > > >
> > > > > This patch set allows arm64 to use more system keyrings to verify kdump
> > > > > kernel image signature by making the existing code in x64 public.
> > > >
> > > > Thanks for updating. It would be great to tell why the problem is
> > > > met, then allow arm64 to use more system keyrings can solve it.
> > > 
> > > The reason is that MOK keys are (if anywhere) linked to the secondary
>                                                                ^^^^^^^^^
>                                                                platform?
> > > keyring, and only primary keyring is used on arm64.
> 
> Thanks Michal for providing the info! Btw, I think you made a typo
> because MOK keys are linked to the platform keyring, right?

No, I mean secondary, through this patchset:
https://lore.kernel.org/lkml/YhKP12KEmyqyS8rj@iki.fi/

Apparently support for importing the MOK keys into the platform keyring
also exists but I am not sure if this is upstream or downstream feature.

At any rate the MOK keys are not included in the primary keyring which
is the only keyring currently in use for kexec on arm64.

Thanks

Michal
Coiby Xu April 13, 2022, 9:32 a.m. UTC | #6
On Mon, Apr 11, 2022 at 10:43:06AM +0200, Michal Suchánek wrote:
>On Mon, Apr 11, 2022 at 09:52:18AM +0800, Coiby Xu wrote:
>> On Mon, Apr 11, 2022 at 09:13:32AM +0800, Baoquan He wrote:
>> > On 04/08/22 at 10:59am, Michal Suchánek wrote:
>> > > On Fri, Apr 08, 2022 at 03:17:19PM +0800, Baoquan He wrote:
>> > > > Hi Coiby,
>> > > >
>> > > > On 04/01/22 at 09:31am, Coiby Xu wrote:
>> > > > > Currently, a problem faced by arm64 is if a kernel image is signed by a
>> > > > > MOK key, loading it via the kexec_file_load() system call would be
>> > > > > rejected with the error "Lockdown: kexec: kexec of unsigned images is
>> > > > > restricted; see man kernel_lockdown.7".
>> > > > >
>> > > > > This patch set allows arm64 to use more system keyrings to verify kdump
>> > > > > kernel image signature by making the existing code in x64 public.
>> > > >
>> > > > Thanks for updating. It would be great to tell why the problem is
>> > > > met, then allow arm64 to use more system keyrings can solve it.
>> > >
>> > > The reason is that MOK keys are (if anywhere) linked to the secondary
>>                                                                ^^^^^^^^^
>>                                                                platform?
>> > > keyring, and only primary keyring is used on arm64.
>>
>> Thanks Michal for providing the info! Btw, I think you made a typo
>> because MOK keys are linked to the platform keyring, right?
>
>No, I mean secondary, through this patchset:
>https://lore.kernel.org/lkml/YhKP12KEmyqyS8rj@iki.fi/

Thanks for the info! This provides another approach to verify kernel
image's signature via the secondary keyring once the end-use chooses to
trust MOK keys by setting MokListTrustedRT.

>
>Apparently support for importing the MOK keys into the platform keyring
>also exists but I am not sure if this is upstream or downstream feature.

This is actually an upstream feature,

commit 15ea0e1e3e185040bed6119f815096f2e4326242
Author: Josh Boyer <jwboyer@fedoraproject.org>
Date:   Thu Dec 13 01:37:56 2018 +0530

     efi: Import certificates from UEFI Secure Boot
     
     Secure Boot stores a list of allowed certificates in the 'db' variable.
     This patch imports those certificates into the platform keyring. The shim
     UEFI bootloader has a similar certificate list stored in the 'MokListRT'
     variable. We import those as well.
     
     Secure Boot also maintains a list of disallowed certificates in the 'dbx'
     variable. We load those certificates into the system blacklist keyring
     and forbid any kernel signed with those from loading.
     
     [zohar@linux.ibm.com: dropped Josh's original patch description]
     Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
     Signed-off-by: David Howells <dhowells@redhat.com>
     Signed-off-by: Nayna Jain <nayna@linux.ibm.com>
     Acked-by: Serge Hallyn <serge@hallyn.com>
     Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>

>
>At any rate the MOK keys are not included in the primary keyring which
>is the only keyring currently in use for kexec on arm64.

Good summary, thanks!

>
>Thanks
>
>Michal
>