Need to dup file descriptor when reading from the binder for native handles

When reading a native handle that has passed through the binder,
the fds have to be duped to prevent them from getting closed when the binder
object is destructed.

Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
diff --git a/libs/utils/Parcel.cpp b/libs/utils/Parcel.cpp
index 0eba0b0..2962b25 100644
--- a/libs/utils/Parcel.cpp
+++ b/libs/utils/Parcel.cpp
@@ -945,14 +945,13 @@
             return 0;
         }
     }
-    
     for (int i=0 ; err==NO_ERROR && i<numFds ; i++) {
-        h->data[i] = readFileDescriptor();
+        h->data[i] = dup(readFileDescriptor());
         if (h->data[i] < 0) err = BAD_VALUE;
     }
-    
+
     err = read(h->data + numFds, sizeof(int)*numInts);
-    
+
     if (err != NO_ERROR) {
         if (alloc == 0) {
             free(h);