diff options
author | kientzle <kientzle@FreeBSD.org> | 2012-05-06 16:01:58 +0000 |
---|---|---|
committer | kientzle <kientzle@FreeBSD.org> | 2012-05-06 16:01:58 +0000 |
commit | 28b765c84794c6f87d8bff5ffad31d2b0001769c (patch) | |
tree | 39ed61d6386027195492bb8f3827ea01426ee98a /sys/boot | |
parent | dfb886ebd021277a42ddc8b23893b59ca6ade3e7 (diff) | |
download | FreeBSD-src-28b765c84794c6f87d8bff5ffad31d2b0001769c.zip FreeBSD-src-28b765c84794c6f87d8bff5ffad31d2b0001769c.tar.gz |
Don't call strcmp with a NULL pointer.
In particular, on the AM335x, which comes up with no memory
mapped to low addresses, dereferencing the NULL causes a crash.
Diffstat (limited to 'sys/boot')
-rw-r--r-- | sys/boot/uboot/common/main.c | 11 | ||||
-rw-r--r-- | sys/boot/uboot/common/metadata.c | 11 |
2 files changed, 18 insertions, 4 deletions
diff --git a/sys/boot/uboot/common/main.c b/sys/boot/uboot/common/main.c index 7e961fd..9d7e9dc 100644 --- a/sys/boot/uboot/common/main.c +++ b/sys/boot/uboot/common/main.c @@ -116,6 +116,16 @@ meminfo(void) } } +static uint64_t +uboot_loadaddr(u_int type, void *data, uint64_t addr) +{ + printf("uboot_loadaddr: type=%d data=0x%x addr=0x%x\n", + type, data, addr); + if (type == 1) + return 0x40000000; + return (addr); +} + int main(void) { @@ -211,6 +221,7 @@ main(void) archsw.arch_copyout = uboot_copyout; archsw.arch_readin = uboot_readin; archsw.arch_autoload = uboot_autoload; + archsw.arch_loadaddr = uboot_loadaddr; interact(); /* doesn't return */ diff --git a/sys/boot/uboot/common/metadata.c b/sys/boot/uboot/common/metadata.c index 7b6e1fc..ae20584 100644 --- a/sys/boot/uboot/common/metadata.c +++ b/sys/boot/uboot/common/metadata.c @@ -72,6 +72,7 @@ static int md_getboothowto(char *kargs) { char *cp; + char *p; int howto; int active; int i; @@ -132,10 +133,12 @@ md_getboothowto(char *kargs) if (getenv(howto_names[i].ev) != NULL) howto |= howto_names[i].mask; } - if (!strcmp(getenv("console"), "comconsole")) - howto |= RB_SERIAL; - if (!strcmp(getenv("console"), "nullconsole")) - howto |= RB_MUTE; + if ((p = getenv("console"))) { + if (!strcmp(p, "comconsole")) + howto |= RB_SERIAL; + if (!strcmp(p, "nullconsole")) + howto |= RB_MUTE; + } return(howto); } |