lkml.org 
[lkml]   [2008]   [Jun]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 13/14] initrd vs bss section clearing.
    From: Heiko Carstens <heiko.carstens@de.ibm.com>

    In case the initrd is located within the bss section it will be
    overwritten when the section is cleared. To prevent this just move
    the initrd right behind the bss section if it starts within the
    section.
    The current code already moves the initrd if the bootmem allocator
    bitmap would overwrite it. With this patch we should be safe against
    initrd corruptions.

    Cc: Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
    Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    ---

    arch/s390/kernel/early.c | 18 ++++++++++++++++++
    1 file changed, 18 insertions(+)

    Index: quilt-2.6/arch/s390/kernel/early.c
    ===================================================================
    --- quilt-2.6.orig/arch/s390/kernel/early.c
    +++ quilt-2.6/arch/s390/kernel/early.c
    @@ -380,6 +380,23 @@ static __init void detect_machine_facili
    #endif
    }

    +static __init void rescue_initrd(void)
    +{
    +#ifdef CONFIG_BLK_DEV_INITRD
    + /*
    + * Move the initrd right behind the bss section in case it starts
    + * within the bss section. So we don't overwrite it when the bss
    + * section gets cleared.
    + */
    + if (!INITRD_START || !INITRD_SIZE)
    + return;
    + if (INITRD_START >= (unsigned long) __bss_stop)
    + return;
    + memmove(__bss_stop, (void *) INITRD_START, INITRD_SIZE);
    + INITRD_START = (unsigned long) __bss_stop;
    +#endif
    +}
    +
    /*
    * Save ipl parameters, clear bss memory, initialize storage keys
    * and create a kernel NSS at startup if the SAVESYS= parm is defined
    @@ -389,6 +406,7 @@ void __init startup_init(void)
    unsigned long long memsize;

    ipl_save_parameters();
    + rescue_initrd();
    clear_bss_section();
    init_kernel_storage_key();
    lockdep_init();
    --
    blue skies,
    Martin.

    "Reality continues to ruin my life." - Calvin.



    \
     
     \ /
      Last update: 2008-06-03 19:09    [W:0.042 / U:59.544 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site