[libcamera-devel] [PATCH] libcamera: Regenerate IPA module signatures at install time

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Apr 29 14:17:39 CEST 2020


Hi Kieran,

On Wed, Apr 29, 2020 at 09:43:19AM +0100, Kieran Bingham wrote:
> On 29/04/2020 02:33, Laurent Pinchart wrote:
> > When the IPA modules are installed, meson strips the DT_RPATH and
> > DT_RUNPATH from the binaries. This invalidates the signatures. Disable
> > installation of the .sign files and add an installation script to
> > regenerate them directly in the target directory. The .sign files still
> > need to be created at build time to support running IPA modules from the
> > build tree.
> 
> Indeed, I think this is the best approach.
> 
> > Two alternative approaches have been considered:
> > 
> > - meson could be taught a new target argument to preserve binary
> >   compatibility by skipping any operation that modifies files. This has
> >   been proposed in the #mesonbuild IRC channel. While this could be
> >   interesting in the longer term, we need to fix the issue now.>
> > - The module signatures could be computed on selected sections only.
> >   While skipping the .dynamic section when signing may not cause
> >   security issues, it would make signature generation and verification
> >   more complex, and wasn't deemed worth it.
> 
> Agreed,
> 
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> 
> Small points below:...
> 
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> >  src/ipa/ipa-sign-install.sh | 18 ++++++++++++++++++
> >  src/ipa/meson.build         |  9 +++++++++
> >  src/ipa/rkisp1/meson.build  |  2 +-
> >  src/ipa/vimc/meson.build    |  2 +-
> >  4 files changed, 29 insertions(+), 2 deletions(-)
> >  create mode 100755 src/ipa/ipa-sign-install.sh
> > 
> > diff --git a/src/ipa/ipa-sign-install.sh b/src/ipa/ipa-sign-install.sh
> > new file mode 100755
> > index 000000000000..5317a8a2042b
> > --- /dev/null
> > +++ b/src/ipa/ipa-sign-install.sh
> > @@ -0,0 +1,18 @@
> > +#!/bin/sh
> > +# SPDX-License-Identifier: GPL-2.0-or-later
> > +# Copyright (C) 2020, Google Inc.
> > +#
> > +# Author: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > +#
> > +# ipa-sign-install.sh - Regenerate IPA module signatures when installing
> > +
> > +libdir=$1
> > +key=$2
> > +
> > +ipa_sign=$(dirname "$0")/ipa-sign.sh
> > +
> > +echo "Regenerating IPA modules signatures"
> > +
> > +for module in "${MESON_INSTALL_DESTDIR_PREFIX}/${libdir}"/*.so ; do
> > +	"${ipa_sign}" "${key}" "${module}" "${module}.sign"
> > +done
> > diff --git a/src/ipa/meson.build b/src/ipa/meson.build
> > index 145bf8105af7..56e65eaa7426 100644
> > --- a/src/ipa/meson.build
> > +++ b/src/ipa/meson.build
> > @@ -25,3 +25,12 @@ foreach pipeline : get_option('pipelines')
> >          subdir(pipeline)
> >      endif
> >  endforeach
> > +
> > +if ipa_sign_module
> > +    # Regenerate the signatures for all IPA modules. We can't simply install the
> > +    # .sign files, as meson strips the DT_RPATH and DT_RUNPATH from binaries at
> > +    # install time, which invalidates the signatures.
> > +    meson.add_install_script('ipa-sign-install.sh',
> > +                             ipa_install_dir,
> > +                             ipa_priv_key.full_path())
> > +endif
> > diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build
> > index 247d0429b49c..98dbbd632c12 100644
> > --- a/src/ipa/rkisp1/meson.build
> > +++ b/src/ipa/rkisp1/meson.build
> > @@ -14,6 +14,6 @@ if ipa_sign_module
> >                    input : mod,
> >                    output : ipa_name + '.so.sign',
> >                    command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],
> > -                  install : true,
> > +                  install : false,
> >                    install_dir : ipa_install_dir)
> 
> Why are we providing an install_dir for something we won't install?

Oops :-) I'll fix that.

> >  endif
> > diff --git a/src/ipa/vimc/meson.build b/src/ipa/vimc/meson.build
> > index f8650ee80461..9d0760e57cc1 100644
> > --- a/src/ipa/vimc/meson.build
> > +++ b/src/ipa/vimc/meson.build
> > @@ -14,7 +14,7 @@ if ipa_sign_module
> >                    input : mod,
> >                    output : ipa_name + '.so.sign',
> >                    command : [ ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@' ],
> > -                  install : true,
> > +                  install : false,
> >                    install_dir : ipa_install_dir)
> >  endif
> 
> Hrm... that's going to be duplicated for every IPA. We can't do
> functions in meson, but we could perhaps handle signing at the top level
> src/ipa/meson.build in a single loop at the end. .. but then it feels
> like fighting the tooling to keep things DRY. ho hum... Not something to
> consider in this patch anyway.

meson has generators, but they don't support taking the object returned
by a custom_target() as input, unlike the custom_target(). I think
that's what we should use, once meson will support it.

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list