Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 17 Aug 2022 09:19:42 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Guido van Rooij <guido@gvr.org>
Cc:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Re: How to use serial console to enter GELI password to boot kernel on a GELI encrypted ZFS pool
Message-ID:  <CANCZdfrS%2BCmWAUF4EukrJ2qOH%2B0mCZjjq_3b=8t=oSwv_UcgUg@mail.gmail.com>
In-Reply-To: <1BFD8C02-370F-4E59-BC89-EEF970B44934@gvr.org>
References:  <CANCZdfoMjg2GmUjZAeQ_phZnn4tKSKEOcPq6-h==s==idzmjBg@mail.gmail.com> <1BFD8C02-370F-4E59-BC89-EEF970B44934@gvr.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--000000000000989dcf05e67165f4
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wed, Aug 17, 2022 at 7:35 AM Guido van Rooij <guido@gvr.org> wrote:

>
>
> On 16 Aug 2022, at 19:09, Warner Losh <imp@bsdimp.com> wrote:
>
> =EF=BB=BF
>
>
> On Tue, Aug 16, 2022 at 3:44 AM Guido van Rooij <guido@gvr.org> wrote:
>
>> On Mon, Aug 15, 2022 at 02:20:32PM -0600, Warner Losh wrote:
>> >    On Mon, Aug 15, 2022 at 8:23 AM Guido van Rooij <[1]guido@gvr.org>
>> >    wrote:
>> >
>> >      Currently I have a system with ZFS on GELI. I use the ability in
>> >      the EFI loader to enter the GELI password.
>> >      Is it possible somehow to use a serial console to enter the
>> >      password?
>> >      My system does have a COM1 port but it isn't recognised at the
>> early
>> >      bot stage. There I only see:
>> >      =C3=82  =C3=82  Consoles: EFI console
>> >      =C3=82  =C3=82  GELI Passphrase for disk0p4:
>> >      (Note: this is early in the boot process so there is no access to
>> >      boot.config (or any other file in the ZFS pool) as it still on
>> >      encrypted storage at that time).
>> >
>> >    The boot loader.efi will read ESP:/efi/freebsd/loader.env for
>> >    environment
>> >    variables. You can use that to set the COM1 port since it appears
>> your
>> >    EFI system doesn't do console redirection.
>> >    If you want it to only prompt COM1 for the password, but everything
>> >    else is
>> >    on the efi console, that's a lot harder.
>>
>> Hi Warner,
>>
>> Thanks, but somehow I still cannot get it to work properly.
>> Content of /efi/freebsd/loader.env:
>> boot_multicons=3D"YES"
>> console=3D"efi comconsole"
>>
>> The boot prompt still only shows "Consoles: EFI console".
>>
>
> Yes. That's printed before we process the ESP file and switch to the new
> console...
>
>
>> When I boot I get the GELI passphrase prompt at the EFI console only. Bu=
t
>> when the kernel starts
>> to run I do get output to the serial console, staring with:
>> ---<<BOOT>>---
>> Copyright (c) 1992-2021 The FreeBSD Project.
>>
>> So it seems the loader.env file is read correctly (it didn't output
>> anything to the serial
>> console before I created efi/freebsd/loader.env). But looking at the
>> source I see in
>> efi/loader/main.c:read_loader_env():
>>         if (fn) {
>>                 printf("    Reading loader env vars from %s\n", fn);
>>                 parse_loader_efi_config(boot_img->DeviceHandle, fn);
>>         }
>> I never saw the printf appearing. I do not understand this.
>>
>
> It should have appeared on the video console of the EFI console (assuming
> no serial
> redirect is going on in that BIOS).
>
>
> It surely did not.
>
> I'd have to delve more deeply into the prompts for the GELI password than
> I have
> time to do this morning. What if you type the password blind into the
> serial port?
>
>
> Tried that but nothing happened. When I
> enter the passphrase after typing it in via
> the serial port, it worked immediately so
> we can conclude that no single keystroke
> got through.
>

OK. I'll have to delve a little more deeply then...

Warner

--000000000000989dcf05e67165f4
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">=
<div dir=3D"ltr" class=3D"gmail_attr">On Wed, Aug 17, 2022 at 7:35 AM Guido=
 van Rooij &lt;<a href=3D"mailto:guido@gvr.org">guido@gvr.org</a>&gt; wrote=
:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.=
8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"au=
to"><div dir=3D"ltr"></div><div dir=3D"ltr"><br></div><div dir=3D"ltr"><br>=
<blockquote type=3D"cite">On 16 Aug 2022, at 19:09, Warner Losh &lt;<a href=
=3D"mailto:imp@bsdimp.com" target=3D"_blank">imp@bsdimp.com</a>&gt; wrote:<=
br><br></blockquote></div><blockquote type=3D"cite"><div dir=3D"ltr">=EF=BB=
=BF<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quot=
e"><div dir=3D"ltr" class=3D"gmail_attr">On Tue, Aug 16, 2022 at 3:44 AM Gu=
ido van Rooij &lt;<a href=3D"mailto:guido@gvr.org" target=3D"_blank">guido@=
gvr.org</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"=
margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-lef=
t:1ex">On Mon, Aug 15, 2022 at 02:20:32PM -0600, Warner Losh wrote:<br>
&gt;=C2=A0 =C2=A0 On Mon, Aug 15, 2022 at 8:23 AM Guido van Rooij &lt;[1]<a=
 href=3D"mailto:guido@gvr.org" target=3D"_blank">guido@gvr.org</a>&gt;<br>
