mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Nick Terrell <terrelln@fb.com>
To: Borislav Petkov <bp@alien8.de>
Cc: Nick Terrell <nickrterrell@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Chris Mason <clm@fb.com>,
	"linux-kbuild@vger.kernel.org" <linux-kbuild@vger.kernel.org>,
	"x86@kernel.org" <x86@kernel.org>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	Petr Malat <oss@malat.biz>, Kees Cook <keescook@chromium.org>,
	Kernel Team <Kernel-team@fb.com>,
	Adam Borowski <kilobyte@angband.pl>,
	Patrick Williams <patrickw3@fb.com>,
	"Michael van der Westhuizen" <rmikey@fb.com>,
	"mingo@kernel.org" <mingo@kernel.org>,
	"Patrick Williams" <patrick@stwcx.xyz>,
	Sedat Dilek <sedat.dilek@gmail.com>
Subject: Re: [PATCH v4 6/8] x86: bump ZO_z_extra_bytes margin for zstd
Date: Wed, 1 Apr 2020 17:33:03 +0000	[thread overview]
Message-ID: <D45F637D-6BB0-4F08-BEBE-FAB9B56F36F6@fb.com> (raw)
In-Reply-To: <20200401093310.GA13748@zn.tnic>



> On Apr 1, 2020, at 2:33 AM, Borislav Petkov <bp@alien8.de> wrote:
> 
> On Tue, Mar 31, 2020 at 10:39:11PM -0700, Nick Terrell wrote:
>> From: Nick Terrell <terrelln@fb.com>
>> 
>> Bump the ZO_z_extra_bytes margin for zstd.
>> 
>> Zstd needs 3 bytes per 128 KB, and has a 22 byte fixed overhead.
>> Zstd needs to maintain 128 KB of space at all times, since that is
>> the maximum block size. See the comments regarding in-place
>> decompression added in lib/decompress_unzstd.c for details.
>> 
>> Reviewed-by: Kees Cook <keescook@chromium.org>
>> Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
>> Signed-off-by: Nick Terrell <terrelln@fb.com>
>> ---
>> arch/x86/boot/header.S | 8 +++++++-
>> 1 file changed, 7 insertions(+), 1 deletion(-)
>> 
>> diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
>> index 97d9b6d6c1af..b820875c5c95 100644
>> --- a/arch/x86/boot/header.S
>> +++ b/arch/x86/boot/header.S
>> @@ -536,8 +536,14 @@ pref_address:		.quad LOAD_PHYSICAL_ADDR	# preferred load addr
>> # the size-dependent part now grows so fast.
>> #
>> # extra_bytes = (uncompressed_size >> 8) + 65536
>> +#
>> +# ZSTD compressed data grows by at most 3 bytes per 128K, and only has a 22
>> +# byte fixed overhead but has a maximum block size of 128K, so it needs a
>> +# larger margin.
>> +#
>> +# extra_bytes = (uncompressed_size >> 8) + 131072
>> 
>> -#define ZO_z_extra_bytes	((ZO_z_output_len >> 8) + 65536)
>> +#define ZO_z_extra_bytes	((ZO_z_output_len >> 8) + 131072)
>> #if ZO_z_output_len > ZO_z_input_len
>> # define ZO_z_extract_offset	(ZO_z_output_len + ZO_z_extra_bytes - \
>> 				 ZO_z_input_len)
>> -- 
> 
> So why is this change unconditional if only this compression alg. needs
> it?

The code is currently written so that all the compression algorithms use the
same ZO_z_extra_bytes. It is taken to be the maximum of the growth rate
plus the maximum fixed overhead. Just a few lines above is the comment:

# … Hence safety
# margin should be updated to cover all decompressors so that we don't
# need to deal with each of them separately. Please check
# the description in lib/decompressor_xxx.c for specific information.

So I was been following the guidance in the comments. If we want to refactor
it to handle each compressor individually we could make ZO_z_extra_bytes
smaller for most algorithms.

Does it matter? I’m not an expert here, but it seems to me that requiring an
extra 64 KB of RAM for kernel decompression isn’t such an onerous addition.

Best,
Nick


  reply	other threads:[~2020-04-01 17:33 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-01  5:39 [PATCH v4 0/8] Add support for ZSTD-compressed kernel and initramfs Nick Terrell
2020-04-01  5:39 ` [PATCH v4 1/8] lib: prepare zstd for preboot environment Nick Terrell
2020-04-01  5:39 ` [PATCH v4 2/8] lib: prepare xxhash " Nick Terrell
2020-04-01  5:39 ` [PATCH v4 3/8] lib: add zstd support to decompress Nick Terrell
2020-04-01  5:39 ` [PATCH v4 4/8] init: add support for zstd compressed kernel Nick Terrell
2020-04-01  5:39 ` [PATCH v4 5/8] usr: add support for zstd compressed initramfs Nick Terrell
2020-04-01  5:39 ` [PATCH v4 6/8] x86: bump ZO_z_extra_bytes margin for zstd Nick Terrell
2020-04-01  9:33   ` Borislav Petkov
2020-04-01 17:33     ` Nick Terrell [this message]
2020-04-02 15:58       ` Borislav Petkov
2020-04-02 20:25         ` Nick Terrell
2020-04-03 10:19           ` Borislav Petkov
2020-04-06 10:47           ` Sedat Dilek
2020-04-01  5:39 ` [PATCH v4 7/8] x86: Add support for ZSTD compressed kernel Nick Terrell
2020-04-01  5:39 ` [PATCH v4 8/8] .gitignore: add ZSTD-compressed files Nick Terrell
2020-04-01 10:59 ` [PATCH v4 0/8] Add support for ZSTD-compressed kernel and initramfs Gabriel C
2020-04-01 17:36 ` Sedat Dilek

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=D45F637D-6BB0-4F08-BEBE-FAB9B56F36F6@fb.com \
    --to=terrelln@fb.com \
    --cc=Kernel-team@fb.com \
    --cc=bp@alien8.de \
    --cc=clm@fb.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=keescook@chromium.org \
    --cc=kilobyte@angband.pl \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=nickrterrell@gmail.com \
    --cc=oss@malat.biz \
    --cc=patrick@stwcx.xyz \
    --cc=patrickw3@fb.com \
    --cc=rmikey@fb.com \
    --cc=sedat.dilek@gmail.com \
    --cc=x86@kernel.org \
    /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

all inboxes | Powered by JetHome®