Received: by 10.192.165.156 with SMTP id m28csp286596imm; Tue, 17 Apr 2018 10:06:38 -0700 (PDT) X-Google-Smtp-Source: AIpwx49C7w9WQSli1RglnhC+zJjMWlCgkd74TmzaU+xdhlFFJAUQO6dwdfz3QLK/7qTLEgWCeRKH X-Received: by 10.167.134.80 with SMTP id a16mr2735962pfo.172.1523984798523; Tue, 17 Apr 2018 10:06:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523984798; cv=none; d=google.com; s=arc-20160816; b=HdbMZp9nTh/CALMc8Hc6KmbFgH1mi/gSRXHtrdRPbxgSbI/RwFC02jy5HZBvhpS+ju 74t9nbghsi0mQ0ctQbk2cY76GYrsb1cFNnm2pbhqx9UQCqH4IXeVQz4CRl44xLptazHu gWa8S2YrFKKHg8N08oXLQ/q0ANNLQHAfXYx8agwA571JKBQ2eLrjs75tcB362gpf3XXp uiB3UFAkCkRyGgH3ETqZPkHHW4tNckxjb4mU6dw4nI1XfQ1ztUGX3/JvR6QT3b4FCrXA hOMnBjRjm3J8W7WKQ98b1ADiOlJk6jUPILvkKIvM62/0qHNsr75ltZ/6oj+Ixje8Ow5H UIFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=sZRmsWK9SMWC43KS7ylAtDFoP3tC4ed0xQF+J/gDzC4=; b=gZ7JKpcJ075rXQ3uCHtsRzV0l6WIoo38NfK3fifHsLsSWbHsO0UGWz/mU2R2S4utyj SYIzMc07kSnDHXrqADMjFDz+2QoNqykjsUzNUrUGiaLeqff6UzdIJ+0b2SCY395ptM5i IKO6RnftjAZhlHFPgPkit+J43NED1N7DSKNn3EQ8txGIrfSKsyRRPhJbjajrISdIYk4c t0adtMJojE5uLpPQ8S7mkeEF3KfwruZRPXJ2MJ9kp7NtWlw6fA+BF9yOI+obF3ZzZ8NY sBZIEaJsJoPizY+UcXizbdMMkbEQSYXywR8zeL+z+9bi9omx4vqHWpsKgw++oHJSdTYW sMsw== 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 w7si8611018pfn.363.2018.04.17.10.06.22; Tue, 17 Apr 2018 10:06:38 -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 S1753724AbeDQQB1 (ORCPT + 99 others); Tue, 17 Apr 2018 12:01:27 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:60438 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753596AbeDQQBX (ORCPT ); Tue, 17 Apr 2018 12:01:23 -0400 Received: from localhost (unknown [46.44.180.42]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id C8CB2DF6; Tue, 17 Apr 2018 16:01:22 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Huacai Chen , James Hogan , Kees Cook , Rich Felker , Ralf Baechle , Russell King , Yoshinori Sato , Ingo Molnar , Andrew Morton , Linus Torvalds Subject: [PATCH 4.16 39/68] zboot: fix stack protector in compressed boot phase Date: Tue, 17 Apr 2018 17:57:52 +0200 Message-Id: <20180417155750.920900508@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180417155749.341779147@linuxfoundation.org> References: <20180417155749.341779147@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.16-stable review patch. If anyone has any objections, please let me know. ------------------ From: Huacai Chen commit 7bbaf27d9c83037b6e60a818e57bdbedf6bc15be upstream. Calling __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). Link: http://lkml.kernel.org/r/1522226933-29317-1-git-send-email-chenhc@lemote.com Fixes: 8779657d29c0 ("stackprotector: Introduce CONFIG_CC_STACKPROTECTOR_STRONG") Signed-off-by: Huacai Chen Acked-by: James Hogan Acked-by: Kees Cook Acked-by: Rich Felker Cc: Ralf Baechle Cc: Russell King Cc: Yoshinori Sato Cc: Ingo Molnar Cc: Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- arch/arm/boot/compressed/misc.c | 9 +-------- arch/mips/boot/compressed/decompress.c | 9 +-------- arch/sh/boot/compressed/misc.c | 9 +-------- 3 files changed, 3 insertions(+), 24 deletions(-) --- 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_s { 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; --- 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 boo { 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); --- 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