Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp3301391yba; Mon, 6 May 2019 21:55:47 -0700 (PDT) X-Google-Smtp-Source: APXvYqyKzZQntlSJoCpKMkN/tUGB0j8UZLI1an4grx2CDiXqmIEtQ1nm8NycPayxCxLx/8jNHED4 X-Received: by 2002:a62:3684:: with SMTP id d126mr38346832pfa.70.1557204947312; Mon, 06 May 2019 21:55:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557204947; cv=none; d=google.com; s=arc-20160816; b=RTMpIIb/GbQLUzt/73M38p/VSGWWJ6xovl26K+XEWScEA8WZuUEF6tzb2koHXbEyu6 6Yi3RUMIt7i2/6XyPkAynQp3O7t7QMrBTAYtU6lwqKMAglu7Fq3hOMloGLP+I0tnAgXh nKzQr6UrbNPWYINorIYv1Q/TqExglhV/SojMe6gPuEdoKA5dpcgaxdN4HzIzoiwy2tLC 5qadlVkPGSJy+pgT+RvlAVZUYP8rSs+AqwpYu69djYjcPQww913ZO6NYirbtNAv1AZ3s FHZNn/Xqo785Q45GXDowNil6jvt20o5l9YQZzdvXz81uJQM+EKFYltSFlpMQnzdUA6Z/ mtVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=38RWjgCCoqTDs9WWdGrvN90MmbgyDENeZWWwktqdhr8=; b=TK6T/1WKJ9kFaP63iHGt/XkNDdzwO20QKaNsrs+Ee5Tifw1A/iKlg4B7bucAfDAgCh fdmC6cQmC4rWfOLKzrd6aQXCSJDDJZ5FvBQge94YoiPBSUWM+1b8kCQkAaPsmAeStFjh Zifv8r8dbNdekudGBv6FOdMpvmL5nc3+QEFnsXC30rZRjybt6JqBoHvwqZvQv5xFc+nx jVfSwtNstXzebgDS9HPRrTpItqfhtekmHJbErJXurIs5y9Va1dP6C1F/joYd9QYi0IfL RydUPq/Ibhjb79wurhXSArRWjGzE4TarfwmC/7osMsla/WD1kdbsgALA9pnPErJKJZkI E7IA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=W++urFVA; 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=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k123si17289285pfc.285.2019.05.06.21.55.30; Mon, 06 May 2019 21:55:47 -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; dkim=pass header.i=@chromium.org header.s=google header.b=W++urFVA; 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=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726268AbfEGEyk (ORCPT + 99 others); Tue, 7 May 2019 00:54:40 -0400 Received: from mail-pl1-f195.google.com ([209.85.214.195]:45007 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725843AbfEGEyk (ORCPT ); Tue, 7 May 2019 00:54:40 -0400 Received: by mail-pl1-f195.google.com with SMTP id d3so3497313plj.11 for ; Mon, 06 May 2019 21:54:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=38RWjgCCoqTDs9WWdGrvN90MmbgyDENeZWWwktqdhr8=; b=W++urFVAUjLmLOLkV3WhQSOmCHTEqyZleYLFYcJS1FJFHR9VMWwE43/CQVnp7clqZJ 0to4FXahT9R0KcfAE2AZ3Dx7hr2fppYi+cmSE03lpJwnqcUbFTNyJ4UDEb05UUdlSiOb y3/mI3LdK44NbhX+H6KrvLW0JGYY6V9AfZyks= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=38RWjgCCoqTDs9WWdGrvN90MmbgyDENeZWWwktqdhr8=; b=INAoqF4tW4Y77UG14ZZkWQjmKKwjjvL19bWG1MYi64bwostl/yVEPDrns+jBq7O6C7 kDeWpuE94CW/WNfV9mkS8VsU7Fb1XMi+duFgCvH47sUlz2lg17C1zahF9yqZRQZ0gEk4 DKB9Jztpe25qvglW4yyTRytH6JKdP5Oi022DUCRYXm5C/opLvch/vihy0MT6aRXBvzq7 ZsSBGWnjPmt0LvMzi2sP8naHGpZAaOM1FB1Mvx8ispM8ssReZa7si8Zf6behfGOlFe48 9AzAW61T1ckChKENeCKqhteyPjk94PkvNmRH5zo8mfzYxypZtY6QAmIicrHalDEUkggY K2pQ== X-Gm-Message-State: APjAAAW3i7iqykVOAivDTf/k1BB9OoA3Vabj3M6ULOke5y6wgzVgo6Tx FChtOsOP6w/zeGdtyiuE2pR6uQ== X-Received: by 2002:a17:902:2a26:: with SMTP id i35mr38742318plb.229.1557204879208; Mon, 06 May 2019 21:54:39 -0700 (PDT) Received: from hsinyi-z840.tpe.corp.google.com ([2401:fa00:1:10:b852:bd51:9305:4261]) by smtp.gmail.com with ESMTPSA id 13sm14970025pfi.172.2019.05.06.21.54.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 06 May 2019 21:54:38 -0700 (PDT) From: Hsin-Yi Wang To: linux-arm-kernel@lists.infradead.org Cc: Rob Herring , Mark Rutland , Catalin Marinas , Will Deacon , Frank Rowand , Hsin-Yi Wang , Andrew Morton , Mike Rapoport , Michal Hocko , Ard Biesheuvel , James Morse , Andrew Murray , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Stephen Boyd Subject: [PATCH] arm64: add support for rng-seed Date: Tue, 7 May 2019 12:54:33 +0800 Message-Id: <20190507045433.542-1-hsinyi@chromium.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Introducing a chosen node, rng-seed, which is an 64 bytes entropy that can be passed to kernel called very early to increase device randomness. Bootloader should provide this entropy and the value is read from /chosen/rng-seed in DT. Signed-off-by: Hsin-Yi Wang --- Documentation/devicetree/bindings/chosen.txt | 14 +++++++++ arch/arm64/kernel/setup.c | 2 ++ drivers/of/fdt.c | 33 ++++++++++++++++++++ include/linux/of_fdt.h | 1 + 4 files changed, 50 insertions(+) diff --git a/Documentation/devicetree/bindings/chosen.txt b/Documentation/devicetree/bindings/chosen.txt index 45e79172a646..bfd360691650 100644 --- a/Documentation/devicetree/bindings/chosen.txt +++ b/Documentation/devicetree/bindings/chosen.txt @@ -28,6 +28,20 @@ mode) when EFI_RNG_PROTOCOL is supported, it will be overwritten by the Linux EFI stub (which will populate the property itself, using EFI_RNG_PROTOCOL). +rng-seed +----------- + +This property served as an entropy to add device randomness. It is parsed +as a 64 byte value, e.g. + +/ { + chosen { + rng-seed = <0x31951b3c 0xc9fab3a5 0xffdf1660 ...> + }; +}; + +This random value should be provided by bootloader. + stdout-path ----------- diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c index 413d566405d1..ade4261516dd 100644 --- a/arch/arm64/kernel/setup.c +++ b/arch/arm64/kernel/setup.c @@ -292,6 +292,8 @@ void __init setup_arch(char **cmdline_p) early_fixmap_init(); early_ioremap_init(); + early_init_dt_rng_seed(__fdt_pointer); + setup_machine_fdt(__fdt_pointer); parse_early_param(); diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index de893c9616a1..74e2c0c80b91 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -1117,6 +1118,38 @@ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname, return 1; } +extern void *__init __fixmap_remap_fdt(phys_addr_t dt_phys, int *size, + pgprot_t prot); + +void __init early_init_dt_rng_seed(u64 dt_phys) +{ + void *fdt; + int node, size, i; + fdt64_t *prop; + u64 rng_seed[8]; + + fdt = __fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL); + if (!fdt) + return; + + node = fdt_path_offset(fdt, "/chosen"); + if (node < 0) + return; + + prop = fdt_getprop_w(fdt, node, "rng-seed", &size); + if (!prop || size != sizeof(u64) * 8) + return; + + for (i = 0; i < 8; i++) { + rng_seed[i] = fdt64_to_cpu(*(prop + i)); + /* clear seed so it won't be found. */ + *(prop + i) = 0; + } + add_device_randomness(rng_seed, size); + + return; +} + #ifndef MIN_MEMBLOCK_ADDR #define MIN_MEMBLOCK_ADDR __pa(PAGE_OFFSET) #endif diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h index a713e5d156d8..a4548dd6351e 100644 --- a/include/linux/of_fdt.h +++ b/include/linux/of_fdt.h @@ -71,6 +71,7 @@ extern uint32_t of_get_flat_dt_phandle(unsigned long node); extern int early_init_dt_scan_chosen(unsigned long node, const char *uname, int depth, void *data); +extern void early_init_dt_rng_seed(u64 dt_phys); extern int early_init_dt_scan_memory(unsigned long node, const char *uname, int depth, void *data); extern int early_init_dt_scan_chosen_stdout(void); -- 2.20.1