diff options
author | 2006-03-14 19:23:52 +0000 | |
---|---|---|
committer | 2006-03-14 19:23:52 +0000 | |
commit | 566036e01be0171f3c6c694a0b3f9c9868730836 (patch) | |
tree | 0eb65f138ce7a24d97ba8b8278e0ab15a62610de /lib/libkvm/kvm_i386.c | |
parent | Some more usage of const and correct fmt string for a size_t. (diff) | |
download | wireguard-openbsd-566036e01be0171f3c6c694a0b3f9c9868730836.tar.xz wireguard-openbsd-566036e01be0171f3c6c694a0b3f9c9868730836.zip |
Prevent double-free.
ok mickey@, todd@, deraadt@
Diffstat (limited to 'lib/libkvm/kvm_i386.c')
-rw-r--r-- | lib/libkvm/kvm_i386.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/lib/libkvm/kvm_i386.c b/lib/libkvm/kvm_i386.c index 5e5be968c7a..3d35ed5ed5b 100644 --- a/lib/libkvm/kvm_i386.c +++ b/lib/libkvm/kvm_i386.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kvm_i386.c,v 1.13 2004/07/01 02:04:10 mickey Exp $ */ +/* $OpenBSD: kvm_i386.c,v 1.14 2006/03/14 19:23:52 kettenis Exp $ */ /* $NetBSD: kvm_i386.c,v 1.9 1996/03/18 22:33:38 thorpej Exp $ */ /*- @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm_hp300.c 8.1 (Berkeley) 6/4/93"; #else -static char *rcsid = "$OpenBSD: kvm_i386.c,v 1.13 2004/07/01 02:04:10 mickey Exp $"; +static char *rcsid = "$OpenBSD: kvm_i386.c,v 1.14 2006/03/14 19:23:52 kettenis Exp $"; #endif #endif /* LIBC_SCCS and not lint */ @@ -91,20 +91,20 @@ _kvm_initvtop(kvm_t *kd) u_long pa; vm = (struct vmstate *)_kvm_malloc(kd, sizeof(*vm)); - if (vm == 0) + if (vm == NULL) return (-1); kd->vmst = vm; + vm->PTD = NULL; + nlist[0].n_name = "_PTDpaddr"; - nlist[1].n_name = 0; + nlist[1].n_name = NULL; if (kvm_nlist(kd, nlist) != 0) { _kvm_err(kd, kd->program, "bad namelist"); return (-1); } - vm->PTD = 0; - if (_kvm_pread(kd, kd->pmfd, &pa, sizeof pa, (off_t)_kvm_pa2off(kd, nlist[0].n_value - KERNBASE)) != sizeof pa) goto invalid; @@ -118,8 +118,10 @@ _kvm_initvtop(kvm_t *kd) return (0); invalid: - if (vm->PTD != 0) + if (vm->PTD != NULL) { free(vm->PTD); + vm->PTD = NULL; + } return (-1); } @@ -150,7 +152,7 @@ _kvm_kvatop(kvm_t *kd, u_long va, u_long *pa) * If we are initializing (kernel page table descriptor pointer * not yet set) * then return pa == va to avoid infinite recursion. */ - if (vm->PTD == 0) { + if (vm->PTD == NULL) { *pa = va; return (NBPG - offset); } |