mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-12 06:03:30 +08:00
rockchip: theobroma-systems: fix modified boot_targets detection
U-Boot proper automatically modifies boot_targets to swap the order in which MMC storage media are used for standard boot based on which MMC storage medium was used to load U-Boot proper. This is however only done if the user has not changed it manually, therefore a check between the default and current value is done. This used to work fine until the migration to standard boot where boot_targets value size in the default environment went above the 32 characters that env_get_default function can return, thus resulting in a truncated variable. Therefore the check between default and current value would always fail. By using the newly added env_get_default_into function, a buffer of the appropriate size can be allocated on the stack to get the whole value of boot_targets in the default environment and thus fixing the check. Cc: Quentin Schulz <foss+uboot@0leil.net> Reviewed-by: Kever Yang <kever.yang@rock-chips.com> Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
This commit is contained in:
parent
87d3c472a2
commit
d2c90bfc4c
@ -21,7 +21,9 @@ int setup_boottargets(void)
|
||||
{
|
||||
const char *boot_device =
|
||||
ofnode_read_chosen_string("u-boot,spl-boot-device");
|
||||
char *env_default, *env;
|
||||
char env_default[sizeof(BOOT_TARGETS)];
|
||||
char *env;
|
||||
int ret;
|
||||
|
||||
if (!boot_device) {
|
||||
debug("%s: /chosen/u-boot,spl-boot-device not set\n",
|
||||
@ -30,7 +32,9 @@ int setup_boottargets(void)
|
||||
}
|
||||
debug("%s: booted from %s\n", __func__, boot_device);
|
||||
|
||||
env_default = env_get_default("boot_targets");
|
||||
ret = env_get_default_into("boot_targets", env_default, sizeof(env_default));
|
||||
if (ret < 0)
|
||||
env_default[0] = '\0';
|
||||
env = env_get("boot_targets");
|
||||
if (!env) {
|
||||
debug("%s: boot_targets does not exist\n", __func__);
|
||||
|
Loading…
Reference in New Issue
Block a user