lkml.org 
[lkml]   [2018]   [Oct]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.18 094/228] ARM: mvebu: declare asm symbols as character arrays in pmsu.c
    Date
    4.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Ethan Tuttle <ethan@ethantuttle.com>

    [ Upstream commit d0d378ff451a66e486488eec842e507d28145813 ]

    With CONFIG_FORTIFY_SOURCE, memcpy uses the declared size of operands to
    detect buffer overflows. If src or dest is declared as a char, attempts to
    copy more than byte will result in a fortify_panic().

    Address this problem in mvebu_setup_boot_addr_wa() by declaring
    mvebu_boot_wa_start and mvebu_boot_wa_end as character arrays. Also remove
    a couple addressof operators to avoid "arithmetic on pointer to an
    incomplete type" compiler error.

    See commit 54a7d50b9205 ("x86: mark kprobe templates as character arrays,
    not single characters") for a similar fix.

    Fixes "detected buffer overflow in memcpy" error during init on some mvebu
    systems (armada-370-xp, armada-375):

    (fortify_panic) from (mvebu_setup_boot_addr_wa+0xb0/0xb4)
    (mvebu_setup_boot_addr_wa) from (mvebu_v7_cpu_pm_init+0x154/0x204)
    (mvebu_v7_cpu_pm_init) from (do_one_initcall+0x7c/0x1a8)
    (do_one_initcall) from (kernel_init_freeable+0x1bc/0x254)
    (kernel_init_freeable) from (kernel_init+0x8/0x114)
    (kernel_init) from (ret_from_fork+0x14/0x2c)

    Signed-off-by: Ethan Tuttle <ethan@ethantuttle.com>
    Tested-by: Ethan Tuttle <ethan@ethantuttle.com>
    Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/arm/mach-mvebu/pmsu.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- a/arch/arm/mach-mvebu/pmsu.c
    +++ b/arch/arm/mach-mvebu/pmsu.c
    @@ -116,8 +116,8 @@ void mvebu_pmsu_set_cpu_boot_addr(int hw
    PMSU_BOOT_ADDR_REDIRECT_OFFSET(hw_cpu));
    }

    -extern unsigned char mvebu_boot_wa_start;
    -extern unsigned char mvebu_boot_wa_end;
    +extern unsigned char mvebu_boot_wa_start[];
    +extern unsigned char mvebu_boot_wa_end[];

    /*
    * This function sets up the boot address workaround needed for SMP
    @@ -130,7 +130,7 @@ int mvebu_setup_boot_addr_wa(unsigned in
    phys_addr_t resume_addr_reg)
    {
    void __iomem *sram_virt_base;
    - u32 code_len = &mvebu_boot_wa_end - &mvebu_boot_wa_start;
    + u32 code_len = mvebu_boot_wa_end - mvebu_boot_wa_start;

    mvebu_mbus_del_window(BOOTROM_BASE, BOOTROM_SIZE);
    mvebu_mbus_add_window_by_id(crypto_eng_target, crypto_eng_attribute,

    \
     
     \ /
      Last update: 2018-10-02 16:09    [W:4.109 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site