1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-22 11:17:19 +00:00
freebsd/sys/boot/uboot/lib
Maxim Sobolev 15e862e33c Provide bug4bug workaround for certain dumbiness of the u-boot's API_env_enum
function, which is expected to set returned env to NULL upon reaching the end
of the environment list but fails to do so in certain cases. The respective
u-boot code looks like the following (HEAD at the time of this commit):

--- api.c ---
 496 static int API_env_enum(va_list ap)
 ...
 510                 *next = last;
 511
 512                 for (i = 0; env_get_char(i) != '\0'; i = n + 1) {
 513                         for (n = i; env_get_char(n) != '\0'; ++n) {
 514                                 if (n >= CONFIG_ENV_SIZE) {
 515                                         /* XXX shouldn't we set *next = NULL?? */
 516                                         return 0;
 517                                 }
 518                         }
-------------

The net result is that any unfortunate user of the loader's ub_env_enum()
function hitting this condition would be trapped in the infinite loop, as
the main use pattern of ub_env_enum() is basically the following:

while ((env = ub_env_enum(env)) != NULL) { DO STUFF }

Which would stuck forever with the last element.
2015-06-19 22:24:58 +00:00
..
api_public.h
console.c
copy.c Fix bug in the ubldr introduced in the rev.283035. The new code 2015-06-19 17:00:36 +00:00
devicename.c
disk.c
elf_freebsd.c
glue.c Provide bug4bug workaround for certain dumbiness of the u-boot's API_env_enum 2015-06-19 22:24:58 +00:00
glue.h
libuboot.h
Makefile
module.c Print error message if autoload fails due to missing DTB blob, otherwise 2015-05-26 20:32:14 +00:00
net.c
reboot.c
time.c