Received: by 10.213.65.68 with SMTP id h4csp213494imn; Wed, 28 Mar 2018 02:03:10 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/Z3I85jxLwtsAEqiZ9T/fVqlR3JpfXCafE21evTZMLjdRr/rNJqK6EFuSOXLANN4xp8rBX X-Received: by 2002:a17:902:b783:: with SMTP id e3-v6mr2989709pls.41.1522227790815; Wed, 28 Mar 2018 02:03:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522227790; cv=none; d=google.com; s=arc-20160816; b=dDKpdixfLOPRaDazZkWb/BDBtAa6mCvQyo6n7TDFWlT00vYQr0PEdFUOKBl+O1Wa96 Vn2ZwxlLsbcWTWM1akiDtxpTptjFOsVbI7e0yQCLFisEKGlblPmVvmEDjiKQEUrAhQYI oKObX8HRg2hIZ+Kx44s0trb1t1pHKnp9CMc7U07GWD62mzMkxUinN2/e58HoIHfDKJGz ii+68mApFTzl9SIUpwq1L3BjCnUO+K0pdpmpeIcchWJDkdp6Yno//8OSE4BbeNROI6La CkC8hB7LStqoGkM5Cyb5B1sthnxAe1FpNYE0uToKhSBMRTq6w2i3ygW3qXLD6+zp/vFX DlMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=nPGczTuF//zVwVvxcm2xIRLSuHobLPvQ048htJ3niBE=; b=re39xVDd+0jzGV4zhoikor5HQg9jY2opwas8RtT8yrcjubnhi+gBxHtppD7cijpfgO aW8HYCfqh68z0Np8Cd6tBomo26elHevOLqeF+k4MhE3YVV20Hz0/W+2zmw3m4FEgRH+c T7+svFyAbNjC6X+ZHpmAaNPMUv+aMhFkZ4ITt4MHmvp5B+Y8y6KjoGaldA19XJTCfPTO slC3WSXp9ZwjRth9cg02fkWNmAfcPQrlX30/2QHrnrvqyue01ZcFjWTYOplCRV4gWXoX KNnetvdH1ysExuerikd2bD+StZUzDUe9Rs/IG+L2v/jtdHzzRj8We6hBS50OnB06rYjQ 0Hsw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n7si1223884pgv.75.2018.03.28.02.02.56; Wed, 28 Mar 2018 02:03:10 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752682AbeC1Ils (ORCPT + 99 others); Wed, 28 Mar 2018 04:41:48 -0400 Received: from guitar.tcltek.co.il ([192.115.133.116]:57164 "EHLO mx.tkos.co.il" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751072AbeC1Ilq (ORCPT ); Wed, 28 Mar 2018 04:41:46 -0400 Received: from sapphire.tkos.co.il (unknown [10.0.4.3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx.tkos.co.il (Postfix) with ESMTPS id F3DA644004A; Wed, 28 Mar 2018 11:41:42 +0300 (IDT) Date: Wed, 28 Mar 2018 11:41:41 +0300 From: Baruch Siach To: Huacai Chen Cc: Andrew Morton , linux-mips@linux-mips.org, Rich Felker , Russell King , Yoshinori Sato , linux-sh@vger.kernel.org, linux-kernel@vger.kernel.org, Ralf Baechle , linux-mm@kvack.org, stable@vger.kernel.org, James Hogan , linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH V4] ZBOOT: fix stack protector in compressed boot phase Message-ID: <20180328084141.vseuroknkrxhraps@sapphire.tkos.co.il> References: <1522226296-3091-1-git-send-email-chenhc@lemote.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1522226296-3091-1-git-send-email-chenhc@lemote.com> User-Agent: NeoMutt/20180223 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Huacai, On Wed, Mar 28, 2018 at 04:38:16PM +0800, Huacai Chen wrote: > Call __stack_chk_guard_setup() in decompress_kernel() is too late that > stack checking always fails for decompress_kernel() itself. So remove > __stack_chk_guard_setup() and initialize __stack_chk_guard before we > call decompress_kernel(). > > Original code comes from ARM but also used for MIPS and SH, so fix them > together. If without this fix, compressed booting of these archs will > fail because stack checking is enabled by default (>=4.16). > > V1 -> V2: Fix build on ARM. > V2 -> V3: Fix build on SuperH. > V3 -> V4: Initialize __stack_chk_guard in C code as a constant. > > Cc: stable@vger.kernel.org > Signed-off-by: Huacai Chen > --- > arch/arm/boot/compressed/head.S | 4 ++++ > arch/arm/boot/compressed/misc.c | 7 ------- > arch/mips/boot/compressed/decompress.c | 7 ------- > arch/mips/boot/compressed/head.S | 4 ++++ > arch/sh/boot/compressed/head_32.S | 8 ++++++++ > arch/sh/boot/compressed/head_64.S | 4 ++++ > arch/sh/boot/compressed/misc.c | 7 ------- > 7 files changed, 20 insertions(+), 21 deletions(-) This diffstat doesn't match the patch below. The patch touches no .S file. baruch > > diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c > index 16a8a80..e8fe51f 100644 > --- a/arch/arm/boot/compressed/misc.c > +++ b/arch/arm/boot/compressed/misc.c > @@ -128,12 +128,7 @@ asmlinkage void __div0(void) > error("Attempting division by 0!"); > } > > -unsigned long __stack_chk_guard; > - > -void __stack_chk_guard_setup(void) > -{ > - __stack_chk_guard = 0x000a0dff; > -} > +const unsigned long __stack_chk_guard = 0x000a0dff; > > void __stack_chk_fail(void) > { > @@ -150,8 +145,6 @@ decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p, > { > int ret; > > - __stack_chk_guard_setup(); > - > output_data = (unsigned char *)output_start; > free_mem_ptr = free_mem_ptr_p; > free_mem_end_ptr = free_mem_ptr_end_p; > diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c > index fdf99e9..81df904 100644 > --- a/arch/mips/boot/compressed/decompress.c > +++ b/arch/mips/boot/compressed/decompress.c > @@ -76,12 +76,7 @@ void error(char *x) > #include "../../../../lib/decompress_unxz.c" > #endif > > -unsigned long __stack_chk_guard; > - > -void __stack_chk_guard_setup(void) > -{ > - __stack_chk_guard = 0x000a0dff; > -} > +const unsigned long __stack_chk_guard = 0x000a0dff; > > void __stack_chk_fail(void) > { > @@ -92,8 +87,6 @@ void decompress_kernel(unsigned long boot_heap_start) > { > unsigned long zimage_start, zimage_size; > > - __stack_chk_guard_setup(); > - > zimage_start = (unsigned long)(&__image_begin); > zimage_size = (unsigned long)(&__image_end) - > (unsigned long)(&__image_begin); > diff --git a/arch/sh/boot/compressed/misc.c b/arch/sh/boot/compressed/misc.c > index 627ce8e..c15cac9 100644 > --- a/arch/sh/boot/compressed/misc.c > +++ b/arch/sh/boot/compressed/misc.c > @@ -104,12 +104,7 @@ static void error(char *x) > while(1); /* Halt */ > } > > -unsigned long __stack_chk_guard; > - > -void __stack_chk_guard_setup(void) > -{ > - __stack_chk_guard = 0x000a0dff; > -} > +const unsigned long __stack_chk_guard = 0x000a0dff; > > void __stack_chk_fail(void) > { > @@ -130,8 +125,6 @@ void decompress_kernel(void) > { > unsigned long output_addr; > > - __stack_chk_guard_setup(); > - > #ifdef CONFIG_SUPERH64 > output_addr = (CONFIG_MEMORY_START + 0x2000); > #else -- http://baruch.siach.name/blog/ ~. .~ Tk Open Systems =}------------------------------------------------ooO--U--Ooo------------{= - baruch@tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -