+ if (exists) { /* if file already exists, look if it's a coredump */
+ struct user userbuf; /* XXX */
+ error = vn_rdwr(UIO_READ, vp, (caddr_t)&userbuf, sizeof(userbuf),
+ (off_t)0, UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT, cred,
+ (int *)NULL, p);
+ if (error || (vattr.va_size != ctob(UPAGES +
+ userbuf.u_kproc.kp_eproc.e_vm.vm_dsize +
+ userbuf.u_kproc.kp_eproc.e_vm.vm_ssize)) ||
+ strcmp(p->p_comm, userbuf.u_kproc.kp_proc.p_comm)) {
+ error = EFAULT;
+ goto out;
+ }
+ }