[libcamera-devel] [PATCH] meson: enable IPA signing only if both libcrypto and openssl are present
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Dec 25 22:26:36 CET 2023
Hi Subhaditya,
Thank you for the patch.
On Mon, Dec 25, 2023 at 10:48:24PM +0530, Subhaditya Nath via libcamera-devel wrote:
> Before this commit, if the build host had openssl installed, but had
> neither openssl-dev nor gnutls-dev installed, then the IPA modules would
> be signed and ipa_pub_key.cpp would contain the pubkey, but the function
> PubKey::PubKey() would've been left empty, thereby valid_ being set to
> false, rendering the pubkey unusable for verification purposes.
>
> This commit checks for the availability of both the openssl executable
> and either of the gnutls and libcrypto libraries before enabling signing
> of the IPA modules. Either both HAVE_IPA_PUBKEY and HAVE_(CRYPTO|GNUTLS)
> are defined, or neither is defined. This mitigates situations like the
> one mentioned above.
What problem does this fix ? If the signature is present but can't be
verified, won't libcamera just isolate IPA modules at runtime ? Is
something currently broken ?
> This commit leverages the multi-name dependency feature introduced in
> meson 0.60.0 to select between gnutls and libcrypto. The behaviour is
> unchanged – gnutls is used if found, else libcrypto is used (if found).
>
> Signed-off-by: Subhaditya Nath <sn03.general at gmail.com>
> ---
> src/libcamera/meson.build | 19 -------------------
> src/meson.build | 26 ++++++++++++++++++++------
> 2 files changed, 20 insertions(+), 25 deletions(-)
>
> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
> index 45f63e93..9d17c9f1 100644
> --- a/src/libcamera/meson.build
> +++ b/src/libcamera/meson.build
> @@ -80,25 +80,6 @@ endif
> libudev = dependency('libudev', required : get_option('udev'))
> libyaml = dependency('yaml-0.1', required : false)
>
> -# Use one of gnutls or libcrypto (provided by OpenSSL), trying gnutls first.
> -libcrypto = dependency('gnutls', required : false)
> -if libcrypto.found()
> - config_h.set('HAVE_GNUTLS', 1)
> -else
> - libcrypto = dependency('libcrypto', required : false)
> - if libcrypto.found()
> - config_h.set('HAVE_CRYPTO', 1)
> - endif
> -endif
> -
> -if not libcrypto.found()
> - warning('Neither gnutls nor libcrypto found, all IPA modules will be isolated')
> - summary({'IPA modules signed with': 'None (modules will run isolated)'},
> - section : 'Configuration')
> -else
> - summary({'IPA modules signed with' : libcrypto.name()}, section : 'Configuration')
> -endif
> -
> if liblttng.found()
> tracing_enabled = true
> config_h.set('HAVE_TRACING', 1)
> diff --git a/src/meson.build b/src/meson.build
> index 165a77bb..208cd760 100644
> --- a/src/meson.build
> +++ b/src/meson.build
> @@ -15,16 +15,30 @@ summary({
> }, section : 'Paths')
>
> # Module Signing
> +# Use one of gnutls or libcrypto (provided by OpenSSL), trying gnutls first.
> +libcrypto = dependency('gnutls', 'libcrypto', required : false)
> openssl = find_program('openssl', required : false)
> -if openssl.found()
> +if not libcrypto.found()
> + ipa_sign_module = false
> + warning('Neither gnutls nor libcrypto found, all IPA modules will be isolated')
> + summary({'IPA modules signed with': 'None (modules will run isolated)'},
> + section : 'Configuration')
> +elif not openssl.found()
> + ipa_sign_module = false
> + warning('openssl not found, all IPA modules will be isolated')
> + ipa_sign_module = false
> +else
> + ipa_sign_module = true
> + config_h.set('HAVE_IPA_PUBKEY', 1)
> + if libcrypto.name() == 'gnutls'
> + config_h.set('HAVE_GNUTLS', 1)
> + else
> + config_h.set('HAVE_CRYPTO', 1)
> + endif
> + summary({'IPA modules signed with' : libcrypto.name()}, section : 'Configuration')
> ipa_priv_key = custom_target('ipa-priv-key',
> output : ['ipa-priv-key.pem'],
> command : [gen_ipa_priv_key, '@OUTPUT@'])
> - config_h.set('HAVE_IPA_PUBKEY', 1)
> - ipa_sign_module = true
> -else
> - warning('openssl not found, all IPA modules will be isolated')
> - ipa_sign_module = false
> endif
>
> # libcamera must be built first as a dependency to the other components.
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list