Re: [PATCH] Fix kexec forbidding kernels signed with custom platform keys to boot
From: James Bottomley
Date: Thu Aug 16 2018 - 13:15:17 EST
On Thu, 2018-08-16 at 16:56 +0000, David Laight wrote:
> From: James Bottomley
> > Sent: 16 August 2018 16:57
> > On Thu, 2018-08-16 at 16:49 +0100, David Howells wrote:
> > > James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx> wrote:
> > >
> > > > > The problem with that is that it means you can't load third
> > > > > party modules - such as the NVidia driver.ÂÂThat's fine if
> > > > > you absolutely reject the right of people to produce third
> > > > > party drivers for the Linux kernel and absolutely require
> > > > > that they open and upstream their code if they want in.
> > > >
> > > > So if you build your own kernel and want to load the nVidia
> > > > module, you have the key to sign it.
> > >
> > > I think you have to assume that doing this is beyond most people.
> >
> > As a step by step process, I agree.ÂÂHowever, I think we can
> > automate it to the point where you install a package and it says
> > "insert your yubikey" every time you upgrade the kernel
>
> What about 3rd parties that want to release drivers that can be
> loadedinto 'distribution' kernels?
You'd follow the distributions external kernel module process, I think.
> We can do that for windows (provided we've paid the 'driver signing
> tax') because windows has a stable kernel DDI/DKI.
> For Linux we have to release most of the driver as a binary 'blob'
> and compile wrapper code on the target system with the correct kernel
> headers.
Right, that's the usual distribution kernel module approach. I'm most
familiar with the SUSE DKMS packaging project, which has a lot of
automation around this. I believe it's actually pretty easy to use
from talking to people about it. Of course, SUSE doesn't currently use
signed kernel modules, which makes the key issue a non problem for them
...
> There is no way we could generate signed copies for every
> 'distribution' kernel - even if there was a way to get them signed.
> Even if we agreed to make our source code available it wouldn't be
> accepted for inclusion in the kernel source tree.
Well, I think for signed kernel modules the DKMS process could be
adapted to generate a private key and then install the public component
in the kernel, resign with the private key, put the private key in the
MoK database and that means the DKMS process now has a key with which
it could sign any kernel module at the request of the user. Of course
the main problem will be guarding the private key.
However, in the above process signing is under the control of the end
user. I'm guessing you want signing to be under the control of an
external third party or the distro, like the Microsoft case? In that
case you have to either persuade the distros to run a signing service
or persuade them to trust a third party to run it.
James