diff options
author | 2019-01-09 13:18:50 +0000 | |
---|---|---|
committer | 2019-01-09 13:18:50 +0000 | |
commit | cfd4bff0313b7a29ea82f9484862326f1c6b2643 (patch) | |
tree | 9116d8382b21449782d42c9836e0e261a14e91b4 | |
parent | Include strings.h for bzero in usr.bin/nc (diff) | |
download | wireguard-openbsd-cfd4bff0313b7a29ea82f9484862326f1c6b2643.tar.xz wireguard-openbsd-cfd4bff0313b7a29ea82f9484862326f1c6b2643.zip |
Make arm64 efiboot can boot from partitions other than "a".
ok kettenis
-rw-r--r-- | sys/arch/arm64/arm64/autoconf.c | 10 | ||||
-rw-r--r-- | sys/arch/arm64/stand/efiboot/efidev.c | 6 | ||||
-rw-r--r-- | sys/arch/arm64/stand/efiboot/exec.c | 4 |
3 files changed, 12 insertions, 8 deletions
diff --git a/sys/arch/arm64/arm64/autoconf.c b/sys/arch/arm64/arm64/autoconf.c index 4d5222bf02a..d0094f045db 100644 --- a/sys/arch/arm64/arm64/autoconf.c +++ b/sys/arch/arm64/arm64/autoconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: autoconf.c,v 1.9 2018/02/06 20:35:21 naddy Exp $ */ +/* $OpenBSD: autoconf.c,v 1.10 2019/01/09 13:18:50 yasuoka Exp $ */ /* * Copyright (c) 2009 Miodrag Vallat. * @@ -19,6 +19,7 @@ #include <sys/systm.h> #include <sys/conf.h> #include <sys/device.h> +#include <sys/disklabel.h> #include <sys/reboot.h> #include <sys/socket.h> #include <sys/hibernate.h> @@ -68,7 +69,8 @@ diskconf(void) { size_t len; char *p; - dev_t tmpdev; + dev_t tmpdev = NODEV; + int part = 0; extern uint8_t *bootmac; if (*boot_file != '\0') @@ -82,6 +84,8 @@ diskconf(void) else len = strlen(boot_file); bootdv = parsedisk(boot_file, len, 0, &tmpdev); + if (tmpdev != NODEV) + part = DISKPART(tmpdev); } #if defined(NFSCLIENT) @@ -105,7 +109,7 @@ diskconf(void) else printf("boot device: lookup %s failed \n", boot_file); - setroot(bootdv, 0, RB_USERREQ); + setroot(bootdv, part, RB_USERREQ); dumpconf(); #ifdef HIBERNATE diff --git a/sys/arch/arm64/stand/efiboot/efidev.c b/sys/arch/arm64/stand/efiboot/efidev.c index 15ed85a6f87..91c1ce5f90d 100644 --- a/sys/arch/arm64/stand/efiboot/efidev.c +++ b/sys/arch/arm64/stand/efiboot/efidev.c @@ -1,4 +1,4 @@ -/* $OpenBSD: efidev.c,v 1.2 2018/08/25 20:43:39 kettenis Exp $ */ +/* $OpenBSD: efidev.c,v 1.3 2019/01/09 13:18:50 yasuoka Exp $ */ /* * Copyright (c) 2015 YASUOKA Masahiko <yasuoka@yasuoka.net> @@ -484,7 +484,7 @@ efiopen(struct open_file *f, ...) part = va_arg(ap, u_int); va_end(ap); - if (unit != 0) + if (unit != 0 || part >= MAXPARTITIONS) return (ENXIO); diskinfo.ed.blkio = disk; @@ -512,7 +512,7 @@ efistrategy(void *devdata, int rw, daddr32_t blk, size_t size, void *buf, nsect = (size + DEV_BSIZE - 1) / DEV_BSIZE; blk += DL_SECTOBLK(&dip->disklabel, - dip->disklabel.d_partitions[B_PARTITION(dip->sc_part)].p_offset); + dip->disklabel.d_partitions[dip->sc_part].p_offset); if (blk < 0) error = EINVAL; diff --git a/sys/arch/arm64/stand/efiboot/exec.c b/sys/arch/arm64/stand/efiboot/exec.c index cc282594e03..9ddb31806fc 100644 --- a/sys/arch/arm64/stand/efiboot/exec.c +++ b/sys/arch/arm64/stand/efiboot/exec.c @@ -1,4 +1,4 @@ -/* $OpenBSD: exec.c,v 1.5 2017/02/08 09:18:24 patrick Exp $ */ +/* $OpenBSD: exec.c,v 1.6 2019/01/09 13:18:50 yasuoka Exp $ */ /* * Copyright (c) 2006, 2016 Mark Kettenis @@ -94,7 +94,7 @@ run_loadfile(u_long *marks, int howto) char *cp; void *fdt; - snprintf(args, sizeof(args) - 8, "%s:%s", cmd.bootdev, cmd.image); + strlcpy(args, cmd.path, sizeof(args)); cp = args + strlen(args); *cp++ = ' '; |