Re: [PATCH 1/2] boot: increase stack size for kernel boot loader decompressor

From: Yinghai Lu
Date: Tue Apr 08 2008 - 13:54:34 EST


On Tue, Apr 8, 2008 at 1:23 AM, Ingo Molnar <mingo@xxxxxxx> wrote:
>
> * Alexander van Heukelum <heukelum@xxxxxxxxxxxxx> wrote:
>
> > I did see that the malloc space that the inflate code is using is
> > taken from _after_ the end of the bss. I don't see how this is
> > protected from being used/overwritten. Changing the stack size changes
> > the memory layout a bit... maybe you were so unlucky to create a
> > vmlinux image that was just barely smaller than some threshold and
> > increasing the stack size made the decompression/relocation area be
> > located somewhere else?
> >
> > Test patch follows.
>
> that's a really interesting theory.
>
> FWIIW, i've been booting allyesconfig bzImages for a long time (with
> only minimal amount of drivers disabled - mostly old ISA ones that
> assume the presence of the real hardware), and they boot and work fine
> on both 32-bit and 64-bit typical whitebox PCs. That means huge bzImages
> that decompresses into a ~41 MB kernel image. I'd expect that to be a
> rather severe test of the decompressor.

i don't that Alexander's patch is needed.

also because Alex move heap before _end,
we may need add some extra for buffer offset

/* Replace the compressed data size with the uncompressed size */
subl input_len(%ebp), %ebx
movl output_len(%ebp), %eax
addl %eax, %ebx
/* Add 8 bytes for every 32K input block */
shrl $12, %eax
addl %eax, %ebx
/* Add 32K + 18 bytes of extra slack and align on a 4K boundary */
addl $(32768 + 18 + 4095), %ebx
andl $~4095, %ebx =============================> need add
heap size too.
....



/* Replace the compressed data size with the uncompressed size */
movl input_len(%rip), %eax
subq %rax, %rbx
movl output_len(%rip), %eax
addq %rax, %rbx
/* Add 8 bytes for every 32K input block */
shrq $12, %rax
addq %rax, %rbx
/* Add 32K + 18 bytes of extra slack and align on a 4K boundary */
addq $(32768 + 18 + 4095), %rbx
=============================> need add heap size too.
andq $~4095, %rbx

do we need to move pgtable before _end?

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