Received: by 2002:ac0:8c8e:0:0:0:0:0 with SMTP id r14csp890708ima; Wed, 6 Feb 2019 10:00:36 -0800 (PST) X-Google-Smtp-Source: AHgI3IZZDa7F/zZhAfBt2n0ldAWoryW8U+RAAENNpU1MrGe+gP12CFCM0ou+U8L5BSDg5++oRKoN X-Received: by 2002:a62:8d4f:: with SMTP id z76mr12035720pfd.2.1549476036700; Wed, 06 Feb 2019 10:00:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549476036; cv=none; d=google.com; s=arc-20160816; b=Cj49VGA5mGhEocODiMi10uxovyEZBgquIm2aaJXrIYJ6BZskl+HJ8h6Y4h/6sZq3TR blhBiuBuAAh6Q2Vgo0KDDAZkZLPePb1AYEleH/dpLGK8oVJYBOv+RTfvs41kPqmUp+v5 wrGRObyGTUcbi7HuFZHgs10tKAL9rsDJo/qGo/z91+EFtmc8RWetMkWj8Imj6hkVFswy +29AI9E73L0x9m+T7WyILXePOmdi0RhrJ+jHf68bcwsgRymabkCSKzIoml6s3wNQ1I41 2GV+Wt50tHubCC0wzMQvLsQ/imVIAEBCBe0n8YQqaztjFXGIKEEp+VcCFPvxcpX2YkFb G7MQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=+QV2gX/jTP+2VoQ3G3JyXiZGqpNPmFmFmV/k4n01s0c=; b=NlaTfFLd9unIqz/kjOBgJDM2et/m66uo2M3p1v4GsoLb0Vl6rJvWuIzZggv1yakkMa ZROEps0TBSLLmWptQb0CxrMiMWqzqx8v938M5TcIoRw+gWAywIq1/+nPXleyIAuVzK2s PqSN737IDnr669GlZgL1FwD5kLRiwGLZ108DBFqA1HMVrw+N4aUi2Cqi0t70FRBfKn+q 6jo/gJV2Ymd/HLDfqXhCWZZZ723ODGXisXmSxHYoTkPkoRKliIdnFYszpGXtnIxVaflR Ii8zf0RH3jie932CibLtXLtR8dv1GIolVuVZq/yx6oMmL8L4/gKi5G08c51cx1WAZtKg gBYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@synopsys.com header.s=mail header.b=TilB8SNv; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=synopsys.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g4si6791426pfm.85.2019.02.06.10.00.20; Wed, 06 Feb 2019 10:00:36 -0800 (PST) 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; dkim=pass header.i=@synopsys.com header.s=mail header.b=TilB8SNv; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=synopsys.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730115AbfBFRWo (ORCPT + 99 others); Wed, 6 Feb 2019 12:22:44 -0500 Received: from smtprelay4.synopsys.com ([198.182.47.9]:39480 "EHLO smtprelay.synopsys.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727467AbfBFRWm (ORCPT ); Wed, 6 Feb 2019 12:22:42 -0500 Received: from mailhost.synopsys.com (dc2-mailhost2.synopsys.com [10.12.135.162]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtprelay.synopsys.com (Postfix) with ESMTPS id 1252724E01E4; Wed, 6 Feb 2019 09:22:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=synopsys.com; s=mail; t=1549473762; bh=Y/iatXLwSHYSQr3Aro3fvmipnWzxbGhc11jlmvHQz/M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TilB8SNvVQ3f5sSylI9sINuJZYBDatCKoxKsGbOVFzxUE+wWldYLV/rfTu053CR8c CdJ80WWCXsj3quADItwocQx8DaHOpakn6iP5ltDopC8352MuKhfkzCSJEiLb732KMT xuEc7ZHi5D/72YojIT4MvBM9KHkYf/ZFwqIJmSzmPJC7l53DrNMMChxvEjjlD7mtsn d1sgSdvR/J25Z5IRqoEhgMyQpK52ZyX1Eeo/At/50uYJwg6a3OjIW1gLJ9H1qvtGdm xlNWi1vThLX+ojD4VZ90ZIuZHZd3cJbEU2NBDC5eAZsM9DdZwEhvGikGH75TAVr5XV och84dR6Q9YqA== Received: from paltsev-e7480.internal.synopsys.com (paltsev-e7480.internal.synopsys.com [10.121.3.66]) by mailhost.synopsys.com (Postfix) with ESMTP id 5B197A0090; Wed, 6 Feb 2019 17:22:39 +0000 (UTC) From: Eugeniy Paltsev To: linux-snps-arc@lists.infradead.org, Vineet Gupta Cc: linux-kernel@vger.kernel.org, Alexey Brodkin , Corentin Labbe , khilman@baylibre.com, Eugeniy Paltsev Subject: [RFC 2/2] ARC: U-boot: check magic number passed from u-boot Date: Wed, 6 Feb 2019 20:22:28 +0300 Message-Id: <20190206172228.9261-3-Eugeniy.Paltsev@synopsys.com> X-Mailer: git-send-email 2.14.5 In-Reply-To: <20190206172228.9261-1-Eugeniy.Paltsev@synopsys.com> References: <20190206172228.9261-1-Eugeniy.Paltsev@synopsys.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In case of devboards we really often disable bootloader and load Linux image in memory via JTAG. In case of using kernel with CONFIG_ARC_UBOOT_SUPPORT enabled we may crash as we will try to interpret some junk in a registers as a pointers to bootargs/etc which aren't set by anyone in case of JTAG using. Try to make it much less possible by check magic number and 'U-boot - kernel' ABI revision number passed from U-boot. Ignore U-boot arguments if we got wrong magic number or unknown ABI revision. Signed-off-by: Eugeniy Paltsev --- arch/arc/kernel/head.S | 5 ++++- arch/arc/kernel/setup.c | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/arch/arc/kernel/head.S b/arch/arc/kernel/head.S index 7095055bb874..3fb88ec62bc7 100644 --- a/arch/arc/kernel/head.S +++ b/arch/arc/kernel/head.S @@ -92,10 +92,13 @@ ENTRY(stext) #ifdef CONFIG_ARC_UBOOT_SUPPORT ; Uboot - kernel ABI + ; r1 = bits [31:8] magic number, bits [7:0] uboot-kernel ABI revision + ; ABI revision 0: ; r0 = [0] No uboot interaction, [1] cmdline in r2, [2] DTB in r2 - ; r1 = magic number (board identity, unused as of now ; r2 = pointer to uboot provided cmdline or external DTB in mem ; These are handled later in handle_uboot_args() + st r1, [@uboot_rev_magic] + mov r1, 0 ; errase magic from the register st r0, [@uboot_tag] st r2, [@uboot_arg] #endif diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c index 7edb35c26322..868dda3d4b43 100644 --- a/arch/arc/kernel/setup.c +++ b/arch/arc/kernel/setup.c @@ -36,6 +36,7 @@ unsigned int intr_to_DE_cnt; /* Part of U-boot ABI: see head.S */ int __initdata uboot_tag; +int __initdata uboot_rev_magic; char __initdata *uboot_arg; const struct machine_desc *machine_desc; @@ -467,6 +468,10 @@ static inline bool is_kernel(unsigned long addr) return addr >= (unsigned long)_stext && addr <= (unsigned long)_end; } +#define UBOOT_MAGIC_VALUE 0x567890 +#define UBOOT_MAGIC_GET(x) (((x) & GENMASK(31, 8)) >> 8) +#define UBOOT_REVISION_GET(x) ((x) & GENMASK(7, 0)) + /* uboot_tag values for U-boot - kernel ABI revisions 0+; see head.S */ #define UBOOT_REV0P_TAG_NONE 0 #define UBOOT_REV0P_TAG_CMDLINE 1 @@ -478,6 +483,25 @@ void __init handle_uboot_args(void) bool use_embedded_dtb = true; #ifdef CONFIG_ARC_UBOOT_SUPPORT + /* check that we got correct magic */ + if (UBOOT_MAGIC_GET(uboot_rev_magic) != UBOOT_MAGIC_VALUE) { + pr_warn("Invalid magic '%06lx' is passed from uboot, uboot args ingnored\n", + UBOOT_MAGIC_GET(uboot_rev_magic)); + + goto ignore_uboot_args; + } + + /* + * check that we know this U-boot args ABI revision. + * as for today we only have one revision - '0'. + */ + if (UBOOT_REVISION_GET(uboot_rev_magic) != 0) { + pr_warn("Unknown args revision '%02lx' is passed from uboot, uboot args ingnored\n", + UBOOT_REVISION_GET(uboot_rev_magic)); + + goto ignore_uboot_args; + } + /* check that we know this tag */ if (uboot_tag != UBOOT_REV0P_TAG_NONE && uboot_tag != UBOOT_REV0P_TAG_CMDLINE && @@ -498,6 +522,8 @@ void __init handle_uboot_args(void) if (uboot_tag == UBOOT_REV0P_TAG_CMDLINE) append_boot_cmdline = true; + +ignore_uboot_args: #endif if (use_embedded_dtb) { -- 2.14.5