Fix dup() of 9ns FDs
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 16 Oct 2017 17:49:57 +0000 (13:49 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 16 Oct 2017 17:49:57 +0000 (13:49 -0400)
commit59d059ae6badc04c957eddae95053ec4b777ecbd
treeff4b2cdc6a3d78856047c5c22665e7ca703cfc67
parent6e599eba557e09f10d2e035e4d0c583048f49218
Fix dup() of 9ns FDs

Glibc uses dup() to implement dup2(), by way of sysdeps/posix/dup2.c.  VFS
dup() was handling the low_fd argument, but 9ns wasn't.  The fix is to
propagate the low_fd (and must_use_low) down through newfd() to
insert_obj_fdt().

Note that fcntl's dup() doesn't force us to use the fd - it's a hint.  The
bigger issue is that glibc's implementation of dup2 might fail; a
concurrent thread could open newfd.  If this is an issue, we'll need an
in-kernel version of dup2().

Fixes brho/akaros#41.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/ns.h
kern/src/ns/sysfile.c
kern/src/syscall.c
user/utest/file-posix.c