syscall_emul: don't check host fd when allocating target fd
authorSteve Reinhardt <steve.reinhardt@amd.com>
Wed, 9 Dec 2015 19:47:43 +0000 (14:47 -0500)
committerSteve Reinhardt <steve.reinhardt@amd.com>
Wed, 9 Dec 2015 19:47:43 +0000 (14:47 -0500)
There's a well-meaning check in Process::allocFD() to return an invalid
target fd (-1) if the incoming host fd is -1.  However, this means that
emulated drivers, which want to allocate a target fd that doesn't
correspond to a host fd, can't use -1 to indicate an intentionally
invalid host fd.

It turns out the allocFD() check is redundant, as callers always test
the host fd for validity before calling.  Also, callers never test the
return value of allocFD() for validity, so even if the test failed,
it would likely have the undesirable result of returning -1 to the
target app as a file descriptor without setting errno.

Thus the check is pointless and is now getting in the way, so it seems
we should just get rid of it.

src/sim/process.cc

index def42c0b2cd71b98d53e5d362bfcea2a7447c95e..cbafb62feb58d2eac14fd1976560be401bbdf12c 100644 (file)
@@ -242,9 +242,6 @@ int
 Process::allocFD(int sim_fd, const string& filename, int flags, int mode,
                  bool pipe)
 {
-    if (sim_fd == -1)
-        return -1;
-
     for (int free_fd = 0; free_fd < fd_array->size(); free_fd++) {
         FDEntry *fde = getFDEntry(free_fd);
         if (fde->isFree()) {