From: "Laszlo Ersek" <lersek@redhat.com>
To: devel@edk2.groups.io, spbrogan@outlook.com,
michael.d.kinney@intel.com, "Wang,
Jian J" <jian.j.wang@intel.com>,
"Zurcher, Christopher J" <christopher.j.zurcher@intel.com>,
"Yao, Jiewen" <jiewen.yao@intel.com>
Cc: "Lu, XiaoyuX" <xiaoyux.lu@intel.com>,
Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: Re: [edk2-devel] [PATCH v2 2/2] CryptoPkg/OpensslLib: Commit the auto-generated assembly files for X64
Date: Wed, 19 Aug 2020 12:43:35 +0200 [thread overview]
Message-ID: <cb59e50e-9e90-90b4-04f1-f1c6f0df7f64@redhat.com> (raw)
In-Reply-To: <BN8PR07MB6962FADE25BCDF838F5EA577C85C0@BN8PR07MB6962.namprd07.prod.outlook.com>
Hi,
On 08/18/20 23:33, Sean wrote:
> Mike,
>
> I am not technically a basetool maintainer but as an active user/dev in
> basetools, i would be opposed to bringing in perl as an edk2 dependency.
> Also introducing another language is counter to the goal of aligning on
> python and improving the python used within edk2. From my perspective
> the openssl config case isn't strong enough to counter the above goal.
> In fact as you know we are trying to change the paradigm for
> Crypto/OpenSSL with the Crypto Driver
> (https://github.com/tianocore/edk2/tree/master/CryptoPkg/Driver) and
> BaseCryptLibOnProtocolPpi
> (https://github.com/tianocore/edk2/tree/master/CryptoPkg/Library/BaseCryptLibOnProtocolPpi)
> work so that everyday development doesn't need to compile openssl in
> their edk2 builds.
Here I'd only like to comment on this one aspect (= build OpenSSL as a
statically linked library vs. as a crypto service driver / PEIM).
Recently I tried to evaluate the crypto driver for OVMF. I started with
the PEI phase. The configuration interface (the PCD) is baroque, *BUT*
that is a direct consequence of OpenSSL offering a huge range of
interfaces. So no complaints about the config interface.
I also reviewed the CryptoPkg.dsc "pre-sets" (i.e., CRYPTO_SERVICES
being one of PACKAGE / ALL / NONE / MIN_PEI / MIN_DXE_MIN_SMM). I had
two problems:
- These pre-sets are supremely suitable for a platform that is composed
of multiple build runs; that is, build the crypto PEIM, build the DXE /
SMM protocol drivers, package up the resultant binaries, and *then*
build the actual platforms (which will then include the crypto service
drivers in *binary* form). On the other hand, the pre-sets are not
useful to a platform that is supposed to be built in a single-shot.
Importantly, I'm not saying that the pre-sets are *detrimental* to such
platforms -- they aren't. It's just that the pre-sets target a different
use case.
- The other problem I had was the one that we had discussed when the
crypto service driver was being introduced. Namely, selecting the
OpenSSL interfaces (interface families) that the platform actually consumes.
Now, I carefully tracked down the modules in OVMF that needed crypto
support, by *not* resolving SmmCryptLib, RuntimeCryptLib, TlsLib in
general [LibraryClasses] sections in the OVMF DSC files. Then I re-added
those lib-class resolutions as module-scoped <LibraryClasses> overrides
to the actual modules that needed them.
However, I didn't know how to even *begin* evaluating the specific "API
needs" of the modules identified thusly. On a Windows or Linux OS, when
you have a dynamically linked executable, and it doesn't find a symbol
in a shared library, you get a nice error message, and the application
doesn't start. On the other hand, if a crypto protocol call fails in SMM
because we missed a feature bit in the config PCD, the results are
somewhat less user-friendly.
The expression "minimum required services" in CryptoPkg.dsc seems
relevant, but it didn't convince me that it would cover everything
needed by -- for example -- VariableSmm, VariableRuntimeDxe, and TlsDxe.
So, given that I couldn't construct a "tight profile", I started my
investigation (for OVMF's PEI phase) by including the crypto service
PEIM with *all* interfaces enabled.
This would be restricted to "TPM_ENABLE", because only that is when
OVMF's PEI phase needs crypto -- due to including the various TPM1 and
TPM2 PEIMs.
So basically this check would replace the statically linked -- and
accordingly trimmed! -- "thick" OpenSSL library copies in the TPM1/PTM2
PEIMs, with the thin wrapper lib
(BaseCryptLibOnProtocolPpi/PeiCryptLib.inf) *plus* the full-blown crypto
service PEIM.
The result was a *violent* size explosion in PEIFV; at least in the
NOOPT build. Before:
> PEIFV [64%Full] 917504 total, 592456 used, 325048 free
after:
> the required fv image size 0x132968 exceeds the set fv image size
> 0xe0000
The PEIFV footprint more than doubled, from 592,456 bytes to 1,255,784
bytes.
I gave up there. Until the "crypto profile" construction is not
automated for platforms, somehow, I don't know how I could maintain OVMF
consuming the crypto service PEIMs/drivers.
(I wonder if we should maintain a "required crypto services" bitmap for
each individual PEIM / DXE / SMM driver inside edk2. And then, when a
platform includes any one such PEIM or driver, they'd know to "OR" the
bitmap for that particular module into their platform PCD setting.)
> So I support leaving it as is which means if you have to change
> something in openssl config you deal with it and a special one off.
(OK, I guess I can comment on this too, after all.)
I agree.
While perl is readily available on Linux build hosts, I remember:
- accommodating the python3 BaseTools requirements on my RHEL7 laptop,
- (almost) bumping the NASM version so we could compile the VMGEXIT
instruction for IA32,
- the python virtual environment discussions for running CI locally.
So I agree that new build dependencies should be avoided as much as
possible.
Thanks
Laszlo
next prev parent reply other threads:[~2020-08-19 10:43 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-04 0:24 [PATCH v2 0/2] CryptoPkg/OpensslLib: Add native instruction support for X64 Zurcher, Christopher J
2020-08-04 0:24 ` [PATCH v2 1/2] " Zurcher, Christopher J
2020-08-11 11:46 ` [edk2-devel] " Guomin Jiang
2020-08-13 15:03 ` Yao, Jiewen
2020-08-18 22:49 ` Zurcher, Christopher J
[not found] ` <162C7E6ED8CEF542.12673@groups.io>
2020-08-24 21:25 ` [edk2-devel] " Zurcher, Christopher J
2020-08-24 23:35 ` Yao, Jiewen
2020-09-16 9:17 ` Guomin Jiang
2020-09-22 15:21 ` Zurcher, Christopher J
2020-09-23 2:35 ` Yao, Jiewen
2020-09-25 0:28 ` Zurcher, Christopher J
2020-09-25 0:49 ` 回复: " gaoliming
2020-09-25 1:06 ` Zurcher, Christopher J
2020-09-25 1:11 ` Yao, Jiewen
2020-09-25 1:14 ` Zurcher, Christopher J
[not found] ` <1637E1D4851CF309.11037@groups.io>
2020-09-25 2:28 ` Zurcher, Christopher J
[not found] ` <1637E5DD452A46F1.2312@groups.io>
2020-09-25 8:01 ` Zurcher, Christopher J
2020-09-29 21:08 ` Zurcher, Christopher J
2020-10-01 12:58 ` Laszlo Ersek
2020-10-08 19:56 ` Zurcher, Christopher J
2020-10-09 11:37 ` Laszlo Ersek
2020-10-09 19:27 ` Zurcher, Christopher J
2020-10-15 7:14 ` Laszlo Ersek
2020-08-04 0:24 ` [PATCH v2 2/2] CryptoPkg/OpensslLib: Commit the auto-generated assembly files " Zurcher, Christopher J
2020-08-13 15:24 ` Yao, Jiewen
2020-08-13 15:37 ` Michael D Kinney
2020-08-13 15:45 ` Yao, Jiewen
2020-08-14 19:34 ` Zurcher, Christopher J
2020-08-18 2:36 ` Wang, Jian J
2020-08-18 16:15 ` Michael D Kinney
2020-08-18 21:33 ` [edk2-devel] " Sean
2020-08-18 23:29 ` Andrew Fish
2020-08-19 16:33 ` Liming Gao
2020-08-19 10:43 ` Laszlo Ersek [this message]
2020-08-19 16:08 ` Michael D Kinney
2020-08-19 17:21 ` Laszlo Ersek
2020-08-18 16:15 ` Michael D Kinney
2020-08-18 21:22 ` Zurcher, Christopher J
2020-08-19 15:37 ` [edk2-devel] " Andrew Fish
2020-08-19 18:06 ` Laszlo Ersek
2020-08-25 0:55 ` Andrew Fish
2020-08-26 10:05 ` Laszlo Ersek
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-list 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=cb59e50e-9e90-90b4-04f1-f1c6f0df7f64@redhat.com \
--to=devel@edk2.groups.io \
/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