Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a69abc99 authored by Steven Moreland's avatar Steven Moreland Committed by android-build-merger
Browse files

Merge "libbinder: detach ParcelFileDescriptor comm" am: a6d2152f am: ae209feb

am: ba4216a1

Change-Id: I537ac5950faaf330c903ad1435f85904b0d8e48d
parents 8259ea2b ba4216a1
Loading
Loading
Loading
Loading
+24 −2
Original line number Diff line number Diff line
@@ -2245,8 +2245,30 @@ int Parcel::readParcelFileDescriptor() const
    int32_t hasComm = readInt32();
    int fd = readFileDescriptor();
    if (hasComm != 0) {
        // skip
        readFileDescriptor();
        // detach (owned by the binder driver)
        int comm = readFileDescriptor();

        // warning: this must be kept in sync with:
        // frameworks/base/core/java/android/os/ParcelFileDescriptor.java
        enum ParcelFileDescriptorStatus {
            DETACHED = 2,
        };

#if BYTE_ORDER == BIG_ENDIAN
        const int32_t message = ParcelFileDescriptorStatus::DETACHED;
#endif
#if BYTE_ORDER == LITTLE_ENDIAN
        const int32_t message = __builtin_bswap32(ParcelFileDescriptorStatus::DETACHED);
#endif

        ssize_t written = TEMP_FAILURE_RETRY(
            ::write(comm, &message, sizeof(message)));

        if (written == -1 || written != sizeof(message)) {
            ALOGW("Failed to detach ParcelFileDescriptor written: %zd err: %s",
                written, strerror(errno));
            return BAD_TYPE;
        }
    }
    return fd;
}