Module Name: src Committed By: hannken Date: Sun Nov 20 10:32:33 UTC 2011
Modified Files: src/sys/kern: kern_verifiedexec.c Log Message: Fix locking against self in veriexec_fp_calc(). To generate a diff of this commit: cvs rdiff -u -r1.127 -r1.128 src/sys/kern/kern_verifiedexec.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/kern_verifiedexec.c diff -u src/sys/kern/kern_verifiedexec.c:1.127 src/sys/kern/kern_verifiedexec.c:1.128 --- src/sys/kern/kern_verifiedexec.c:1.127 Fri Oct 14 09:23:31 2011 +++ src/sys/kern/kern_verifiedexec.c Sun Nov 20 10:32:33 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_verifiedexec.c,v 1.127 2011/10/14 09:23:31 hannken Exp $ */ +/* $NetBSD: kern_verifiedexec.c,v 1.128 2011/11/20 10:32:33 hannken Exp $ */ /*- * Copyright (c) 2005, 2006 Elad Efrat <e...@netbsd.org> @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_verifiedexec.c,v 1.127 2011/10/14 09:23:31 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_verifiedexec.c,v 1.128 2011/11/20 10:32:33 hannken Exp $"); #include "opt_veriexec.h" @@ -411,9 +411,11 @@ veriexec_fp_calc(struct lwp *l, struct v size_t resid, npages; int error, do_perpage, pagen; - vn_lock(vp, LK_SHARED | LK_RETRY); + if (lock_state == VERIEXEC_UNLOCKED) + vn_lock(vp, LK_SHARED | LK_RETRY); error = VOP_GETATTR(vp, &va, l->l_cred); - VOP_UNLOCK(vp); + if (lock_state == VERIEXEC_UNLOCKED) + VOP_UNLOCK(vp); if (error) return (error);