Those 4 memcpy()s are copying the things referenced by the old
filedesc to the new one. The things being copied are file*s,
not file**s. They're the same size anyway, but still...
Index: sys/kern/kern_descrip.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_descrip.c,v
retrieving revision 1.108
diff -u -p -r1.108 kern_descrip.c
--- sys/kern/kern_descrip.c 15 May 2014 03:52:25 -0000 1.108
+++ sys/kern/kern_descrip.c 15 Jun 2014 19:57:00 -0000
@@ -956,7 +956,7 @@ fdcopy(struct process *pr)
M_FILEDESC, M_WAITOK);
}
newfdp->fd_nfiles = i;
- memcpy(newfdp->fd_ofiles, fdp->fd_ofiles, i * sizeof(struct file **));
+ memcpy(newfdp->fd_ofiles, fdp->fd_ofiles, i * sizeof(struct file *));
memcpy(newfdp->fd_ofileflags, fdp->fd_ofileflags, i * sizeof(char));
memcpy(newfdp->fd_himap, fdp->fd_himap, NDHISLOTS(i) * sizeof(u_int));
memcpy(newfdp->fd_lomap, fdp->fd_lomap, NDLOSLOTS(i) * sizeof(u_int));