diff options
author | 2014-02-25 21:40:39 +0000 | |
---|---|---|
committer | 2014-02-25 21:40:39 +0000 | |
commit | 32ab6324ead45c520ae8525b4faa78de0cca13c6 (patch) | |
tree | f4648dc8f0dfabecc20f85270c1cf728e3a84873 /sys/lib/libsa/loadfile_elf.c | |
parent | /etc/random.seed support (unless booting from tape). Crank version. (diff) | |
download | wireguard-openbsd-32ab6324ead45c520ae8525b4faa78de0cca13c6.tar.xz wireguard-openbsd-32ab6324ead45c520ae8525b4faa78de0cca13c6.zip |
Do not actually write to the area spanned by the PT_OPENBSD_RANDOMIZE if
LOAD_DATA is not set in flags; allows a two-pass kernel load using COUNT_KERNEL
and then LOAD_KERNEL to work; similar to sparc loadfile_sparc.c 1.3.
Diffstat (limited to 'sys/lib/libsa/loadfile_elf.c')
-rw-r--r-- | sys/lib/libsa/loadfile_elf.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/sys/lib/libsa/loadfile_elf.c b/sys/lib/libsa/loadfile_elf.c index 493aedd0e85..e9ee42440de 100644 --- a/sys/lib/libsa/loadfile_elf.c +++ b/sys/lib/libsa/loadfile_elf.c @@ -1,5 +1,5 @@ /* $NetBSD: loadfile.c,v 1.10 2000/12/03 02:53:04 tsutsui Exp $ */ -/* $OpenBSD: loadfile_elf.c,v 1.7 2013/12/28 02:51:07 deraadt Exp $ */ +/* $OpenBSD: loadfile_elf.c,v 1.8 2014/02/25 21:40:39 miod Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -98,10 +98,15 @@ ELFNAME(exec)(int fd, Elf_Ehdr *elf, u_long *marks, int flags) if (phdr[i].p_type == PT_OPENBSD_RANDOMIZE) { int m; - /* Fill segment. */ - for (pos = 0; pos < phdr[i].p_filesz; pos += m) { - m = MIN(phdr[i].p_filesz - pos, sizeof(rnddata)); - BCOPY(rnddata, phdr[i].p_paddr + pos, m); + /* Fill segment if asked for. */ + if (flags & LOAD_DATA) { + for (pos = 0; pos < phdr[i].p_filesz; + pos += m) { + m = MIN(phdr[i].p_filesz - pos, + sizeof(rnddata)); + BCOPY(rnddata, phdr[i].p_paddr + pos, + m); + } } continue; } |