summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>2020-09-02 16:07:31 +0000
committerderaadt <deraadt@openbsd.org>2020-09-02 16:07:31 +0000
commitbc7ce91c8672dede82c9fa5daa8a1c15fff505b0 (patch)
tree194aad7a3c3aaf440900ed0303e29259e5afd747
parentAdd a -w flag to set- and load-buffer to send to clipboard using OSC 52. (diff)
downloadwireguard-openbsd-bc7ce91c8672dede82c9fa5daa8a1c15fff505b0.tar.xz
wireguard-openbsd-bc7ce91c8672dede82c9fa5daa8a1c15fff505b0.zip
vfs_shutdown() is neccessary to ensure buffer cache drain before reexec()
ok kettenis visa
-rw-r--r--sys/arch/octeon/dev/octboot.c5
-rw-r--r--sys/arch/powerpc64/dev/kexec.c5
2 files changed, 8 insertions, 2 deletions
diff --git a/sys/arch/octeon/dev/octboot.c b/sys/arch/octeon/dev/octboot.c
index a55d5e75a61..2cfebcaba07 100644
--- a/sys/arch/octeon/dev/octboot.c
+++ b/sys/arch/octeon/dev/octboot.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: octboot.c,v 1.3 2020/06/13 14:00:50 visa Exp $ */
+/* $OpenBSD: octboot.c,v 1.4 2020/09/02 16:07:33 deraadt Exp $ */
/*
* Copyright (c) 2019-2020 Visa Hankala
@@ -21,6 +21,7 @@
#include <sys/exec_elf.h>
#include <sys/malloc.h>
#include <sys/proc.h>
+#include <sys/mount.h>
#include <uvm/uvm_extern.h>
@@ -295,6 +296,8 @@ octboot_kexec(struct octboot_kexec_args *kargs, struct proc *p)
maxp += size;
}
+ vfs_shutdown(p);
+
printf("launching kernel\n");
config_suspend_all(DVACT_POWERDOWN);
diff --git a/sys/arch/powerpc64/dev/kexec.c b/sys/arch/powerpc64/dev/kexec.c
index 00b0cd38317..8673cad3cfb 100644
--- a/sys/arch/powerpc64/dev/kexec.c
+++ b/sys/arch/powerpc64/dev/kexec.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kexec.c,v 1.4 2020/08/29 09:17:17 kettenis Exp $ */
+/* $OpenBSD: kexec.c,v 1.5 2020/09/02 16:07:31 deraadt Exp $ */
/*
* Copyright (c) 2019-2020 Visa Hankala
@@ -22,6 +22,7 @@
#include <sys/exec_elf.h>
#include <sys/malloc.h>
#include <sys/proc.h>
+#include <sys/mount.h>
#include <sys/reboot.h>
#include <uvm/uvm_extern.h>
@@ -190,6 +191,8 @@ kexec_kexec(struct kexec_args *kargs, struct proc *p)
if (error != 0)
goto fail;
+ vfs_shutdown(p);
+
shp = (Elf64_Shdr *)(symaddr + eh.e_shoff);
shstr = symaddr + shp[eh.e_shstrndx].sh_offset;
for (i = 0; i < eh.e_shnum; i++) {