patches: uboot: Improve KASLR support for v2024.07 (#7078)
Reference patch set: https://patchwork.ozlabs.org/project/uboot/list/?series=411513&state=* Hopefully, other boards using same uboot-version can benefit from the added support. **Note for Maintainers - to enable KASLR seed, you need:** - `CONFIG_RANDOMIZE_BASE=y` configured in your kernel .config - `CONFIG_CMD_KASLRSEED=y` and` CONFIG_DM_RNG=y` configure in your u-boot .config - exposed crypto and rng nodes in you board's device-tree - `kasrlseed` command before kernel boot in your boot.cmd - `CONFIG_SECURITY_DMESG_RESTRICT=y` in kernel .config is also advisable * KASRL-supported u-boot 2024.07 for everyone: - move /chosen/kaslr-seed support patchset to general 2024.07 BOOTPATCHDIR - attach nanopi-r5c and oprangepi5-plus BOOTPACHDIR to patches/uboot/v2024.07 general dir * u-boot: patch nanopi-r5c-rk3568_defconfig and orangepi-5-plus-rk3588_defconfig to enable KASLR * rewrite-uboot-patches nanopi-r5c/orangepi5-plus * patches: uboot: Improve kaslrseed support for v2024.07 --------- Co-authored-by: ColorfulRhino <131405023+ColorfulRhino@users.noreply.github.com>
This commit is contained in:
parent
4835dcedb5
commit
314447dffd
@ -12,7 +12,7 @@ FULL_DESKTOP="no"
|
||||
BOOT_LOGO="desktop"
|
||||
|
||||
BOOTBRANCH_BOARD="tag:v2024.07"
|
||||
BOOTPATCHDIR="v2024.07/board_${BOARD}"
|
||||
BOOTPATCHDIR="v2024.07"
|
||||
BOOTCONFIG="nanopi-r5c-rk3568_defconfig"
|
||||
|
||||
OVERLAY_PREFIX="rockchip-rk3568"
|
||||
|
||||
@ -36,7 +36,7 @@ function post_family_config_branch_edge__orangepi5plus_use_mainline_uboot() {
|
||||
declare -g BOOTDELAY=1 # Wait for UART interrupt to enter UMS/RockUSB mode etc
|
||||
declare -g BOOTSOURCE="https://github.com/u-boot/u-boot.git" # We ❤️ mainline U-Boot
|
||||
declare -g BOOTBRANCH="tag:v2024.07"
|
||||
declare -g BOOTPATCHDIR="v2024.07/board_${BOARD}"
|
||||
declare -g BOOTPATCHDIR="v2024.07"
|
||||
declare -g BOOTDIR="u-boot-${BOARD}" # do not share u-boot directory
|
||||
declare -g UBOOT_TARGET_MAP="BL31=${RKBIN_DIR}/${BL31_BLOB} ROCKCHIP_TPL=${RKBIN_DIR}/${DDR_BLOB};;u-boot-rockchip.bin u-boot-rockchip-spi.bin"
|
||||
unset uboot_custom_postprocess write_uboot_platform write_uboot_platform_mtd # disable stuff from rockchip64_common; we're using binman here which does all the work already
|
||||
|
||||
@ -0,0 +1,543 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Tim Harvey <tharvey@gateworks.com>
|
||||
Date: Tue, 18 Jun 2024 14:06:06 -0700
|
||||
Subject: Add fdt_kaslrseed function to add kaslr-seed to chosen node
|
||||
|
||||
If RANDOMIZE_BASE is enabled in the Linux kernel instructing it to
|
||||
randomize the virtual address at which the kernel image is loaded, it
|
||||
expects entropy to be provided by the bootloader by populating
|
||||
/chosen/kaslr-seed with a 64-bit value from source of entropy at boot.
|
||||
|
||||
Add a fdt_kaslrseed function to accommodate this allowing an existing
|
||||
node to be overwritten if present. For now use the first rng device
|
||||
but it would be good to enhance this in the future to allow some sort
|
||||
of selection or policy in choosing the rng device used.
|
||||
|
||||
Signed-off-by: Tim Harvey <tharvey@gateworks.com>
|
||||
Reviewed-by: Simon Glass <sjg@chromium.org>
|
||||
Cc: Michal Simek <michal.simek@amd.com>
|
||||
Cc: Andy Yan <andy.yan@rock-chips.com>
|
||||
Cc: Akash Gajjar <gajjar04akash@gmail.com>
|
||||
Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
|
||||
Cc: Simon Glass <sjg@chromium.org>
|
||||
Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
|
||||
Cc: Patrice Chotard <patrice.chotard@foss.st.com>
|
||||
Cc: Devarsh Thakkar <devarsht@ti.com>
|
||||
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
|
||||
Cc: Hugo Villeneuve <hvilleneuve@dimonoff.com>
|
||||
Cc: Marek Vasut <marex@denx.de>
|
||||
Cc: Tom Rini <trini@konsulko.com>
|
||||
Cc: Chris Morgan <macromorgan@hotmail.com>
|
||||
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
|
||||
---
|
||||
v6:
|
||||
- collected tags
|
||||
v5:
|
||||
- move function to boot/fdt_support.c
|
||||
- remove ability to select rng index and note in the commit log
|
||||
something like this as a future enhancement.
|
||||
- fixed typo in commit message s/it's/its/
|
||||
- use cmd_process_error per Michal's suggestion
|
||||
v4:
|
||||
- add missing /n to notice in kaslrseed cmd
|
||||
- combine ints in declaration
|
||||
- remove unused vars from board/xilinx/common/board.c ft_board_setup
|
||||
v3:
|
||||
- skip if CONFIG_MEASURED_BOOT
|
||||
- fix skip for CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT
|
||||
- pass in rng index and bool to specify overwrite
|
||||
- remove duplicate error strings printed outside of fdt_kaslrseed
|
||||
- added note to commit log about how EFI STUB weeds out kalsr-seed
|
||||
v2:
|
||||
- fix typo in commit msg
|
||||
- use stack for seed to avoid unecessary malloc/free
|
||||
- move to a library function and deduplicate code by using it
|
||||
elsewhere
|
||||
---
|
||||
boot/fdt_support.c | 44 ++++++++++
|
||||
include/fdt_support.h | 10 +++
|
||||
2 files changed, 54 insertions(+)
|
||||
|
||||
diff --git a/boot/fdt_support.c b/boot/fdt_support.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/boot/fdt_support.c
|
||||
+++ b/boot/fdt_support.c
|
||||
@@ -7,12 +7,15 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
+#include <dm.h>
|
||||
#include <abuf.h>
|
||||
#include <env.h>
|
||||
#include <log.h>
|
||||
#include <mapmem.h>
|
||||
#include <net.h>
|
||||
+#include <rng.h>
|
||||
#include <stdio_dev.h>
|
||||
+#include <dm/device_compat.h>
|
||||
#include <dm/ofnode.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/types.h>
|
||||
@@ -274,6 +277,47 @@ int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int fdt_kaslrseed(void *fdt, bool overwrite)
|
||||
+{
|
||||
+ int len, err, nodeoffset;
|
||||
+ struct udevice *dev;
|
||||
+ const u64 *orig;
|
||||
+ u64 data = 0;
|
||||
+
|
||||
+ err = fdt_check_header(fdt);
|
||||
+ if (err < 0)
|
||||
+ return err;
|
||||
+
|
||||
+ /* find or create "/chosen" node. */
|
||||
+ nodeoffset = fdt_find_or_add_subnode(fdt, 0, "chosen");
|
||||
+ if (nodeoffset < 0)
|
||||
+ return nodeoffset;
|
||||
+
|
||||
+ /* return without error if we are not overwriting and existing non-zero node */
|
||||
+ orig = fdt_getprop(fdt, nodeoffset, "kaslr-seed", &len);
|
||||
+ if (orig && len == sizeof(*orig))
|
||||
+ data = fdt64_to_cpu(*orig);
|
||||
+ if (data && !overwrite) {
|
||||
+ debug("not overwriting existing kaslr-seed\n");
|
||||
+ return 0;
|
||||
+ }
|
||||
+ err = uclass_get_device(UCLASS_RNG, 0, &dev);
|
||||
+ if (err) {
|
||||
+ printf("No RNG device\n");
|
||||
+ return err;
|
||||
+ }
|
||||
+ err = dm_rng_read(dev, &data, sizeof(data));
|
||||
+ if (err) {
|
||||
+ dev_err(dev, "dm_rng_read failed: %d\n", err);
|
||||
+ return err;
|
||||
+ }
|
||||
+ err = fdt_setprop(fdt, nodeoffset, "kaslr-seed", &data, sizeof(data));
|
||||
+ if (err < 0)
|
||||
+ printf("WARNING: could not set kaslr-seed %s.\n", fdt_strerror(err));
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* board_fdt_chosen_bootargs - boards may override this function to use
|
||||
* alternative kernel command line arguments
|
||||
diff --git a/include/fdt_support.h b/include/fdt_support.h
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/include/fdt_support.h
|
||||
+++ b/include/fdt_support.h
|
||||
@@ -463,4 +463,14 @@ void fdt_fixup_board_enet(void *blob);
|
||||
#ifdef CONFIG_CMD_PSTORE
|
||||
void fdt_fixup_pstore(void *blob);
|
||||
#endif
|
||||
+
|
||||
+/**
|
||||
+ * fdt_kaslrseed() - create a 'kaslr-seed' node in chosen
|
||||
+ *
|
||||
+ * @blob: fdt blob
|
||||
+ * @overwrite: do not overwrite existing non-zero node unless true
|
||||
+ * Return: 0 if OK, -ve on error
|
||||
+ */
|
||||
+int fdt_kaslrseed(void *blob, bool overwrite);
|
||||
+
|
||||
#endif /* ifndef __FDT_SUPPORT_H */
|
||||
--
|
||||
Armbian
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Tim Harvey <tharvey@gateworks.com>
|
||||
Date: Tue, 18 Jun 2024 14:06:07 -0700
|
||||
Subject: fdt: automatically add /chosen/kaslr-seed if DM_RNG is enabled
|
||||
|
||||
If RANDOMIZE_BASE is enabled in the Linux kernel instructing it to
|
||||
randomize the virtual address at which the kernel image is loaded, it
|
||||
expects entropy to be provided by the bootloader by populating
|
||||
/chosen/kaslr-seed with a 64-bit value from source of entropy at boot.
|
||||
|
||||
If we have DM_RNG enabled populate this value automatically when
|
||||
fdt_chosen is called. We skip this if ARMV8_SEC_FIRMWARE_SUPPORT
|
||||
is enabled as its implementation uses a different source of entropy
|
||||
that is not yet implemented as DM_RNG. We also skip this if
|
||||
MEASURED_BOOT is enabled as in that case any modifications to the
|
||||
dt will cause measured boot to fail (although there are many other
|
||||
places the dt is altered).
|
||||
|
||||
Note that the Kernel's EFI STUB only relies on EFI_RNG_PROTOCOL for
|
||||
randomization and completely ignores the kaslr-seed for its own
|
||||
randomness needs (i.e the randomization of the physical placement of
|
||||
the kernel). It gets weeded out from the DTB that gets handed over via
|
||||
efi_install_fdt() as it would also mess up the measured boot DTB TPM
|
||||
measurements as well.
|
||||
|
||||
Signed-off-by: Tim Harvey <tharvey@gateworks.com>
|
||||
Reviewed-by: Simon Glass <sjg@chromium.org>
|
||||
Cc: Michal Simek <michal.simek@amd.com>
|
||||
Cc: Andy Yan <andy.yan@rock-chips.com>
|
||||
Cc: Akash Gajjar <gajjar04akash@gmail.com>
|
||||
Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
|
||||
Cc: Simon Glass <sjg@chromium.org>
|
||||
Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
|
||||
Cc: Patrice Chotard <patrice.chotard@foss.st.com>
|
||||
Cc: Devarsh Thakkar <devarsht@ti.com>
|
||||
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
|
||||
Cc: Hugo Villeneuve <hvilleneuve@dimonoff.com>
|
||||
Cc: Marek Vasut <marex@denx.de>
|
||||
Cc: Tom Rini <trini@konsulko.com>
|
||||
Cc: Chris Morgan <macromorgan@hotmail.com>
|
||||
---
|
||||
v6:
|
||||
- collected tags
|
||||
v5:
|
||||
- fixed typo in commit message s/it's/its/
|
||||
- split patch into 3 parts
|
||||
v4:
|
||||
- add missing /n to notice in kaslrseed cmd
|
||||
- combine ints in declaration
|
||||
- remove unused vars from board/xilinx/common/board.c ft_board_setup
|
||||
v3:
|
||||
- skip if CONFIG_MEASURED_BOOT
|
||||
- fix skip for CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT
|
||||
- pass in rng index and bool to specify overwrite
|
||||
- remove duplicate error strings printed outside of fdt_kaslrseed
|
||||
- added note to commit log about how EFI STUB weeds out kalsr-seed
|
||||
v2:
|
||||
- fix typo in commit msg
|
||||
- use stack for seed to avoid unecessary malloc/free
|
||||
- move to a library function and deduplicate code by using it
|
||||
elsewhere
|
||||
---
|
||||
boot/fdt_support.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/boot/fdt_support.c b/boot/fdt_support.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/boot/fdt_support.c
|
||||
+++ b/boot/fdt_support.c
|
||||
@@ -345,6 +345,15 @@ int fdt_chosen(void *fdt)
|
||||
if (nodeoffset < 0)
|
||||
return nodeoffset;
|
||||
|
||||
+ /* if DM_RNG enabled automatically inject kaslr-seed node unless:
|
||||
+ * CONFIG_MEASURED_BOOT enabled: as dt modifications break measured boot
|
||||
+ * CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT enabled: as that implementation does not use dm yet
|
||||
+ */
|
||||
+ if (IS_ENABLED(CONFIG_DM_RNG) &&
|
||||
+ !IS_ENABLED(CONFIG_MEASURED_BOOT) &&
|
||||
+ !IS_ENABLED(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT))
|
||||
+ fdt_kaslrseed(fdt, false);
|
||||
+
|
||||
if (IS_ENABLED(CONFIG_BOARD_RNG_SEED) && !board_rng_seed(&buf)) {
|
||||
err = fdt_setprop(fdt, nodeoffset, "rng-seed",
|
||||
abuf_data(&buf), abuf_size(&buf));
|
||||
--
|
||||
Armbian
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Tim Harvey <tharvey@gateworks.com>
|
||||
Date: Tue, 18 Jun 2024 14:06:08 -0700
|
||||
Subject: use fdt_kaslrseed function to de-duplicate code
|
||||
|
||||
Use the fdt_kaslrseed function to deduplicate code doing the same thing.
|
||||
|
||||
Note that the kalsrseed command (CMD_KASLRSEED) is likely pointless now
|
||||
but left in place in case boot scripts exist that rely on this command
|
||||
existing and returning success. An informational message is printed to
|
||||
alert users of this command that it is likely no longer needed.
|
||||
|
||||
Note that the Kernel's EFI STUB only relies on EFI_RNG_PROTOCOL for
|
||||
randomization and completely ignores the kaslr-seed for its own
|
||||
randomness needs (i.e the randomization of the physical placement of
|
||||
the kernel). It gets weeded out from the DTB that gets handed over via
|
||||
efi_install_fdt() as it would also mess up the measured boot DTB TPM
|
||||
measurements as well.
|
||||
|
||||
Signed-off-by: Tim Harvey <tharvey@gateworks.com>
|
||||
Reviewed-by: Simon Glass <sjg@chromium.org>
|
||||
Cc: Michal Simek <michal.simek@amd.com>
|
||||
Cc: Andy Yan <andy.yan@rock-chips.com>
|
||||
Cc: Akash Gajjar <gajjar04akash@gmail.com>
|
||||
Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
|
||||
Cc: Simon Glass <sjg@chromium.org>
|
||||
Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
|
||||
Cc: Patrice Chotard <patrice.chotard@foss.st.com>
|
||||
Cc: Devarsh Thakkar <devarsht@ti.com>
|
||||
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
|
||||
Cc: Hugo Villeneuve <hvilleneuve@dimonoff.com>
|
||||
Cc: Marek Vasut <marex@denx.de>
|
||||
Cc: Tom Rini <trini@konsulko.com>
|
||||
Cc: Chris Morgan <macromorgan@hotmail.com>
|
||||
Acked-by: Michal Simek <michal.simek@amd.com>
|
||||
---
|
||||
v6:
|
||||
- collected tags
|
||||
v5:
|
||||
- fixed typo in commit message s/it's/its/
|
||||
- use cmd_process_error per Michal's suggestion
|
||||
v4:
|
||||
- add missing /n to notice in kaslrseed cmd
|
||||
- combine ints in declaration
|
||||
- remove unused vars from board/xilinx/common/board.c ft_board_setup
|
||||
v3:
|
||||
- skip if CONFIG_MEASURED_BOOT
|
||||
- fix skip for CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT
|
||||
- pass in rng index and bool to specify overwrite
|
||||
- remove duplicate error strings printed outside of fdt_kaslrseed
|
||||
- added note to commit log about how EFI STUB weeds out kalsr-seed
|
||||
v2:
|
||||
- fix typo in commit msg
|
||||
- use stack for seed to avoid unecessary malloc/free
|
||||
- move to a library function and deduplicate code by using it
|
||||
elsewhere
|
||||
---
|
||||
board/xilinx/common/board.c | 40 --------
|
||||
boot/pxe_utils.c | 34 +------
|
||||
cmd/kaslrseed.c | 49 ++--------
|
||||
3 files changed, 8 insertions(+), 115 deletions(-)
|
||||
|
||||
diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/board/xilinx/common/board.c
|
||||
+++ b/board/xilinx/common/board.c
|
||||
@@ -702,11 +702,6 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
|
||||
#define MAX_RAND_SIZE 8
|
||||
int ft_board_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
- size_t n = MAX_RAND_SIZE;
|
||||
- struct udevice *dev;
|
||||
- u8 buf[MAX_RAND_SIZE];
|
||||
- int nodeoffset, ret;
|
||||
-
|
||||
static const struct node_info nodes[] = {
|
||||
{ "arm,pl353-nand-r2p1", MTD_DEV_TYPE_NAND, },
|
||||
};
|
||||
@@ -714,41 +709,6 @@ int ft_board_setup(void *blob, struct bd_info *bd)
|
||||
if (IS_ENABLED(CONFIG_FDT_FIXUP_PARTITIONS) && IS_ENABLED(CONFIG_NAND_ZYNQ))
|
||||
fdt_fixup_mtdparts(blob, nodes, ARRAY_SIZE(nodes));
|
||||
|
||||
- if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
|
||||
- debug("No RNG device\n");
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- if (dm_rng_read(dev, buf, n)) {
|
||||
- debug("Reading RNG failed\n");
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- if (!blob) {
|
||||
- debug("No FDT memory address configured. Please configure\n"
|
||||
- "the FDT address via \"fdt addr <address>\" command.\n"
|
||||
- "Aborting!\n");
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- ret = fdt_check_header(blob);
|
||||
- if (ret < 0) {
|
||||
- debug("fdt_chosen: %s\n", fdt_strerror(ret));
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
- nodeoffset = fdt_find_or_add_subnode(blob, 0, "chosen");
|
||||
- if (nodeoffset < 0) {
|
||||
- debug("Reading chosen node failed\n");
|
||||
- return nodeoffset;
|
||||
- }
|
||||
-
|
||||
- ret = fdt_setprop(blob, nodeoffset, "kaslr-seed", buf, sizeof(buf));
|
||||
- if (ret < 0) {
|
||||
- debug("Unable to set kaslr-seed on chosen node: %s\n", fdt_strerror(ret));
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
diff --git a/boot/pxe_utils.c b/boot/pxe_utils.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/boot/pxe_utils.c
|
||||
+++ b/boot/pxe_utils.c
|
||||
@@ -324,10 +324,6 @@ static void label_boot_kaslrseed(void)
|
||||
#if CONFIG_IS_ENABLED(DM_RNG)
|
||||
ulong fdt_addr;
|
||||
struct fdt_header *working_fdt;
|
||||
- size_t n = 0x8;
|
||||
- struct udevice *dev;
|
||||
- u64 *buf;
|
||||
- int nodeoffset;
|
||||
int err;
|
||||
|
||||
/* Get the main fdt and map it */
|
||||
@@ -343,35 +339,7 @@ static void label_boot_kaslrseed(void)
|
||||
if (err <= 0)
|
||||
return;
|
||||
|
||||
- if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
|
||||
- printf("No RNG device\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- nodeoffset = fdt_find_or_add_subnode(working_fdt, 0, "chosen");
|
||||
- if (nodeoffset < 0) {
|
||||
- printf("Reading chosen node failed\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- buf = malloc(n);
|
||||
- if (!buf) {
|
||||
- printf("Out of memory\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- if (dm_rng_read(dev, buf, n)) {
|
||||
- printf("Reading RNG failed\n");
|
||||
- goto err;
|
||||
- }
|
||||
-
|
||||
- err = fdt_setprop(working_fdt, nodeoffset, "kaslr-seed", buf, sizeof(buf));
|
||||
- if (err < 0) {
|
||||
- printf("Unable to set kaslr-seed on chosen node: %s\n", fdt_strerror(err));
|
||||
- goto err;
|
||||
- }
|
||||
-err:
|
||||
- free(buf);
|
||||
+ fdt_kaslrseed(working_fdt, true);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
diff --git a/cmd/kaslrseed.c b/cmd/kaslrseed.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/cmd/kaslrseed.c
|
||||
+++ b/cmd/kaslrseed.c
|
||||
@@ -16,56 +16,21 @@
|
||||
|
||||
static int do_kaslr_seed(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||
{
|
||||
- size_t n = 0x8;
|
||||
- struct udevice *dev;
|
||||
- u64 *buf;
|
||||
- int nodeoffset;
|
||||
- int ret = CMD_RET_SUCCESS;
|
||||
+ int err = CMD_RET_SUCCESS;
|
||||
|
||||
- if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
|
||||
- printf("No RNG device\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- buf = malloc(n);
|
||||
- if (!buf) {
|
||||
- printf("Out of memory\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- if (dm_rng_read(dev, buf, n)) {
|
||||
- printf("Reading RNG failed\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
+ printf("Notice: a /chosen/kaslr-seed is automatically added to the device-tree when booted via booti/bootm/bootz therefore using this command is likely no longer needed\n");
|
||||
|
||||
if (!working_fdt) {
|
||||
printf("No FDT memory address configured. Please configure\n"
|
||||
"the FDT address via \"fdt addr <address>\" command.\n"
|
||||
"Aborting!\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- ret = fdt_check_header(working_fdt);
|
||||
- if (ret < 0) {
|
||||
- printf("fdt_chosen: %s\n", fdt_strerror(ret));
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- nodeoffset = fdt_find_or_add_subnode(working_fdt, 0, "chosen");
|
||||
- if (nodeoffset < 0) {
|
||||
- printf("Reading chosen node failed\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
+ err = CMD_RET_FAILURE;
|
||||
+ } else {
|
||||
+ if (fdt_kaslrseed(working_fdt, true) < 0)
|
||||
+ err = CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
- ret = fdt_setprop(working_fdt, nodeoffset, "kaslr-seed", buf, sizeof(buf));
|
||||
- if (ret < 0) {
|
||||
- printf("Unable to set kaslr-seed on chosen node: %s\n", fdt_strerror(ret));
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- free(buf);
|
||||
-
|
||||
- return ret;
|
||||
+ return cmd_process_error(cmdtp, err);
|
||||
}
|
||||
|
||||
U_BOOT_LONGHELP(kaslrseed,
|
||||
--
|
||||
Armbian
|
||||
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Tim Harvey <tharvey@gateworks.com>
|
||||
Date: Tue, 18 Jun 2024 14:06:09 -0700
|
||||
Subject: test: cmd: fdt: fix chosen test for DM_RNG
|
||||
|
||||
Now that kaslr-seed is automatically added to the chosen node if DM_RNG
|
||||
is enabled, adjust the test to expect this.
|
||||
|
||||
Take care not to expect kaslr-seed for CONFIG_MEASURED_BOOT and
|
||||
CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT as we do not add it for those.
|
||||
|
||||
Signed-off-by: Tim Harvey <tharvey@gateworks.com>
|
||||
Cc: Michal Simek <michal.simek@amd.com>
|
||||
Cc: Andy Yan <andy.yan@rock-chips.com>
|
||||
Cc: Akash Gajjar <gajjar04akash@gmail.com>
|
||||
Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
|
||||
Cc: Simon Glass <sjg@chromium.org>
|
||||
Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
|
||||
Cc: Patrice Chotard <patrice.chotard@foss.st.com>
|
||||
Cc: Devarsh Thakkar <devarsht@ti.com>
|
||||
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
|
||||
Cc: Hugo Villeneuve <hvilleneuve@dimonoff.com>
|
||||
Cc: Marek Vasut <marex@denx.de>
|
||||
Cc: Tom Rini <trini@konsulko.com>
|
||||
Cc: Chris Morgan <macromorgan@hotmail.com>
|
||||
---
|
||||
v7: fix fdt_test_chosen to not expect kaslr-seed for
|
||||
CONFIG_MEASURED_BOOT and CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT
|
||||
v6: new patch
|
||||
---
|
||||
test/cmd/fdt.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/test/cmd/fdt.c b/test/cmd/fdt.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/test/cmd/fdt.c
|
||||
+++ b/test/cmd/fdt.c
|
||||
@@ -1347,6 +1347,10 @@ static int fdt_test_chosen(struct unit_test_state *uts)
|
||||
ut_assert_nextlinen("\tu-boot,version = "); /* Ignore the version string */
|
||||
if (env_bootargs)
|
||||
ut_assert_nextline("\tbootargs = \"%s\";", env_bootargs);
|
||||
+ if (IS_ENABLED(CONFIG_DM_RNG) &&
|
||||
+ !IS_ENABLED(CONFIG_MEASURED_BOOT) &&
|
||||
+ !IS_ENABLED(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT))
|
||||
+ ut_assert_nextlinen("\tkaslr-seed = ");
|
||||
ut_assert_nextline("};");
|
||||
ut_assertok(ut_check_console_end(uts));
|
||||
|
||||
@@ -1363,6 +1367,10 @@ static int fdt_test_chosen(struct unit_test_state *uts)
|
||||
ut_assert_nextlinen("\tu-boot,version = "); /* Ignore the version string */
|
||||
if (env_bootargs)
|
||||
ut_assert_nextline("\tbootargs = \"%s\";", env_bootargs);
|
||||
+ if (IS_ENABLED(CONFIG_DM_RNG) &&
|
||||
+ !IS_ENABLED(CONFIG_MEASURED_BOOT) &&
|
||||
+ !IS_ENABLED(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT))
|
||||
+ ut_assert_nextlinen("\tkaslr-seed = ");
|
||||
ut_assert_nextline("};");
|
||||
ut_assertok(ut_check_console_end(uts));
|
||||
|
||||
--
|
||||
Armbian
|
||||
|
||||
@ -1,87 +0,0 @@
|
||||
diff --git a/boot/fdt_support.c b/boot/fdt_support.c
|
||||
index 2bd80a9dfb18..b1b2679dea0c 100644
|
||||
--- a/boot/fdt_support.c
|
||||
+++ b/boot/fdt_support.c
|
||||
@@ -7,12 +7,15 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
+#include <dm.h>
|
||||
#include <abuf.h>
|
||||
#include <env.h>
|
||||
#include <log.h>
|
||||
#include <mapmem.h>
|
||||
#include <net.h>
|
||||
+#include <rng.h>
|
||||
#include <stdio_dev.h>
|
||||
+#include <dm/device_compat.h>
|
||||
#include <dm/ofnode.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/types.h>
|
||||
@@ -274,6 +277,47 @@ int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int fdt_kaslrseed(void *fdt, bool overwrite)
|
||||
+{
|
||||
+ int len, err, nodeoffset;
|
||||
+ struct udevice *dev;
|
||||
+ const u64 *orig;
|
||||
+ u64 data = 0;
|
||||
+
|
||||
+ err = fdt_check_header(fdt);
|
||||
+ if (err < 0)
|
||||
+ return err;
|
||||
+
|
||||
+ /* find or create "/chosen" node. */
|
||||
+ nodeoffset = fdt_find_or_add_subnode(fdt, 0, "chosen");
|
||||
+ if (nodeoffset < 0)
|
||||
+ return nodeoffset;
|
||||
+
|
||||
+ /* return without error if we are not overwriting and existing non-zero node */
|
||||
+ orig = fdt_getprop(fdt, nodeoffset, "kaslr-seed", &len);
|
||||
+ if (orig && len == sizeof(*orig))
|
||||
+ data = fdt64_to_cpu(*orig);
|
||||
+ if (data && !overwrite) {
|
||||
+ debug("not overwriting existing kaslr-seed\n");
|
||||
+ return 0;
|
||||
+ }
|
||||
+ err = uclass_get_device(UCLASS_RNG, 0, &dev);
|
||||
+ if (err) {
|
||||
+ printf("No RNG device\n");
|
||||
+ return err;
|
||||
+ }
|
||||
+ err = dm_rng_read(dev, &data, sizeof(data));
|
||||
+ if (err) {
|
||||
+ dev_err(dev, "dm_rng_read failed: %d\n", err);
|
||||
+ return err;
|
||||
+ }
|
||||
+ err = fdt_setprop(fdt, nodeoffset, "kaslr-seed", &data, sizeof(data));
|
||||
+ if (err < 0)
|
||||
+ printf("WARNING: could not set kaslr-seed %s.\n", fdt_strerror(err));
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* board_fdt_chosen_bootargs - boards may override this function to use
|
||||
* alternative kernel command line arguments
|
||||
diff --git a/include/fdt_support.h b/include/fdt_support.h
|
||||
index 4b71b8948d99..741e2360c224 100644
|
||||
--- a/include/fdt_support.h
|
||||
+++ b/include/fdt_support.h
|
||||
@@ -463,4 +463,14 @@ void fdt_fixup_board_enet(void *blob);
|
||||
#ifdef CONFIG_CMD_PSTORE
|
||||
void fdt_fixup_pstore(void *blob);
|
||||
#endif
|
||||
+
|
||||
+/**
|
||||
+ * fdt_kaslrseed() - create a 'kaslr-seed' node in chosen
|
||||
+ *
|
||||
+ * @blob: fdt blob
|
||||
+ * @overwrite: do not overwrite existing non-zero node unless true
|
||||
+ * Return: 0 if OK, -ve on error
|
||||
+ */
|
||||
+int fdt_kaslrseed(void *blob, bool overwrite);
|
||||
+
|
||||
#endif /* ifndef __FDT_SUPPORT_H */
|
||||
@ -1,20 +0,0 @@
|
||||
diff --git a/boot/fdt_support.c b/boot/fdt_support.c
|
||||
index b1b2679dea0c..4559adcd5e2e 100644
|
||||
--- a/boot/fdt_support.c
|
||||
+++ b/boot/fdt_support.c
|
||||
@@ -345,6 +345,15 @@ int fdt_chosen(void *fdt)
|
||||
if (nodeoffset < 0)
|
||||
return nodeoffset;
|
||||
|
||||
+ /* if DM_RNG enabled automatically inject kaslr-seed node unless:
|
||||
+ * CONFIG_MEASURED_BOOT enabled: as dt modifications break measured boot
|
||||
+ * CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT enabled: as that implementation does not use dm yet
|
||||
+ */
|
||||
+ if (IS_ENABLED(CONFIG_DM_RNG) &&
|
||||
+ !IS_ENABLED(CONFIG_MEASURED_BOOT) &&
|
||||
+ !IS_ENABLED(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT))
|
||||
+ fdt_kaslrseed(fdt, false);
|
||||
+
|
||||
if (IS_ENABLED(CONFIG_BOARD_RNG_SEED) && !board_rng_seed(&buf)) {
|
||||
err = fdt_setprop(fdt, nodeoffset, "rng-seed",
|
||||
abuf_data(&buf), abuf_size(&buf));
|
||||
@ -1,178 +0,0 @@
|
||||
diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
|
||||
index b47d2d23f913..098738017bab 100644
|
||||
--- a/board/xilinx/common/board.c
|
||||
+++ b/board/xilinx/common/board.c
|
||||
@@ -702,11 +702,6 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
|
||||
#define MAX_RAND_SIZE 8
|
||||
int ft_board_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
- size_t n = MAX_RAND_SIZE;
|
||||
- struct udevice *dev;
|
||||
- u8 buf[MAX_RAND_SIZE];
|
||||
- int nodeoffset, ret;
|
||||
-
|
||||
static const struct node_info nodes[] = {
|
||||
{ "arm,pl353-nand-r2p1", MTD_DEV_TYPE_NAND, },
|
||||
};
|
||||
@@ -714,41 +709,6 @@ int ft_board_setup(void *blob, struct bd_info *bd)
|
||||
if (IS_ENABLED(CONFIG_FDT_FIXUP_PARTITIONS) && IS_ENABLED(CONFIG_NAND_ZYNQ))
|
||||
fdt_fixup_mtdparts(blob, nodes, ARRAY_SIZE(nodes));
|
||||
|
||||
- if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
|
||||
- debug("No RNG device\n");
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- if (dm_rng_read(dev, buf, n)) {
|
||||
- debug("Reading RNG failed\n");
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- if (!blob) {
|
||||
- debug("No FDT memory address configured. Please configure\n"
|
||||
- "the FDT address via \"fdt addr <address>\" command.\n"
|
||||
- "Aborting!\n");
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- ret = fdt_check_header(blob);
|
||||
- if (ret < 0) {
|
||||
- debug("fdt_chosen: %s\n", fdt_strerror(ret));
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
- nodeoffset = fdt_find_or_add_subnode(blob, 0, "chosen");
|
||||
- if (nodeoffset < 0) {
|
||||
- debug("Reading chosen node failed\n");
|
||||
- return nodeoffset;
|
||||
- }
|
||||
-
|
||||
- ret = fdt_setprop(blob, nodeoffset, "kaslr-seed", buf, sizeof(buf));
|
||||
- if (ret < 0) {
|
||||
- debug("Unable to set kaslr-seed on chosen node: %s\n", fdt_strerror(ret));
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
diff --git a/boot/pxe_utils.c b/boot/pxe_utils.c
|
||||
index 5c1c962ff4c1..38ca9b81a42d 100644
|
||||
--- a/boot/pxe_utils.c
|
||||
+++ b/boot/pxe_utils.c
|
||||
@@ -324,10 +324,6 @@ static void label_boot_kaslrseed(void)
|
||||
#if CONFIG_IS_ENABLED(DM_RNG)
|
||||
ulong fdt_addr;
|
||||
struct fdt_header *working_fdt;
|
||||
- size_t n = 0x8;
|
||||
- struct udevice *dev;
|
||||
- u64 *buf;
|
||||
- int nodeoffset;
|
||||
int err;
|
||||
|
||||
/* Get the main fdt and map it */
|
||||
@@ -343,35 +339,7 @@ static void label_boot_kaslrseed(void)
|
||||
if (err <= 0)
|
||||
return;
|
||||
|
||||
- if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
|
||||
- printf("No RNG device\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- nodeoffset = fdt_find_or_add_subnode(working_fdt, 0, "chosen");
|
||||
- if (nodeoffset < 0) {
|
||||
- printf("Reading chosen node failed\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- buf = malloc(n);
|
||||
- if (!buf) {
|
||||
- printf("Out of memory\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- if (dm_rng_read(dev, buf, n)) {
|
||||
- printf("Reading RNG failed\n");
|
||||
- goto err;
|
||||
- }
|
||||
-
|
||||
- err = fdt_setprop(working_fdt, nodeoffset, "kaslr-seed", buf, sizeof(buf));
|
||||
- if (err < 0) {
|
||||
- printf("Unable to set kaslr-seed on chosen node: %s\n", fdt_strerror(err));
|
||||
- goto err;
|
||||
- }
|
||||
-err:
|
||||
- free(buf);
|
||||
+ fdt_kaslrseed(working_fdt, true);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
diff --git a/cmd/kaslrseed.c b/cmd/kaslrseed.c
|
||||
index 9acb8e163863..645cab2e74fd 100644
|
||||
--- a/cmd/kaslrseed.c
|
||||
+++ b/cmd/kaslrseed.c
|
||||
@@ -16,56 +16,21 @@
|
||||
|
||||
static int do_kaslr_seed(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||
{
|
||||
- size_t n = 0x8;
|
||||
- struct udevice *dev;
|
||||
- u64 *buf;
|
||||
- int nodeoffset;
|
||||
- int ret = CMD_RET_SUCCESS;
|
||||
+ int err = CMD_RET_SUCCESS;
|
||||
|
||||
- if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
|
||||
- printf("No RNG device\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- buf = malloc(n);
|
||||
- if (!buf) {
|
||||
- printf("Out of memory\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- if (dm_rng_read(dev, buf, n)) {
|
||||
- printf("Reading RNG failed\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
+ printf("Notice: a /chosen/kaslr-seed is automatically added to the device-tree when booted via booti/bootm/bootz therefore using this command is likely no longer needed\n");
|
||||
|
||||
if (!working_fdt) {
|
||||
printf("No FDT memory address configured. Please configure\n"
|
||||
"the FDT address via \"fdt addr <address>\" command.\n"
|
||||
"Aborting!\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- ret = fdt_check_header(working_fdt);
|
||||
- if (ret < 0) {
|
||||
- printf("fdt_chosen: %s\n", fdt_strerror(ret));
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- nodeoffset = fdt_find_or_add_subnode(working_fdt, 0, "chosen");
|
||||
- if (nodeoffset < 0) {
|
||||
- printf("Reading chosen node failed\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
+ err = CMD_RET_FAILURE;
|
||||
+ } else {
|
||||
+ if (fdt_kaslrseed(working_fdt, true) < 0)
|
||||
+ err = CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
- ret = fdt_setprop(working_fdt, nodeoffset, "kaslr-seed", buf, sizeof(buf));
|
||||
- if (ret < 0) {
|
||||
- printf("Unable to set kaslr-seed on chosen node: %s\n", fdt_strerror(ret));
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- free(buf);
|
||||
-
|
||||
- return ret;
|
||||
+ return cmd_process_error(cmdtp, err);
|
||||
}
|
||||
|
||||
U_BOOT_LONGHELP(kaslrseed,
|
||||
@ -1,26 +0,0 @@
|
||||
diff --git a/test/cmd/fdt.c b/test/cmd/fdt.c
|
||||
index 547085521758..5cda1ef382a1 100644
|
||||
--- a/test/cmd/fdt.c
|
||||
+++ b/test/cmd/fdt.c
|
||||
@@ -1347,6 +1347,10 @@ static int fdt_test_chosen(struct unit_test_state *uts)
|
||||
ut_assert_nextlinen("\tu-boot,version = "); /* Ignore the version string */
|
||||
if (env_bootargs)
|
||||
ut_assert_nextline("\tbootargs = \"%s\";", env_bootargs);
|
||||
+ if (IS_ENABLED(CONFIG_DM_RNG) &&
|
||||
+ !IS_ENABLED(CONFIG_MEASURED_BOOT) &&
|
||||
+ !IS_ENABLED(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT))
|
||||
+ ut_assert_nextlinen("\tkaslr-seed = ");
|
||||
ut_assert_nextline("};");
|
||||
ut_assertok(ut_check_console_end(uts));
|
||||
|
||||
@@ -1363,6 +1367,10 @@ static int fdt_test_chosen(struct unit_test_state *uts)
|
||||
ut_assert_nextlinen("\tu-boot,version = "); /* Ignore the version string */
|
||||
if (env_bootargs)
|
||||
ut_assert_nextline("\tbootargs = \"%s\";", env_bootargs);
|
||||
+ if (IS_ENABLED(CONFIG_DM_RNG) &&
|
||||
+ !IS_ENABLED(CONFIG_MEASURED_BOOT) &&
|
||||
+ !IS_ENABLED(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT))
|
||||
+ ut_assert_nextlinen("\tkaslr-seed = ");
|
||||
ut_assert_nextline("};");
|
||||
ut_assertok(ut_check_console_end(uts));
|
||||
|
||||
@ -1,43 +0,0 @@
|
||||
From ee1941e4fec601a8444f49c7dad04ad700d501a6 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Shumsky <alexthreed@gmail.com>
|
||||
Date: Wed, 19 Jun 2024 00:41:38 +0300
|
||||
Subject: [PATCH] fs: btrfs: fix out of bounds write
|
||||
|
||||
Fix btrfs_read/read_and_truncate_page write out of bounds of destination
|
||||
buffer. Old behavior break bootstd malloc'd buffers of exact file size.
|
||||
Previously this OOB write have not been noticed because distroboot usually
|
||||
read files into huge static memory areas.
|
||||
|
||||
Signed-off-by: Alex Shumsky <alexthreed@gmail.com>
|
||||
Fixes: e342718 ("fs: btrfs: Implement btrfs_file_read()")
|
||||
Reviewed-by: Qu Wenruo <wqu@suse.com>
|
||||
---
|
||||
fs/btrfs/inode.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
|
||||
index 4691612eda33..3998ffc2c819 100644
|
||||
--- a/fs/btrfs/inode.c
|
||||
+++ b/fs/btrfs/inode.c
|
||||
@@ -640,7 +640,11 @@ static int read_and_truncate_page(struct btrfs_path *path,
|
||||
extent_type = btrfs_file_extent_type(leaf, fi);
|
||||
if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
|
||||
ret = btrfs_read_extent_inline(path, fi, buf);
|
||||
- memcpy(dest, buf + page_off, min(page_len, ret));
|
||||
+ if (ret < 0) {
|
||||
+ free(buf);
|
||||
+ return ret;
|
||||
+ }
|
||||
+ memcpy(dest, buf + page_off, min3(page_len, ret, len));
|
||||
free(buf);
|
||||
return len;
|
||||
}
|
||||
@@ -652,7 +656,7 @@ static int read_and_truncate_page(struct btrfs_path *path,
|
||||
free(buf);
|
||||
return ret;
|
||||
}
|
||||
- memcpy(dest, buf + page_off, page_len);
|
||||
+ memcpy(dest, buf + page_off, min(page_len, len));
|
||||
free(buf);
|
||||
return len;
|
||||
}
|
||||
@ -1,53 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
Date: Sun, 30 Jun 2024 17:36:02 +0200
|
||||
Subject: add dw_hdmi_disable() function to DW-HDMI driver
|
||||
|
||||
---
|
||||
drivers/video/dw_hdmi.c | 17 ++++++++++
|
||||
include/dw_hdmi.h | 1 +
|
||||
2 files changed, 18 insertions(+)
|
||||
|
||||
diff --git a/drivers/video/dw_hdmi.c b/drivers/video/dw_hdmi.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/video/dw_hdmi.c
|
||||
+++ b/drivers/video/dw_hdmi.c
|
||||
@@ -1025,6 +1025,23 @@ int dw_hdmi_enable(struct dw_hdmi *hdmi, const struct display_timing *edid)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int dw_hdmi_disable(struct dw_hdmi *hdmi)
|
||||
+{
|
||||
+ uint clkdis;
|
||||
+
|
||||
+ /* disable pixel clock and tmds data path */
|
||||
+ clkdis = 0x7f;
|
||||
+ hdmi_write(hdmi, clkdis, HDMI_MC_CLKDIS);
|
||||
+
|
||||
+ /* disable phy */
|
||||
+ hdmi_phy_sel_interface_control(hdmi, 0);
|
||||
+ hdmi_phy_enable_tmds(hdmi, 0);
|
||||
+ hdmi_phy_enable_power(hdmi, 0);
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+}
|
||||
+
|
||||
static const struct dw_hdmi_phy_ops dw_hdmi_synopsys_phy_ops = {
|
||||
.phy_set = dw_hdmi_phy_cfg,
|
||||
};
|
||||
diff --git a/include/dw_hdmi.h b/include/dw_hdmi.h
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/include/dw_hdmi.h
|
||||
+++ b/include/dw_hdmi.h
|
||||
@@ -562,6 +562,7 @@ int dw_hdmi_phy_wait_for_hpd(struct dw_hdmi *hdmi);
|
||||
void dw_hdmi_phy_init(struct dw_hdmi *hdmi);
|
||||
|
||||
int dw_hdmi_enable(struct dw_hdmi *hdmi, const struct display_timing *edid);
|
||||
+int dw_hdmi_disable(struct dw_hdmi *hdmi);
|
||||
int dw_hdmi_read_edid(struct dw_hdmi *hdmi, u8 *buf, int buf_size);
|
||||
void dw_hdmi_init(struct dw_hdmi *hdmi);
|
||||
int dw_hdmi_detect_hpd(struct dw_hdmi *hdmi);
|
||||
--
|
||||
Armbian
|
||||
|
||||
@ -1,56 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
Date: Fri, 12 Mar 2021 20:20:12 +0000
|
||||
Subject: [ARCHEOLOGY] Changes and fixes to rk322x uboot and kernel config
|
||||
|
||||
> X-Git-Archeology: > recovered message: > - Enabled nfc on rk322x-dev and disable on rk322x-current (need further development)
|
||||
> X-Git-Archeology: > recovered message: > - Tidied up rk322x-current device tree
|
||||
> X-Git-Archeology: > recovered message: > - enabled nfc rockchip driver enabled in rk322x-dev kernel config
|
||||
> X-Git-Archeology: > recovered message: > - Enabled EHCI controller in u-boot (added patch for inno-phy, device tree and config bits), better device detection for dwc2 usb otg port
|
||||
> X-Git-Archeology: > recovered message: > - Removed SPL_FIT_GENERATOR from u-boot configuration, fixed .its file to use binman
|
||||
> X-Git-Archeology: > recovered message: > - fixed rk322x its file (now includes dtb), reverted u-boot to v2020.10 and changed dev_* into log_debug() calls
|
||||
> X-Git-Archeology: - Revision 95425c27b9d3bbb96e7936cc531638c9150538f9: https://github.com/armbian/build/commit/95425c27b9d3bbb96e7936cc531638c9150538f9
|
||||
> X-Git-Archeology: Date: Fri, 12 Mar 2021 20:20:12 +0000
|
||||
> X-Git-Archeology: From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
> X-Git-Archeology: Subject: Changes and fixes to rk322x uboot and kernel config
|
||||
> X-Git-Archeology:
|
||||
> X-Git-Archeology: - Revision 5130cc32fd9b18ecf71d5d26b688859ede0ffe03: https://github.com/armbian/build/commit/5130cc32fd9b18ecf71d5d26b688859ede0ffe03
|
||||
> X-Git-Archeology: Date: Mon, 20 Jun 2022 08:35:13 +0200
|
||||
> X-Git-Archeology: From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
> X-Git-Archeology: Subject: rockchip64: fix u-boot USB OTG patch name
|
||||
> X-Git-Archeology:
|
||||
> X-Git-Archeology: - Revision d4daf41404853fc13813dc4eb9f6cad76f95945c: https://github.com/armbian/build/commit/d4daf41404853fc13813dc4eb9f6cad76f95945c
|
||||
> X-Git-Archeology: Date: Mon, 20 Jun 2022 08:35:13 +0200
|
||||
> X-Git-Archeology: From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
> X-Git-Archeology: Subject: rockchip64: add sdmmc_ext node, mmc reset properties and otg usb fix to u-boot
|
||||
> X-Git-Archeology:
|
||||
> X-Git-Archeology: - Revision efee17f217e58a93e795c165e303bfd0a2a0a32a: https://github.com/armbian/build/commit/efee17f217e58a93e795c165e303bfd0a2a0a32a
|
||||
> X-Git-Archeology: Date: Mon, 22 Apr 2024 12:39:09 +0200
|
||||
> X-Git-Archeology: From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
> X-Git-Archeology: Subject: rockchip64: bump rk3318-box uboot to v2024.01
|
||||
> X-Git-Archeology:
|
||||
> X-Git-Archeology: - Revision 7876017d0b77bbfefbb3d112045b32d9b50db928: https://github.com/armbian/build/commit/7876017d0b77bbfefbb3d112045b32d9b50db928
|
||||
> X-Git-Archeology: Date: Tue, 02 Jul 2024 23:31:50 +0000
|
||||
> X-Git-Archeology: From: Paolo <paolo.sabatino@gmail.com>
|
||||
> X-Git-Archeology: Subject: Bump rk322x-box and rk3318-box to u-boot v2024.07-rc5 (#6855)
|
||||
> X-Git-Archeology:
|
||||
---
|
||||
drivers/usb/host/dwc2.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/usb/host/dwc2.c b/drivers/usb/host/dwc2.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/usb/host/dwc2.c
|
||||
+++ b/drivers/usb/host/dwc2.c
|
||||
@@ -441,6 +441,8 @@ static void dwc_otg_core_init(struct udevice *dev)
|
||||
|
||||
writel(usbcfg, ®s->gusbcfg);
|
||||
|
||||
+ mdelay(10);
|
||||
+
|
||||
/* Program the GAHBCFG Register. */
|
||||
switch (readl(®s->ghwcfg2) & DWC2_HWCFG2_ARCHITECTURE_MASK) {
|
||||
case DWC2_HWCFG2_ARCHITECTURE_SLAVE_ONLY:
|
||||
--
|
||||
Armbian
|
||||
|
||||
@ -1,45 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
Date: Sun, 16 Jun 2024 18:07:03 +0200
|
||||
Subject: fix inno_poll macro
|
||||
|
||||
---
|
||||
drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||
+++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||
@@ -432,8 +432,8 @@ static inline void inno_update_bits(struct inno_hdmi_phy *inno, u8 reg,
|
||||
inno_write(inno, reg, tmp);
|
||||
}
|
||||
|
||||
-#define inno_poll(reg, val, cond, sleep_us, timeout_us) \
|
||||
- readl_poll_sleep_timeout((reg) * 4, val, cond, sleep_us, timeout_us)
|
||||
+#define inno_poll(inno, reg, val, cond, sleep_us, timeout_us) \
|
||||
+ readl_poll_sleep_timeout(inno->regs + (reg * 4), val, cond, sleep_us, timeout_us)
|
||||
|
||||
static unsigned long inno_hdmi_phy_get_tmdsclk(struct inno_hdmi_phy *inno,
|
||||
unsigned long rate)
|
||||
@@ -575,7 +575,7 @@ inno_hdmi_phy_rk3328_clk_set_rate(struct phy *phy,
|
||||
inno_update_bits(inno, 0xa0, RK3328_PRE_PLL_POWER_DOWN, 0);
|
||||
|
||||
/* Wait for Pre-PLL lock */
|
||||
- ret = inno_poll(0xa9, val, val & RK3328_PRE_PLL_LOCK_STATUS,
|
||||
+ ret = inno_poll(inno, 0xa9, val, val & RK3328_PRE_PLL_LOCK_STATUS,
|
||||
1000, 10000);
|
||||
if (ret) {
|
||||
dev_err(phy->dev, "Pre-PLL locking failed\n");
|
||||
@@ -674,7 +674,7 @@ inno_hdmi_phy_rk3328_power_on(struct phy *phy,
|
||||
RK3328_TMDS_DRIVER_ENABLE);
|
||||
|
||||
/* Wait for post PLL lock */
|
||||
- ret = inno_poll(0xaf, v, v & RK3328_POST_PLL_LOCK_STATUS,
|
||||
+ ret = inno_poll(inno, 0xaf, v, v & RK3328_POST_PLL_LOCK_STATUS,
|
||||
1000, 10000);
|
||||
if (ret) {
|
||||
dev_err(phy->dev, "Post-PLL locking failed\n");
|
||||
--
|
||||
Armbian
|
||||
|
||||
@ -1,13 +1,26 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alessandro Lannocca <alessandro.lannocca@gmail.com>
|
||||
Date: Thu, 8 Aug 2024 07:38:23 +0200
|
||||
Subject: nanopi-r5c: Enable KASLR
|
||||
|
||||
enable kaslrseed in nanopi-r5c-rk3568-defconfig
|
||||
---
|
||||
configs/nanopi-r5c-rk3568_defconfig | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/configs/nanopi-r5c-rk3568_defconfig b/configs/nanopi-r5c-rk3568_defconfig
|
||||
index 138a633f32..3dc42d0dfc 100644
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/configs/nanopi-r5c-rk3568_defconfig
|
||||
+++ b/configs/nanopi-r5c-rk3568_defconfig
|
||||
@@ -40,6 +40,8 @@ CONFIG_CMD_PCI=y
|
||||
@@ -31,6 +31,8 @@ CONFIG_CMD_PCI=y
|
||||
CONFIG_CMD_USB=y
|
||||
# CONFIG_CMD_SETEXPR is not set
|
||||
CONFIG_CMD_PMIC=y
|
||||
CONFIG_CMD_REGULATOR=y
|
||||
+CONFIG_CMD_KASLRSEED=y
|
||||
+CONFIG_DM_RNG=y
|
||||
# CONFIG_SPL_DOS_PARTITION is not set
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_OF_LIVE=y
|
||||
--
|
||||
Armbian
|
||||
|
||||
|
||||
@ -1,87 +0,0 @@
|
||||
diff --git a/boot/fdt_support.c b/boot/fdt_support.c
|
||||
index 2bd80a9dfb18..b1b2679dea0c 100644
|
||||
--- a/boot/fdt_support.c
|
||||
+++ b/boot/fdt_support.c
|
||||
@@ -7,12 +7,15 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
+#include <dm.h>
|
||||
#include <abuf.h>
|
||||
#include <env.h>
|
||||
#include <log.h>
|
||||
#include <mapmem.h>
|
||||
#include <net.h>
|
||||
+#include <rng.h>
|
||||
#include <stdio_dev.h>
|
||||
+#include <dm/device_compat.h>
|
||||
#include <dm/ofnode.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/types.h>
|
||||
@@ -274,6 +277,47 @@ int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int fdt_kaslrseed(void *fdt, bool overwrite)
|
||||
+{
|
||||
+ int len, err, nodeoffset;
|
||||
+ struct udevice *dev;
|
||||
+ const u64 *orig;
|
||||
+ u64 data = 0;
|
||||
+
|
||||
+ err = fdt_check_header(fdt);
|
||||
+ if (err < 0)
|
||||
+ return err;
|
||||
+
|
||||
+ /* find or create "/chosen" node. */
|
||||
+ nodeoffset = fdt_find_or_add_subnode(fdt, 0, "chosen");
|
||||
+ if (nodeoffset < 0)
|
||||
+ return nodeoffset;
|
||||
+
|
||||
+ /* return without error if we are not overwriting and existing non-zero node */
|
||||
+ orig = fdt_getprop(fdt, nodeoffset, "kaslr-seed", &len);
|
||||
+ if (orig && len == sizeof(*orig))
|
||||
+ data = fdt64_to_cpu(*orig);
|
||||
+ if (data && !overwrite) {
|
||||
+ debug("not overwriting existing kaslr-seed\n");
|
||||
+ return 0;
|
||||
+ }
|
||||
+ err = uclass_get_device(UCLASS_RNG, 0, &dev);
|
||||
+ if (err) {
|
||||
+ printf("No RNG device\n");
|
||||
+ return err;
|
||||
+ }
|
||||
+ err = dm_rng_read(dev, &data, sizeof(data));
|
||||
+ if (err) {
|
||||
+ dev_err(dev, "dm_rng_read failed: %d\n", err);
|
||||
+ return err;
|
||||
+ }
|
||||
+ err = fdt_setprop(fdt, nodeoffset, "kaslr-seed", &data, sizeof(data));
|
||||
+ if (err < 0)
|
||||
+ printf("WARNING: could not set kaslr-seed %s.\n", fdt_strerror(err));
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* board_fdt_chosen_bootargs - boards may override this function to use
|
||||
* alternative kernel command line arguments
|
||||
diff --git a/include/fdt_support.h b/include/fdt_support.h
|
||||
index 4b71b8948d99..741e2360c224 100644
|
||||
--- a/include/fdt_support.h
|
||||
+++ b/include/fdt_support.h
|
||||
@@ -463,4 +463,14 @@ void fdt_fixup_board_enet(void *blob);
|
||||
#ifdef CONFIG_CMD_PSTORE
|
||||
void fdt_fixup_pstore(void *blob);
|
||||
#endif
|
||||
+
|
||||
+/**
|
||||
+ * fdt_kaslrseed() - create a 'kaslr-seed' node in chosen
|
||||
+ *
|
||||
+ * @blob: fdt blob
|
||||
+ * @overwrite: do not overwrite existing non-zero node unless true
|
||||
+ * Return: 0 if OK, -ve on error
|
||||
+ */
|
||||
+int fdt_kaslrseed(void *blob, bool overwrite);
|
||||
+
|
||||
#endif /* ifndef __FDT_SUPPORT_H */
|
||||
@ -1,20 +0,0 @@
|
||||
diff --git a/boot/fdt_support.c b/boot/fdt_support.c
|
||||
index b1b2679dea0c..4559adcd5e2e 100644
|
||||
--- a/boot/fdt_support.c
|
||||
+++ b/boot/fdt_support.c
|
||||
@@ -345,6 +345,15 @@ int fdt_chosen(void *fdt)
|
||||
if (nodeoffset < 0)
|
||||
return nodeoffset;
|
||||
|
||||
+ /* if DM_RNG enabled automatically inject kaslr-seed node unless:
|
||||
+ * CONFIG_MEASURED_BOOT enabled: as dt modifications break measured boot
|
||||
+ * CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT enabled: as that implementation does not use dm yet
|
||||
+ */
|
||||
+ if (IS_ENABLED(CONFIG_DM_RNG) &&
|
||||
+ !IS_ENABLED(CONFIG_MEASURED_BOOT) &&
|
||||
+ !IS_ENABLED(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT))
|
||||
+ fdt_kaslrseed(fdt, false);
|
||||
+
|
||||
if (IS_ENABLED(CONFIG_BOARD_RNG_SEED) && !board_rng_seed(&buf)) {
|
||||
err = fdt_setprop(fdt, nodeoffset, "rng-seed",
|
||||
abuf_data(&buf), abuf_size(&buf));
|
||||
@ -1,178 +0,0 @@
|
||||
diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
|
||||
index b47d2d23f913..098738017bab 100644
|
||||
--- a/board/xilinx/common/board.c
|
||||
+++ b/board/xilinx/common/board.c
|
||||
@@ -702,11 +702,6 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
|
||||
#define MAX_RAND_SIZE 8
|
||||
int ft_board_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
- size_t n = MAX_RAND_SIZE;
|
||||
- struct udevice *dev;
|
||||
- u8 buf[MAX_RAND_SIZE];
|
||||
- int nodeoffset, ret;
|
||||
-
|
||||
static const struct node_info nodes[] = {
|
||||
{ "arm,pl353-nand-r2p1", MTD_DEV_TYPE_NAND, },
|
||||
};
|
||||
@@ -714,41 +709,6 @@ int ft_board_setup(void *blob, struct bd_info *bd)
|
||||
if (IS_ENABLED(CONFIG_FDT_FIXUP_PARTITIONS) && IS_ENABLED(CONFIG_NAND_ZYNQ))
|
||||
fdt_fixup_mtdparts(blob, nodes, ARRAY_SIZE(nodes));
|
||||
|
||||
- if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
|
||||
- debug("No RNG device\n");
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- if (dm_rng_read(dev, buf, n)) {
|
||||
- debug("Reading RNG failed\n");
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- if (!blob) {
|
||||
- debug("No FDT memory address configured. Please configure\n"
|
||||
- "the FDT address via \"fdt addr <address>\" command.\n"
|
||||
- "Aborting!\n");
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- ret = fdt_check_header(blob);
|
||||
- if (ret < 0) {
|
||||
- debug("fdt_chosen: %s\n", fdt_strerror(ret));
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
- nodeoffset = fdt_find_or_add_subnode(blob, 0, "chosen");
|
||||
- if (nodeoffset < 0) {
|
||||
- debug("Reading chosen node failed\n");
|
||||
- return nodeoffset;
|
||||
- }
|
||||
-
|
||||
- ret = fdt_setprop(blob, nodeoffset, "kaslr-seed", buf, sizeof(buf));
|
||||
- if (ret < 0) {
|
||||
- debug("Unable to set kaslr-seed on chosen node: %s\n", fdt_strerror(ret));
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
diff --git a/boot/pxe_utils.c b/boot/pxe_utils.c
|
||||
index 5c1c962ff4c1..38ca9b81a42d 100644
|
||||
--- a/boot/pxe_utils.c
|
||||
+++ b/boot/pxe_utils.c
|
||||
@@ -324,10 +324,6 @@ static void label_boot_kaslrseed(void)
|
||||
#if CONFIG_IS_ENABLED(DM_RNG)
|
||||
ulong fdt_addr;
|
||||
struct fdt_header *working_fdt;
|
||||
- size_t n = 0x8;
|
||||
- struct udevice *dev;
|
||||
- u64 *buf;
|
||||
- int nodeoffset;
|
||||
int err;
|
||||
|
||||
/* Get the main fdt and map it */
|
||||
@@ -343,35 +339,7 @@ static void label_boot_kaslrseed(void)
|
||||
if (err <= 0)
|
||||
return;
|
||||
|
||||
- if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
|
||||
- printf("No RNG device\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- nodeoffset = fdt_find_or_add_subnode(working_fdt, 0, "chosen");
|
||||
- if (nodeoffset < 0) {
|
||||
- printf("Reading chosen node failed\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- buf = malloc(n);
|
||||
- if (!buf) {
|
||||
- printf("Out of memory\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- if (dm_rng_read(dev, buf, n)) {
|
||||
- printf("Reading RNG failed\n");
|
||||
- goto err;
|
||||
- }
|
||||
-
|
||||
- err = fdt_setprop(working_fdt, nodeoffset, "kaslr-seed", buf, sizeof(buf));
|
||||
- if (err < 0) {
|
||||
- printf("Unable to set kaslr-seed on chosen node: %s\n", fdt_strerror(err));
|
||||
- goto err;
|
||||
- }
|
||||
-err:
|
||||
- free(buf);
|
||||
+ fdt_kaslrseed(working_fdt, true);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
diff --git a/cmd/kaslrseed.c b/cmd/kaslrseed.c
|
||||
index 9acb8e163863..645cab2e74fd 100644
|
||||
--- a/cmd/kaslrseed.c
|
||||
+++ b/cmd/kaslrseed.c
|
||||
@@ -16,56 +16,21 @@
|
||||
|
||||
static int do_kaslr_seed(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||
{
|
||||
- size_t n = 0x8;
|
||||
- struct udevice *dev;
|
||||
- u64 *buf;
|
||||
- int nodeoffset;
|
||||
- int ret = CMD_RET_SUCCESS;
|
||||
+ int err = CMD_RET_SUCCESS;
|
||||
|
||||
- if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
|
||||
- printf("No RNG device\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- buf = malloc(n);
|
||||
- if (!buf) {
|
||||
- printf("Out of memory\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- if (dm_rng_read(dev, buf, n)) {
|
||||
- printf("Reading RNG failed\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
+ printf("Notice: a /chosen/kaslr-seed is automatically added to the device-tree when booted via booti/bootm/bootz therefore using this command is likely no longer needed\n");
|
||||
|
||||
if (!working_fdt) {
|
||||
printf("No FDT memory address configured. Please configure\n"
|
||||
"the FDT address via \"fdt addr <address>\" command.\n"
|
||||
"Aborting!\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- ret = fdt_check_header(working_fdt);
|
||||
- if (ret < 0) {
|
||||
- printf("fdt_chosen: %s\n", fdt_strerror(ret));
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- nodeoffset = fdt_find_or_add_subnode(working_fdt, 0, "chosen");
|
||||
- if (nodeoffset < 0) {
|
||||
- printf("Reading chosen node failed\n");
|
||||
- return CMD_RET_FAILURE;
|
||||
+ err = CMD_RET_FAILURE;
|
||||
+ } else {
|
||||
+ if (fdt_kaslrseed(working_fdt, true) < 0)
|
||||
+ err = CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
- ret = fdt_setprop(working_fdt, nodeoffset, "kaslr-seed", buf, sizeof(buf));
|
||||
- if (ret < 0) {
|
||||
- printf("Unable to set kaslr-seed on chosen node: %s\n", fdt_strerror(ret));
|
||||
- return CMD_RET_FAILURE;
|
||||
- }
|
||||
-
|
||||
- free(buf);
|
||||
-
|
||||
- return ret;
|
||||
+ return cmd_process_error(cmdtp, err);
|
||||
}
|
||||
|
||||
U_BOOT_LONGHELP(kaslrseed,
|
||||
@ -1,26 +0,0 @@
|
||||
diff --git a/test/cmd/fdt.c b/test/cmd/fdt.c
|
||||
index 547085521758..5cda1ef382a1 100644
|
||||
--- a/test/cmd/fdt.c
|
||||
+++ b/test/cmd/fdt.c
|
||||
@@ -1347,6 +1347,10 @@ static int fdt_test_chosen(struct unit_test_state *uts)
|
||||
ut_assert_nextlinen("\tu-boot,version = "); /* Ignore the version string */
|
||||
if (env_bootargs)
|
||||
ut_assert_nextline("\tbootargs = \"%s\";", env_bootargs);
|
||||
+ if (IS_ENABLED(CONFIG_DM_RNG) &&
|
||||
+ !IS_ENABLED(CONFIG_MEASURED_BOOT) &&
|
||||
+ !IS_ENABLED(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT))
|
||||
+ ut_assert_nextlinen("\tkaslr-seed = ");
|
||||
ut_assert_nextline("};");
|
||||
ut_assertok(ut_check_console_end(uts));
|
||||
|
||||
@@ -1363,6 +1367,10 @@ static int fdt_test_chosen(struct unit_test_state *uts)
|
||||
ut_assert_nextlinen("\tu-boot,version = "); /* Ignore the version string */
|
||||
if (env_bootargs)
|
||||
ut_assert_nextline("\tbootargs = \"%s\";", env_bootargs);
|
||||
+ if (IS_ENABLED(CONFIG_DM_RNG) &&
|
||||
+ !IS_ENABLED(CONFIG_MEASURED_BOOT) &&
|
||||
+ !IS_ENABLED(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT))
|
||||
+ ut_assert_nextlinen("\tkaslr-seed = ");
|
||||
ut_assert_nextline("};");
|
||||
ut_assertok(ut_check_console_end(uts));
|
||||
|
||||
@ -1,43 +0,0 @@
|
||||
From ee1941e4fec601a8444f49c7dad04ad700d501a6 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Shumsky <alexthreed@gmail.com>
|
||||
Date: Wed, 19 Jun 2024 00:41:38 +0300
|
||||
Subject: [PATCH] fs: btrfs: fix out of bounds write
|
||||
|
||||
Fix btrfs_read/read_and_truncate_page write out of bounds of destination
|
||||
buffer. Old behavior break bootstd malloc'd buffers of exact file size.
|
||||
Previously this OOB write have not been noticed because distroboot usually
|
||||
read files into huge static memory areas.
|
||||
|
||||
Signed-off-by: Alex Shumsky <alexthreed@gmail.com>
|
||||
Fixes: e342718 ("fs: btrfs: Implement btrfs_file_read()")
|
||||
Reviewed-by: Qu Wenruo <wqu@suse.com>
|
||||
---
|
||||
fs/btrfs/inode.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
|
||||
index 4691612eda33..3998ffc2c819 100644
|
||||
--- a/fs/btrfs/inode.c
|
||||
+++ b/fs/btrfs/inode.c
|
||||
@@ -640,7 +640,11 @@ static int read_and_truncate_page(struct btrfs_path *path,
|
||||
extent_type = btrfs_file_extent_type(leaf, fi);
|
||||
if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
|
||||
ret = btrfs_read_extent_inline(path, fi, buf);
|
||||
- memcpy(dest, buf + page_off, min(page_len, ret));
|
||||
+ if (ret < 0) {
|
||||
+ free(buf);
|
||||
+ return ret;
|
||||
+ }
|
||||
+ memcpy(dest, buf + page_off, min3(page_len, ret, len));
|
||||
free(buf);
|
||||
return len;
|
||||
}
|
||||
@@ -652,7 +656,7 @@ static int read_and_truncate_page(struct btrfs_path *path,
|
||||
free(buf);
|
||||
return ret;
|
||||
}
|
||||
- memcpy(dest, buf + page_off, page_len);
|
||||
+ memcpy(dest, buf + page_off, min(page_len, len));
|
||||
free(buf);
|
||||
return len;
|
||||
}
|
||||
@ -1,53 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
Date: Sun, 30 Jun 2024 17:36:02 +0200
|
||||
Subject: add dw_hdmi_disable() function to DW-HDMI driver
|
||||
|
||||
---
|
||||
drivers/video/dw_hdmi.c | 17 ++++++++++
|
||||
include/dw_hdmi.h | 1 +
|
||||
2 files changed, 18 insertions(+)
|
||||
|
||||
diff --git a/drivers/video/dw_hdmi.c b/drivers/video/dw_hdmi.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/video/dw_hdmi.c
|
||||
+++ b/drivers/video/dw_hdmi.c
|
||||
@@ -1025,6 +1025,23 @@ int dw_hdmi_enable(struct dw_hdmi *hdmi, const struct display_timing *edid)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int dw_hdmi_disable(struct dw_hdmi *hdmi)
|
||||
+{
|
||||
+ uint clkdis;
|
||||
+
|
||||
+ /* disable pixel clock and tmds data path */
|
||||
+ clkdis = 0x7f;
|
||||
+ hdmi_write(hdmi, clkdis, HDMI_MC_CLKDIS);
|
||||
+
|
||||
+ /* disable phy */
|
||||
+ hdmi_phy_sel_interface_control(hdmi, 0);
|
||||
+ hdmi_phy_enable_tmds(hdmi, 0);
|
||||
+ hdmi_phy_enable_power(hdmi, 0);
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+}
|
||||
+
|
||||
static const struct dw_hdmi_phy_ops dw_hdmi_synopsys_phy_ops = {
|
||||
.phy_set = dw_hdmi_phy_cfg,
|
||||
};
|
||||
diff --git a/include/dw_hdmi.h b/include/dw_hdmi.h
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/include/dw_hdmi.h
|
||||
+++ b/include/dw_hdmi.h
|
||||
@@ -562,6 +562,7 @@ int dw_hdmi_phy_wait_for_hpd(struct dw_hdmi *hdmi);
|
||||
void dw_hdmi_phy_init(struct dw_hdmi *hdmi);
|
||||
|
||||
int dw_hdmi_enable(struct dw_hdmi *hdmi, const struct display_timing *edid);
|
||||
+int dw_hdmi_disable(struct dw_hdmi *hdmi);
|
||||
int dw_hdmi_read_edid(struct dw_hdmi *hdmi, u8 *buf, int buf_size);
|
||||
void dw_hdmi_init(struct dw_hdmi *hdmi);
|
||||
int dw_hdmi_detect_hpd(struct dw_hdmi *hdmi);
|
||||
--
|
||||
Armbian
|
||||
|
||||
@ -1,56 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
Date: Fri, 12 Mar 2021 20:20:12 +0000
|
||||
Subject: [ARCHEOLOGY] Changes and fixes to rk322x uboot and kernel config
|
||||
|
||||
> X-Git-Archeology: > recovered message: > - Enabled nfc on rk322x-dev and disable on rk322x-current (need further development)
|
||||
> X-Git-Archeology: > recovered message: > - Tidied up rk322x-current device tree
|
||||
> X-Git-Archeology: > recovered message: > - enabled nfc rockchip driver enabled in rk322x-dev kernel config
|
||||
> X-Git-Archeology: > recovered message: > - Enabled EHCI controller in u-boot (added patch for inno-phy, device tree and config bits), better device detection for dwc2 usb otg port
|
||||
> X-Git-Archeology: > recovered message: > - Removed SPL_FIT_GENERATOR from u-boot configuration, fixed .its file to use binman
|
||||
> X-Git-Archeology: > recovered message: > - fixed rk322x its file (now includes dtb), reverted u-boot to v2020.10 and changed dev_* into log_debug() calls
|
||||
> X-Git-Archeology: - Revision 95425c27b9d3bbb96e7936cc531638c9150538f9: https://github.com/armbian/build/commit/95425c27b9d3bbb96e7936cc531638c9150538f9
|
||||
> X-Git-Archeology: Date: Fri, 12 Mar 2021 20:20:12 +0000
|
||||
> X-Git-Archeology: From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
> X-Git-Archeology: Subject: Changes and fixes to rk322x uboot and kernel config
|
||||
> X-Git-Archeology:
|
||||
> X-Git-Archeology: - Revision 5130cc32fd9b18ecf71d5d26b688859ede0ffe03: https://github.com/armbian/build/commit/5130cc32fd9b18ecf71d5d26b688859ede0ffe03
|
||||
> X-Git-Archeology: Date: Mon, 20 Jun 2022 08:35:13 +0200
|
||||
> X-Git-Archeology: From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
> X-Git-Archeology: Subject: rockchip64: fix u-boot USB OTG patch name
|
||||
> X-Git-Archeology:
|
||||
> X-Git-Archeology: - Revision d4daf41404853fc13813dc4eb9f6cad76f95945c: https://github.com/armbian/build/commit/d4daf41404853fc13813dc4eb9f6cad76f95945c
|
||||
> X-Git-Archeology: Date: Mon, 20 Jun 2022 08:35:13 +0200
|
||||
> X-Git-Archeology: From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
> X-Git-Archeology: Subject: rockchip64: add sdmmc_ext node, mmc reset properties and otg usb fix to u-boot
|
||||
> X-Git-Archeology:
|
||||
> X-Git-Archeology: - Revision efee17f217e58a93e795c165e303bfd0a2a0a32a: https://github.com/armbian/build/commit/efee17f217e58a93e795c165e303bfd0a2a0a32a
|
||||
> X-Git-Archeology: Date: Mon, 22 Apr 2024 12:39:09 +0200
|
||||
> X-Git-Archeology: From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
> X-Git-Archeology: Subject: rockchip64: bump rk3318-box uboot to v2024.01
|
||||
> X-Git-Archeology:
|
||||
> X-Git-Archeology: - Revision 7876017d0b77bbfefbb3d112045b32d9b50db928: https://github.com/armbian/build/commit/7876017d0b77bbfefbb3d112045b32d9b50db928
|
||||
> X-Git-Archeology: Date: Tue, 02 Jul 2024 23:31:50 +0000
|
||||
> X-Git-Archeology: From: Paolo <paolo.sabatino@gmail.com>
|
||||
> X-Git-Archeology: Subject: Bump rk322x-box and rk3318-box to u-boot v2024.07-rc5 (#6855)
|
||||
> X-Git-Archeology:
|
||||
---
|
||||
drivers/usb/host/dwc2.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/usb/host/dwc2.c b/drivers/usb/host/dwc2.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/usb/host/dwc2.c
|
||||
+++ b/drivers/usb/host/dwc2.c
|
||||
@@ -441,6 +441,8 @@ static void dwc_otg_core_init(struct udevice *dev)
|
||||
|
||||
writel(usbcfg, ®s->gusbcfg);
|
||||
|
||||
+ mdelay(10);
|
||||
+
|
||||
/* Program the GAHBCFG Register. */
|
||||
switch (readl(®s->ghwcfg2) & DWC2_HWCFG2_ARCHITECTURE_MASK) {
|
||||
case DWC2_HWCFG2_ARCHITECTURE_SLAVE_ONLY:
|
||||
--
|
||||
Armbian
|
||||
|
||||
@ -1,45 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
Date: Sun, 16 Jun 2024 18:07:03 +0200
|
||||
Subject: fix inno_poll macro
|
||||
|
||||
---
|
||||
drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||
+++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
|
||||
@@ -432,8 +432,8 @@ static inline void inno_update_bits(struct inno_hdmi_phy *inno, u8 reg,
|
||||
inno_write(inno, reg, tmp);
|
||||
}
|
||||
|
||||
-#define inno_poll(reg, val, cond, sleep_us, timeout_us) \
|
||||
- readl_poll_sleep_timeout((reg) * 4, val, cond, sleep_us, timeout_us)
|
||||
+#define inno_poll(inno, reg, val, cond, sleep_us, timeout_us) \
|
||||
+ readl_poll_sleep_timeout(inno->regs + (reg * 4), val, cond, sleep_us, timeout_us)
|
||||
|
||||
static unsigned long inno_hdmi_phy_get_tmdsclk(struct inno_hdmi_phy *inno,
|
||||
unsigned long rate)
|
||||
@@ -575,7 +575,7 @@ inno_hdmi_phy_rk3328_clk_set_rate(struct phy *phy,
|
||||
inno_update_bits(inno, 0xa0, RK3328_PRE_PLL_POWER_DOWN, 0);
|
||||
|
||||
/* Wait for Pre-PLL lock */
|
||||
- ret = inno_poll(0xa9, val, val & RK3328_PRE_PLL_LOCK_STATUS,
|
||||
+ ret = inno_poll(inno, 0xa9, val, val & RK3328_PRE_PLL_LOCK_STATUS,
|
||||
1000, 10000);
|
||||
if (ret) {
|
||||
dev_err(phy->dev, "Pre-PLL locking failed\n");
|
||||
@@ -674,7 +674,7 @@ inno_hdmi_phy_rk3328_power_on(struct phy *phy,
|
||||
RK3328_TMDS_DRIVER_ENABLE);
|
||||
|
||||
/* Wait for post PLL lock */
|
||||
- ret = inno_poll(0xaf, v, v & RK3328_POST_PLL_LOCK_STATUS,
|
||||
+ ret = inno_poll(inno, 0xaf, v, v & RK3328_POST_PLL_LOCK_STATUS,
|
||||
1000, 10000);
|
||||
if (ret) {
|
||||
dev_err(phy->dev, "Post-PLL locking failed\n");
|
||||
--
|
||||
Armbian
|
||||
|
||||
@ -1,5 +1,15 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alessandro Lannocca <alessandro.lannocca@gmail.com>
|
||||
Date: Thu, 8 Aug 2024 07:38:23 +0200
|
||||
Subject: orangepi5-plus: enable KASLR
|
||||
|
||||
enable kaslrseed in orangepi-5-plus--rk3568-defconfig
|
||||
---
|
||||
configs/orangepi-5-plus-rk3588_defconfig | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/configs/orangepi-5-plus-rk3588_defconfig b/configs/orangepi-5-plus-rk3588_defconfig
|
||||
index 138a633f32..3dc42d0dfc 100644
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/configs/orangepi-5-plus-rk3588_defconfig
|
||||
+++ b/configs/orangepi-5-plus-rk3588_defconfig
|
||||
@@ -40,6 +40,8 @@ CONFIG_CMD_PCI=y
|
||||
@ -11,3 +21,6 @@ index 138a633f32..3dc42d0dfc 100644
|
||||
# CONFIG_SPL_DOS_PARTITION is not set
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_OF_LIVE=y
|
||||
--
|
||||
Armbian
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
From ee1941e4fec601a8444f49c7dad04ad700d501a6 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Shumsky <alexthreed@gmail.com>
|
||||
Date: Wed, 19 Jun 2024 00:41:38 +0300
|
||||
Subject: [PATCH] fs: btrfs: fix out of bounds write
|
||||
Subject: fs: btrfs: fix out of bounds write
|
||||
|
||||
Fix btrfs_read/read_and_truncate_page write out of bounds of destination
|
||||
buffer. Old behavior break bootstd malloc'd buffers of exact file size.
|
||||
@ -16,7 +16,7 @@ Reviewed-by: Qu Wenruo <wqu@suse.com>
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
|
||||
index 4691612eda33..3998ffc2c819 100644
|
||||
index 111111111111..222222222222 100644
|
||||
--- a/fs/btrfs/inode.c
|
||||
+++ b/fs/btrfs/inode.c
|
||||
@@ -640,7 +640,11 @@ static int read_and_truncate_page(struct btrfs_path *path,
|
||||
@ -41,3 +41,6 @@ index 4691612eda33..3998ffc2c819 100644
|
||||
free(buf);
|
||||
return len;
|
||||
}
|
||||
--
|
||||
Armbian
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user