&gt;=C2=A0 =C2=A0 wrote:<br>
&gt; <br>
&gt;=C2=A0 =C2=A0 =C2=A0 Currently I have a system with ZFS on GELI. I use =
the ability in<br>
&gt;=C2=A0 =C2=A0 =C2=A0 the EFI loader to enter the GELI password.<br>
&gt;=C2=A0 =C2=A0 =C2=A0 Is it possible somehow to use a serial console to =
enter the<br>
&gt;=C2=A0 =C2=A0 =C2=A0 password?<br>
&gt;=C2=A0 =C2=A0 =C2=A0 My system does have a COM1 port but it isn&#39;t r=
ecognised at the early<br>
&gt;=C2=A0 =C2=A0 =C2=A0 bot stage. There I only see:<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C3=82=C2=A0 =C3=82=C2=A0 Consoles: EFI console<br=
>
&gt;=C2=A0 =C2=A0 =C2=A0 =C3=82=C2=A0 =C3=82=C2=A0 GELI Passphrase for disk=
0p4:<br>
&gt;=C2=A0 =C2=A0 =C2=A0 (Note: this is early in the boot process so there =
is no access to<br>
&gt;=C2=A0 =C2=A0 =C2=A0 boot.config (or any other file in the ZFS pool) as=
 it still on<br>
&gt;=C2=A0 =C2=A0 =C2=A0 encrypted storage at that time).<br>
&gt; <br>
&gt;=C2=A0 =C2=A0 The boot loader.efi will read ESP:/efi/freebsd/loader.env=
 for<br>
&gt;=C2=A0 =C2=A0 environment<br>
&gt;=C2=A0 =C2=A0 variables. You can use that to set the COM1 port since it=
 appears your<br>
&gt;=C2=A0 =C2=A0 EFI system doesn&#39;t do console redirection.<br>
&gt;=C2=A0 =C2=A0 If you want it to only prompt COM1 for the password, but =
everything<br>
&gt;=C2=A0 =C2=A0 else is<br>
&gt;=C2=A0 =C2=A0 on the efi console, that&#39;s a lot harder.<br>
<br>
Hi Warner,<br>
<br>
Thanks, but somehow I still cannot get it to work properly.<br>
Content of /efi/freebsd/loader.env:<br>
boot_multicons=3D&quot;YES&quot;<br>
console=3D&quot;efi comconsole&quot;<br>
<br>
The boot prompt still only shows &quot;Consoles: EFI console&quot;.<br></bl=
ockquote><div><br></div><div>Yes. That&#39;s printed before we process the =
ESP file and switch to the new console...</div><div>=C2=A0</div><blockquote=
 class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px so=
lid rgb(204,204,204);padding-left:1ex">
When I boot I get the GELI passphrase prompt at the EFI console only. But w=
hen the kernel starts<br>
to run I do get output to the serial console, staring with:<br>
---&lt;&lt;BOOT&gt;&gt;---<br>
Copyright (c) 1992-2021 The FreeBSD Project.<br>
<br>
So it seems the loader.env file is read correctly (it didn&#39;t output any=
thing to the serial<br>
console before I created efi/freebsd/loader.env). But looking at the source=
 I see in <br>
efi/loader/main.c:read_loader_env():<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (fn) {<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 printf(&quot;=C2=A0=
 =C2=A0 Reading loader env vars from %s\n&quot;, fn);<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 parse_loader_efi_co=
nfig(boot_img-&gt;DeviceHandle, fn);<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>
I never saw the printf appearing. I do not understand this.<br></blockquote=
><div><br></div><div>It should have appeared on the video console of the EF=
I console (assuming no serial</div><div>redirect is going on in that BIOS).=
</div><div><br></div></div></div></div></blockquote><div><br></div>It surel=
y did not.<br><blockquote type=3D"cite"><div dir=3D"ltr"><div dir=3D"ltr"><=
div class=3D"gmail_quote"><div>I&#39;d have to delve more deeply into the p=
rompts for the GELI password than I have</div><div>time to do this morning.=
 What if you type the password blind into the serial port?</div><div><br></=
div></div></div></div></blockquote><div><br></div>Tried that but nothing ha=
ppened. When I<div>enter the passphrase after typing it in via</div><div>th=
e serial port, it worked immediately so</div><div>we can conclude that no s=
ingle keystroke=C2=A0</div><div>got through.</div></div></blockquote><div><=
br></div><div>OK. I&#39;ll have to delve a little more deeply then...</div>=
<div><br></div><div>Warner=C2=A0</div></div></div>

--000000000000989dcf05e67165f4--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfrS%2BCmWAUF4EukrJ2qOH%2B0mCZjjq_3b=8t=oSwv_UcgUg>