lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <52673A1E.60005@roeck-us.net>
Date:	Tue, 22 Oct 2013 19:53:18 -0700
From:	Guenter Roeck <linux@...ck-us.net>
To:	"H. Peter Anvin" <hpa@...or.com>,
	Andrew Boie <andrew.p.boie@...el.com>,
	linux-kernel@...r.kernel.org
CC:	tglx@...utronix.de, mmarek@...e.cz
Subject: Re: [PATCH 1/1] x86: boot: support minigzip bzImage compression

On 10/22/2013 05:26 PM, H. Peter Anvin wrote:
> Wouldn't it be better to fix gzip than hacking around this in the kernel?
>
Or just change the build system to have /bin/gzip point to minigzip if so
desired. I have done the same to replace it with pigz.
Debian/Ubuntu provides the update-alternatives command for that
purpose. If that is not available, just hard-link it.

In general, I don't think it would be a good idea to add tool variant
dependencies like this one to the kernel configuration.

Guenter

> Andrew Boie <andrew.p.boie@...el.com> wrote:
>> Android OTA system computes very efficient diffs of compressed files
>> if the deflate() algorithm it has access to is the same version as
>> used to create the original file. Here we add support for compressing
>> the kernel with 'minigzip' which uses the deflate() inside zlib.
>> This is much better than using 'gzip' as that tool has a very old
>> version of deflate() inside the gzip codebase instead of linking
>> against
>> zlib.
>>
>> Signed-off-by: Andrew Boie <andrew.p.boie@...el.com>
>> ---
>> arch/x86/Kconfig                  |  1 +
>> arch/x86/boot/compressed/Makefile |  3 +++
>> arch/x86/boot/compressed/misc.c   |  2 +-
>> init/Kconfig                      | 18 +++++++++++++++++-
>> scripts/Makefile.lib              |  7 +++++++
>> 5 files changed, 29 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
>> index f67e839..aa91cef 100644
>> --- a/arch/x86/Kconfig
>> +++ b/arch/x86/Kconfig
>> @@ -62,6 +62,7 @@ config X86
>> 	select HAVE_REGS_AND_STACK_ACCESS_API
>> 	select HAVE_DMA_API_DEBUG
>> 	select HAVE_KERNEL_GZIP
>> +	select HAVE_KERNEL_MINIGZIP
>> 	select HAVE_KERNEL_BZIP2
>> 	select HAVE_KERNEL_LZMA
>> 	select HAVE_KERNEL_XZ
>> diff --git a/arch/x86/boot/compressed/Makefile
>> b/arch/x86/boot/compressed/Makefile
>> index dcd90df..f000791 100644
>> --- a/arch/x86/boot/compressed/Makefile
>> +++ b/arch/x86/boot/compressed/Makefile
>> @@ -56,6 +56,8 @@ vmlinux.bin.all-$(CONFIG_X86_NEED_RELOCS) +=
>> $(obj)/vmlinux.relocs
>>
>> $(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
>> 	$(call if_changed,gzip)
>> +$(obj)/vmlinux.bin.mgz: $(vmlinux.bin.all-y) FORCE
>> +	$(call if_changed,minigzip)
>> $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE
>> 	$(call if_changed,bzip2)
>> $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE
>> @@ -68,6 +70,7 @@ $(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y) FORCE
>> 	$(call if_changed,lz4)
>>
>> suffix-$(CONFIG_KERNEL_GZIP)	:= gz
>> +suffix-$(CONFIG_KERNEL_MINIGZIP):= mgz
>> suffix-$(CONFIG_KERNEL_BZIP2)	:= bz2
>> suffix-$(CONFIG_KERNEL_LZMA)	:= lzma
>> suffix-$(CONFIG_KERNEL_XZ)	:= xz
>> diff --git a/arch/x86/boot/compressed/misc.c
>> b/arch/x86/boot/compressed/misc.c
>> index 434f077..4e55d32 100644
>> --- a/arch/x86/boot/compressed/misc.c
>> +++ b/arch/x86/boot/compressed/misc.c
>> @@ -125,7 +125,7 @@ static char *vidmem;
>> static int vidport;
>> static int lines, cols;
>>
>> -#ifdef CONFIG_KERNEL_GZIP
>> +#if defined(CONFIG_KERNEL_GZIP) || defined(CONFIG_KERNEL_MINIGZIP)
>> #include "../../../../lib/decompress_inflate.c"
>> #endif
>>
>> diff --git a/init/Kconfig b/init/Kconfig
>> index 3ecd8a1..818f225 100644
>> --- a/init/Kconfig
>> +++ b/init/Kconfig
>> @@ -100,6 +100,9 @@ config LOCALVERSION_AUTO
>> config HAVE_KERNEL_GZIP
>> 	bool
>>
>> +config HAVE_KERNEL_MINIGZIP
>> +	bool
>> +
>> config HAVE_KERNEL_BZIP2
>> 	bool
>>
>> @@ -118,7 +121,7 @@ config HAVE_KERNEL_LZ4
>> choice
>> 	prompt "Kernel compression mode"
>> 	default KERNEL_GZIP
>> -	depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA
>> || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4
>> +	depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_MINIGZIP ||
>> HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ ||
>> HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4
>> 	help
>> 	  The linux kernel is a kind of self-extracting executable.
>> 	  Several compression algorithms are available, which differ
>> @@ -144,6 +147,19 @@ config KERNEL_GZIP
>> 	  The old and tried gzip compression. It provides a good balance
>> 	  between compression ratio and decompression speed.
>>
>> +config KERNEL_MINIGZIP
>> +	bool "Minigzip"
>> +	depends on HAVE_KERNEL_MINIGZIP
>> +	help
>> +	  Use minigzip to compress the bzImage. This is very similar to gzip
>> +	  but uses the zlib library to compress, rather than the very old
>> version
>> +	  of zlib inside the gzip codebase. This is used for Android kernels
>> +	  so that the same version of the deflate() algorithm is used when
>> +	  building the kernel and constructing diffs with OTA applypatch,
>> which
>> +	  uncompresses sections of files that it detects are gzipped before
>> computing
>> +	  the diffs. If the versions of deflate() are out of alignment the
>> binary
>> +	  diffs tend to be very large.
>> +
>> config KERNEL_BZIP2
>> 	bool "Bzip2"
>> 	depends on HAVE_KERNEL_BZIP2
>> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
>> index 49392ec..deb1bb8 100644
>> --- a/scripts/Makefile.lib
>> +++ b/scripts/Makefile.lib
>> @@ -240,6 +240,13 @@ quiet_cmd_gzip = GZIP    $@
>> cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -n -f -9 > $@) || \
>> 	(rm -f $@ ; false)
>>
>> +# Minigzip
>> +#
>> ---------------------------------------------------------------------------
>> +
>> +quiet_cmd_minigzip = MINGZIP $@
>> +cmd_minigzip = (cat $(filter-out FORCE,$^) | minigzip -c -9 > $@) || \
>> +	(rm -f $@ ; false)
>> +
>> # DTC
>> #
>> ---------------------------------------------------------------------------
>>
>

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