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: <e7a2d995-e90f-4912-a0b9-4cf5725b246b@email.android.com>
Date:	Wed, 23 Oct 2013 01:26:19 +0100
From:	"H. Peter Anvin" <hpa@...or.com>
To:	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

Wouldn't it be better to fix gzip than hacking around this in the kernel?

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
>#
>---------------------------------------------------------------------------
> 

-- 
Sent from my mobile phone. Please excuse brevity and lack of formatting.
--
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