summaryrefslogtreecommitdiffstats
path: root/sys/i386/ibcs2/imgact_coff.c
diff options
context:
space:
mode:
authoreivind <eivind@FreeBSD.org>1999-11-14 17:33:40 +0000
committereivind <eivind@FreeBSD.org>1999-11-14 17:33:40 +0000
commit7fc88e0c06582879c42d812fa903ef0ac9631e69 (patch)
treee1ca219e65b59f823472c5c6cdcddfd8b362a096 /sys/i386/ibcs2/imgact_coff.c
parent1adef4ea81d56d227a9a356795f331fdfd35d9ed (diff)
downloadFreeBSD-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/imgact_coff.c')
-rw-r--r--sys/i386/ibcs2/imgact_coff.c8
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;
}
OpenPOWER on IntegriCloud