From: joeyli <jlee@suse.com>
To: Pavel Machek <pavel@ucw.cz>
Cc: linux-kernel@vger.kernel.org,
linux-security-module@vger.kernel.org, linux-efi@vger.kernel.org,
linux-pm@vger.kernel.org, linux-crypto@vger.kernel.org,
opensuse-kernel@opensuse.org, David Howells <dhowells@redhat.com>,
"Rafael J. Wysocki" <rjw@sisk.pl>,
Matthew Garrett <mjg59@srcf.ucam.org>,
Len Brown <len.brown@intel.com>, Josh Boyer <jwboyer@redhat.com>,
Vojtech Pavlik <vojtech@suse.cz>,
Matt Fleming <matt.fleming@intel.com>,
James Bottomley <james.bottomley@hansenpartnership.com>,
Greg KH <gregkh@linuxfoundation.org>,
JKosina@suse.com, Rusty Russell <rusty@rustcorp.com.au>,
Herbert Xu <herbert@gondor.hengli.com.au>,
"David S. Miller" <davem@davemloft.net>,
"H. Peter Anvin" <hpa@zytor.com>, Michal Marek <mmarek@suse.cz>,
Gary Lin <GLin@suse.com>, Vivek Goyal <vgoyal@redhat.com>
Subject: Re: [PATCH 12/18] Hibernate: generate and verify signature of snapshot
Date: Tue, 27 Aug 2013 11:22:28 +0800 [thread overview]
Message-ID: <1377573748.27967.60.camel@linux-s257.site> (raw)
In-Reply-To: <20130825163648.GI5171@amd.pavel.ucw.cz>
Hi Pavel,
Thanks for your time to review my patches.
於 日,2013-08-25 於 18:36 +0200,Pavel Machek 提到:
> On Thu 2013-08-22 19:01:51, Lee, Chun-Yi wrote:
> > This patch add the code for generate/verify signature of snapshot, it
> > put the signature to snapshot header. This approach can support both
> > on userspace hibernate and in-kernel hibernate.
> >
> > v2:
> > - Due to loaded S4 sign key before ExitBootServices, we need forward key from
> > boot kernel to resume target kernel. So this patch add a empty page in
> > snapshot image, then we keep the pfn of this empty page in snapshot header.
> > When system resume from hibernate, we fill new sign key to this empty page
> > space after snapshot image checked pass. This mechanism let boot kernel can
> > forward new sign key to resume target kernel but don't need write new private
> > key to any other storage, e.g. swap.
> >
> > Cc: Matthew Garrett <mjg59@srcf.ucam.org>
> > Reviewed-by: Jiri Kosina <jkosina@suse.cz>
> > Signed-off-by: Lee, Chun-Yi <jlee@suse.com>
> > ---
> > kernel/power/power.h | 6 +
> > kernel/power/snapshot.c | 280 +++++++++++++++++++++++++++++++++++++++++++++-
> > kernel/power/swap.c | 14 +++
> > kernel/power/user.c | 9 ++
> > 4 files changed, 302 insertions(+), 7 deletions(-)
> >
> > diff --git a/kernel/power/power.h b/kernel/power/power.h
> > index 69a81d8..84e0b06 100644
> > --- a/kernel/power/power.h
> > +++ b/kernel/power/power.h
> > @@ -3,6 +3,9 @@
> > #include <linux/utsname.h>
> > #include <linux/freezer.h>
> >
> > +/* The maximum length of snapshot signature */
> > +#define SIG_LENG 512
> > +
> > struct swsusp_info {
> > struct new_utsname uts;
> > u32 version_code;
> > @@ -11,6 +14,8 @@ struct swsusp_info {
> > unsigned long image_pages;
> > unsigned long pages;
> > unsigned long size;
> > + unsigned long skey_data_buf_pfn;
> > + u8 signature[SIG_LENG];
> > } __attribute__((aligned(PAGE_SIZE)));
>
> SIG_LEN or SIG_LENGTH. Select one.
>
I will use SIG_LEN at next version, thanks!
>
> > +static int
> > copy_data_pages(struct memory_bitmap *copy_bm, struct memory_bitmap *orig_bm)
> > {
> > struct zone *zone;
> > - unsigned long pfn;
> > + unsigned long pfn, dst_pfn;
> ...
> > + tfm = crypto_alloc_shash(SNAPSHOT_HASH, 0, 0);
> > + if (IS_ERR(tfm)) {
> > + pr_err("IS_ERR(tfm): %ld", PTR_ERR(tfm));
> > + return PTR_ERR(tfm);
> > + }
> > +
> > + desc_size = crypto_shash_descsize(tfm) + sizeof(*desc);
> > + digest_size = crypto_shash_digestsize(tfm);
> > + digest = kzalloc(digest_size + desc_size, GFP_KERNEL);
>
> Are you sure GFP_KERNEL allocation is okay at this phase of
> hibernation?
>
> Could the hashing be done at later phase, when writing the image to
> disk?
>
Thanks for you point out!
Yes, call memory allocate here is not a good design due to it causes
garbage in snapshot that will not released by resumed kernel.
I just finished another implementation, the respin patch extracts the
signature generation code to another function then call the function in
swsusp_save() after copy_data_pages() finished. We can write to memory
at that stage.
> >
> > +void **h_buf;
>
> helpfully named.
>
I will change the name to handle_buffers;
> > + ret = verify_signature(s4_wake_key, pks);
> > + if (ret) {
> > + pr_err("snapshot S4 signature verification fail: %d\n", ret);
> > + goto error_verify;
> > + } else
> > + pr_info("snapshot S4 signature verification pass!\n");
> > +
> > + if (pks->rsa.s)
> > + mpi_free(pks->rsa.s);
> > + kfree(pks);
>
> ret = 0 and fall through?
>
When verification success, verify_signature() will return 0.
Yes, here have duplicate code, I will clear up it.
> > + return 0;
> > +
> > +error_verify:
> > + if (pks->rsa.s)
> > + mpi_free(pks->rsa.s);
> > +error_mpi:
> > + kfree(pks);
> > + return ret;
> > +}
>
>
> > + ret = crypto_shash_final(desc, digest);
> > + if (ret)
> > + goto error_shash;
> > +
> > + ret = snapshot_verify_signature(digest, digest_size);
> > + if (ret)
> > + goto error_verify;
> > +
> > + kfree(h_buf);
> > + kfree(digest);
> > + crypto_free_shash(tfm);
> > + return 0;
>
> These four lines can be deleted.
>
Yes, here also duplicate, I will remove.
> > +
> > +error_verify:
> > +error_shash:
> > + kfree(h_buf);
> > + kfree(digest);
> > +error_digest:
> > + crypto_free_shash(tfm);
> > + return ret;
> > +}
> > +
> Pavel
Thanks a lot!
Joey Lee
next prev parent reply other threads:[~2013-08-27 3:23 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-22 11:01 [RFC PATCH 00/18 v3] Signature verification of hibernate snapshot Lee, Chun-Yi
2013-08-22 11:01 ` [PATCH 01/18] asymmetric keys: add interface and skeleton for implement signature generation Lee, Chun-Yi
2013-08-22 11:01 ` [PATCH 02/18] asymmetric keys: implement EMSA_PKCS1-v1_5-ENCODE in rsa Lee, Chun-Yi
2013-08-25 15:53 ` Pavel Machek
2013-08-26 10:17 ` joeyli
2013-08-22 11:01 ` [PATCH 03/18] asymmetric keys: separate the length checking of octet string from RSA_I2OSP Lee, Chun-Yi
2013-08-25 16:01 ` Pavel Machek
2013-08-26 10:25 ` joeyli
2013-08-26 11:27 ` Pavel Machek
2013-08-27 8:36 ` Jiri Kosina
2013-08-22 11:01 ` [PATCH 04/18] asymmetric keys: implement OS2IP in rsa Lee, Chun-Yi
2013-08-22 11:01 ` [PATCH 05/18] asymmetric keys: implement RSASP1 Lee, Chun-Yi
2013-08-22 11:01 ` [PATCH 06/18] asymmetric keys: support parsing PKCS #8 private key information Lee, Chun-Yi
2013-08-25 16:10 ` Pavel Machek
2013-08-22 11:01 ` [PATCH 07/18] asymmetric keys: explicitly add the leading zero byte to encoded message Lee, Chun-Yi
2013-08-25 16:13 ` Pavel Machek
2013-08-22 11:01 ` [PATCH 08/18] Secure boot: Add new capability Lee, Chun-Yi
2013-08-25 16:14 ` Pavel Machek
2013-08-22 11:01 ` [PATCH 09/18] Secure boot: Add a dummy kernel parameter that will switch on Secure Boot mode Lee, Chun-Yi
2013-08-25 16:16 ` Pavel Machek
2013-08-22 11:01 ` [PATCH 10/18] efi: Enable secure boot lockdown automatically when enabled in firmware Lee, Chun-Yi
2013-08-25 16:22 ` Pavel Machek
2013-08-25 16:26 ` Matthew Garrett
2013-09-03 10:49 ` Matt Fleming
2013-08-22 11:01 ` [PATCH 11/18] Hibernate: introduced RSA key-pair to verify signature of snapshot Lee, Chun-Yi
2013-08-25 16:25 ` Pavel Machek
2013-08-27 9:04 ` joeyli
2013-08-27 11:29 ` Pavel Machek
2013-08-27 12:01 ` Manfred Hollstein
2013-08-27 14:17 ` Pavel Machek
2013-08-27 13:12 ` joeyli
2013-09-05 8:53 ` Matt Fleming
2013-09-05 10:13 ` joeyli
2013-09-05 10:31 ` Matt Fleming
2013-09-05 13:28 ` joeyli
2013-08-22 11:01 ` [PATCH 12/18] Hibernate: generate and " Lee, Chun-Yi
2013-08-25 16:36 ` Pavel Machek
2013-08-27 3:22 ` joeyli [this message]
2013-08-22 11:01 ` [PATCH 13/18] Hibernate: Avoid S4 sign key data included in snapshot image Lee, Chun-Yi
2013-08-25 16:39 ` Pavel Machek
2013-08-27 8:33 ` joeyli
2013-08-22 11:01 ` [PATCH 14/18] Hibernate: applied SNAPSHOT_VERIFICATION config to switch signature check Lee, Chun-Yi
2013-08-22 11:01 ` [PATCH 15/18] Hibernate: adapt to UEFI secure boot with " Lee, Chun-Yi
2013-08-25 16:42 ` Pavel Machek
2013-08-27 10:14 ` joeyli
2013-08-22 11:01 ` [PATCH 16/18] Hibernate: show the verification time for monitor performance Lee, Chun-Yi
2013-08-22 11:01 ` [PATCH 17/18] Hibernate: introduced SNAPSHOT_SIG_HASH config for select hash algorithm Lee, Chun-Yi
2013-08-25 16:43 ` Pavel Machek
2013-08-27 10:22 ` joeyli
2013-08-27 11:30 ` Pavel Machek
2013-08-27 12:54 ` joeyli
2013-08-22 11:01 ` [PATCH 18/18] Hibernate: notify bootloader regenerate key-pair for snapshot verification Lee, Chun-Yi
2013-08-28 21:01 ` [RFC PATCH 00/18 v3] Signature verification of hibernate snapshot Florian Weimer
2013-08-29 0:01 ` joeyli
2013-08-29 21:32 ` Pavel Machek
2013-08-29 22:30 ` joeyli
2013-09-01 10:41 ` Florian Weimer
2013-09-01 16:04 ` Matthew Garrett
2013-09-01 16:40 ` Florian Weimer
2013-09-01 16:46 ` Matthew Garrett
2013-09-02 2:12 ` joeyli
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=1377573748.27967.60.camel@linux-s257.site \
--to=jlee@suse.com \
--cc=GLin@suse.com \
--cc=JKosina@suse.com \
--cc=davem@davemloft.net \
--cc=dhowells@redhat.com \
--cc=gregkh@linuxfoundation.org \
--cc=herbert@gondor.hengli.com.au \
--cc=hpa@zytor.com \
--cc=james.bottomley@hansenpartnership.com \
--cc=jwboyer@redhat.com \
--cc=len.brown@intel.com \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=matt.fleming@intel.com \
--cc=mjg59@srcf.ucam.org \
--cc=mmarek@suse.cz \
--cc=opensuse-kernel@opensuse.org \
--cc=pavel@ucw.cz \
--cc=rjw@sisk.pl \
--cc=rusty@rustcorp.com.au \
--cc=vgoyal@redhat.com \
--cc=vojtech@suse.cz \
/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