diff options
author | eivind <eivind@FreeBSD.org> | 1999-11-14 17:33:40 +0000 |
---|---|---|
committer | eivind <eivind@FreeBSD.org> | 1999-11-14 17:33:40 +0000 |
commit | 7fc88e0c06582879c42d812fa903ef0ac9631e69 (patch) | |
tree | e1ca219e65b59f823472c5c6cdcddfd8b362a096 /sys/i386/ibcs2 | |
parent | 1adef4ea81d56d227a9a356795f331fdfd35d9ed (diff) | |
download | FreeBSD-src-7fc88e0c06582879c42d812fa903ef0ac9631e69.zip FreeBSD-src-7fc88e0c06582879c42d812fa903ef0ac9631e69.tar.gz |
Fix case where vnode could be unlocked twice. Untested; bug found by code
reading.
Reviewed by: phk
Diffstat (limited to 'sys/i386/ibcs2')
-rw-r--r-- | sys/i386/ibcs2/imgact_coff.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/i386/ibcs2/imgact_coff.c b/sys/i386/ibcs2/imgact_coff.c index a827dee..526ff66 100644 --- a/sys/i386/ibcs2/imgact_coff.c +++ b/sys/i386/ibcs2/imgact_coff.c @@ -214,7 +214,7 @@ coff_load_file(struct proc *p, char *name) 0, (caddr_t) vp, 0)) != 0) - goto fail; + goto unlocked_fail; fhdr = (struct filehdr *)ptr; @@ -270,14 +270,16 @@ coff_load_file(struct proc *p, char *name) error = 0; - dealloc_and_fail: + dealloc_and_fail: if (vm_map_remove(kernel_map, (vm_offset_t) ptr, (vm_offset_t) ptr + PAGE_SIZE)) panic(__FUNCTION__ " vm_map_remove failed"); fail: - vput(nd.ni_vp); + VOP_UNLOCK(vp, 0, p); + unlocked_fail: + vrele(nd.ni_vp); zfree(namei_zone, nd.ni_cnd.cn_pnbuf); return error; } |