From: Alexandre Belloni <alexandre.belloni@bootlin.com>
To: Richard Purdie <richard.purdie@linuxfoundation.org>
Cc: Tobias Hagelborn <tobias.hagelborn@axis.com>,
openembedded-core@lists.openembedded.org
Subject: Re: [OE-core] [PATCH] lib/oe/gpg_sign.py: Avoid race when creating .sig files in detach_sign
Date: Thu, 30 Mar 2023 14:54:50 +0200 [thread overview]
Message-ID: <202303301254507aff37b1@mail.local> (raw)
In-Reply-To: <208af449dd70c4d88af9e9259413c823d83e0302.camel@linuxfoundation.org>
On 30/03/2023 10:10:21+0100, Richard Purdie wrote:
> On Wed, 2023-03-29 at 23:33 +0100, Richard Purdie via
> lists.openembedded.org wrote:
> > On Thu, 2023-03-23 at 11:08 +0100, Tobias Hagelborn wrote:
> > > Move the signature file into place only after it is successfully signed.
> > > This to avoid race and corrupted .sig files in cases multiple onging
> > > builds write to a shared sstate-cache dir.
> > >
> > > Signed-off-by: Tobias Hagelborn <tobiasha@axis.com>
> > > ---
> > > meta/lib/oe/gpg_sign.py | 25 +++++++++++++++----------
> > > 1 file changed, 15 insertions(+), 10 deletions(-)
> > >
> > > diff --git a/meta/lib/oe/gpg_sign.py b/meta/lib/oe/gpg_sign.py
> > > index 613dab8561..868846cdc5 100644
> > > --- a/meta/lib/oe/gpg_sign.py
> > > +++ b/meta/lib/oe/gpg_sign.py
> > > @@ -5,11 +5,12 @@
> > > #
> > >
> > > """Helper module for GPG signing"""
> > > -import os
> > >
> > > import bb
> > > -import subprocess
> > > +import os
> > > import shlex
> > > +import subprocess
> > > +import tempfile
> > >
> > > class LocalSigner(object):
> > > """Class for handling local (on the build host) signing"""
> > > @@ -73,8 +74,6 @@ class LocalSigner(object):
> > > cmd += ['--homedir', self.gpg_path]
> > > if armor:
> > > cmd += ['--armor']
> > > - if output_suffix:
> > > - cmd += ['-o', input_file + "." + output_suffix]
> > > if use_sha256:
> > > cmd += ['--digest-algo', "SHA256"]
> > >
> > > @@ -83,19 +82,25 @@ class LocalSigner(object):
> > > if self.gpg_version > (2,1,):
> > > cmd += ['--pinentry-mode', 'loopback']
> > >
> > > - cmd += [input_file]
> > > -
> > > try:
> > > if passphrase_file:
> > > with open(passphrase_file) as fobj:
> > > passphrase = fobj.readline();
> > >
> > > - job = subprocess.Popen(cmd, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
> > > - (_, stderr) = job.communicate(passphrase.encode("utf-8"))
> > > + output_file = input_file + "." + (output_suffix or 'sig')
> >
> > This doesn't match the behaviour of output_suffix as used above where
> > it defaults to None. This forces it to a default of "sig" instead?
> >
> > If that intentional that should be in the commit message.
> >
> >
> > > + with tempfile.TemporaryDirectory(dir=os.path.dirname(output_file)) as tmp_dir:
> > > + tmp_file = os.path.join(tmp_dir, os.path.basename(output_file))
> > > + cmd += ['-o', tmp_file]
> > > +
> > > + cmd += [input_file]
> > > +
> > > + job = subprocess.Popen(cmd, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
> > > + (_, stderr) = job.communicate(passphrase.encode("utf-8"))
> > >
> > > - if job.returncode:
> > > - bb.fatal("GPG exited with code %d: %s" % (job.returncode, stderr.decode("utf-8")))
> > > + if job.returncode:
> > > + bb.fatal("GPG exited with code %d: %s" % (job.returncode, stderr.decode("utf-8")))
> > >
> > > + os.rename(tmp_file, output_file)
> > > except IOError as e:
> > > bb.error("IO error (%s): %s" % (e.errno, e.strerror))
> > > raise Exception("Failed to sign '%s'" % input_file)
>
> I've been struggling to confirm it but have now done so. This does
> cause an oe-selftest failure as here:
>
> https://autobuilder.yoctoproject.org/typhoon/#/builders/80/builds/4950/steps/14/logs/stdio
>
>
> i.e. from
>
> oe-selftest -r runtime_test.TestImage.test_testimage_dnf
>
I realize just now that I forgot to send an email telling exactly that,
sorry!
> Cheers,
>
> Richard
>
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#179308): https://lists.openembedded.org/g/openembedded-core/message/179308
> Mute This Topic: https://lists.openembedded.org/mt/97797700/3617179
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2023-03-30 12:55 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-23 10:08 [PATCH] lib/oe/gpg_sign.py: Avoid race when creating .sig files in detach_sign Tobias Hagelborn
2023-03-29 22:33 ` [OE-core] " Richard Purdie
[not found] ` <1751049D3A378E36.12651@lists.openembedded.org>
2023-03-30 9:10 ` Richard Purdie
2023-03-30 12:39 ` Tobias Hagelborn
2023-03-30 12:54 ` Alexandre Belloni [this message]
[not found] ` <1751275EEB419793.12651@lists.openembedded.org>
2023-03-30 9:14 ` Richard Purdie
[not found] <174F047FDC936771.19937@lists.openembedded.org>
2023-03-23 10:13 ` Tobias Hagelborn
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-all 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=202303301254507aff37b1@mail.local \
--to=alexandre.belloni@bootlin.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=richard.purdie@linuxfoundation.org \
--cc=tobias.hagelborn@axis.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.