Index: kern/kern_verifiedexec.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_verifiedexec.c,v retrieving revision 1.43 diff -u -p -r1.43 kern_verifiedexec.c --- kern/kern_verifiedexec.c 10 Oct 2005 17:36:29 -0000 1.43 +++ kern/kern_verifiedexec.c 10 Oct 2005 17:46:55 -0000 @@ -219,12 +219,10 @@ veriexec_fp_calc(struct proc *p, struct panic("veriexec: Operations vector is NULL"); } -#if 0 /* XXX - for now */ if ((vhe->type & VERIEXEC_UNTRUSTED) && (vhe->page_fp_status == PAGE_FP_NONE)) do_perpage = 1; else -#endif do_perpage = 0; ctx = (void *) malloc(vhe->ops->context_size, M_TEMP, M_WAITOK); Index: uvm/uvm_vnode.c =================================================================== RCS file: /cvsroot/src/sys/uvm/uvm_vnode.c,v retrieving revision 1.66 diff -u -p -r1.66 uvm_vnode.c --- uvm/uvm_vnode.c 27 Jun 2005 02:29:32 -0000 1.66 +++ uvm/uvm_vnode.c 10 Oct 2005 17:46:55 -0000 @@ -55,6 +55,7 @@ __KERNEL_RCSID(0, "$NetBSD: uvm_vnode.c, #include "fs_nfs.h" #include "opt_uvmhist.h" #include "opt_ddb.h" +#include "opt_verified_exec.h" #include #include @@ -68,6 +69,9 @@ __KERNEL_RCSID(0, "$NetBSD: uvm_vnode.c, #include #include #include +#ifdef VERIFIED_EXEC +#include +#endif /* VERIFIED_EXEC */ #include @@ -299,6 +303,36 @@ uvn_get(struct uvm_object *uobj, voff_t UVMHIST_LOG(ubchist, "vp %p off 0x%x", vp, (int)offset, 0,0); error = VOP_GETPAGES(vp, offset, pps, npagesp, centeridx, access_type, advice, flags); + +#ifdef VERIFIED_EXEC + if (!error) { + struct veriexec_hash_entry *vhe; + struct vattr va; + size_t i, offidx; + + if (!(flags & PGO_SYNCIO)) + return (error); + + error = VOP_GETATTR(vp, &va, curlwp->l_proc->p_ucred, + curlwp->l_proc); + if (error) + return (error); + + vhe = veriexec_lookup(va.va_fsid, va.va_fileid); + if ((vhe == NULL) || (vhe->page_fp == NULL)) + return (error); + + offidx = (offset >> PAGE_SHIFT); + + for (i = 0; i < *npagesp; i++) { + error = veriexec_page_verify(vhe, &va, pps[i], + i + offidx); + if (error) + break; + } + } +#endif /* VERIFIED_EXEC */ + return error; }