+ if (!(fp->f_fglob->fg_flag & FREAD)) {
+ err = KERN_PROTECTION_FAILURE;
+ goto bad;
+ }
+
+ vp = (struct vnode *)fp->f_fglob->fg_data;
+ err = vnode_getwithref(vp);
+ if(err != 0)
+ goto bad;
+
+ if (vp->v_type != VREG) {
+ (void)vnode_put(vp);
+ err = KERN_INVALID_ARGUMENT;
+ goto bad;
+ }
+
+ AUDIT_ARG(vnpath, vp, ARG_VNODE1);
+
+ /* conformance change - mmap needs to update access time for mapped
+ * files
+ */
+ VATTR_INIT(&vattr);
+ nanotime(&vattr.va_access_time);
+ VATTR_SET_ACTIVE(&vattr, va_access_time);
+ context.vc_proc = p;
+ context.vc_ucred = kauth_cred_get();
+ vnode_setattr(vp, &vattr, &context);