summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryasuoka <yasuoka@openbsd.org>2019-01-09 13:18:50 +0000
committeryasuoka <yasuoka@openbsd.org>2019-01-09 13:18:50 +0000
commitcfd4bff0313b7a29ea82f9484862326f1c6b2643 (patch)
tree9116d8382b21449782d42c9836e0e261a14e91b4
parentInclude strings.h for bzero in usr.bin/nc (diff)
downloadwireguard-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.c10
-rw-r--r--sys/arch/arm64/stand/efiboot/efidev.c6
-rw-r--r--sys/arch/arm64/stand/efiboot/exec.c4
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++ = ' ';