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

Commit 49ed4069 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 9354100 from a6a0e3e7 to udc-release

Change-Id: I1151cd51a55cc4f8357aaef77fe32ecb3194b82b
parents f2c75dfa a6a0e3e7
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -614,11 +614,14 @@ status_t Parcel::appendFrom(const Parcel* parcel, size_t offset, size_t len) {
                if (status_t status = readInt32(&fdIndex); status != OK) {
                    return status;
                }
                const auto& oldFd = otherRpcFields->mFds->at(fdIndex);
                int oldFd = toRawFd(otherRpcFields->mFds->at(fdIndex));
                // To match kernel binder behavior, we always dup, even if the
                // FD was unowned in the source parcel.
                rpcFields->mFds->emplace_back(
                        base::unique_fd(fcntl(toRawFd(oldFd), F_DUPFD_CLOEXEC, 0)));
                int newFd = -1;
                if (status_t status = dupFileDescriptor(oldFd, &newFd); status != OK) {
                    ALOGW("Failed to duplicate file descriptor %d: %s", oldFd, strerror(-status));
                }
                rpcFields->mFds->emplace_back(base::unique_fd(newFd));
                // Fixup the index in the data.
                mDataPos = newDataPos + 4;
                if (status_t status = writeInt32(rpcFields->mFds->size() - 1); status != OK) {
+3 −5
Original line number Diff line number Diff line
@@ -160,7 +160,7 @@ class ToEmptyString {
template <typename _T>
std::string ToString(const _T& t) {
    if constexpr (details::ToEmptyString<_T>::value) {
        return "<unimplemented>";
        return "";
    } else if constexpr (std::is_same_v<bool, _T>) {
        return t ? "true" : "false";
    } else if constexpr (std::is_same_v<char16_t, _T>) {
@@ -176,11 +176,9 @@ std::string ToString(const _T& t) {
        return t;
#ifdef HAS_NDK_INTERFACE
    } else if constexpr (std::is_same_v<::ndk::SpAIBinder, _T>) {
        std::stringstream ss;
        ss << "binder:" << std::hex << t.get();
        return ss.str();
        return (t.get() == nullptr) ? "(null)" : "";
    } else if constexpr (std::is_same_v<::ndk::ScopedFileDescriptor, _T>) {
        return "fd:" + std::to_string(t.get());
        return (t.get() == -1) ? "(null)" : "";
#endif
#ifdef HAS_STRING16
    } else if constexpr (std::is_same_v<String16, _T>) {
+27 −0
Original line number Diff line number Diff line
@@ -913,6 +913,33 @@ TEST_P(BinderRpc, SendTooManyFiles) {
    EXPECT_EQ(status.transactionError(), BAD_VALUE) << status;
}

TEST_P(BinderRpc, AppendInvalidFd) {
    auto proc = createRpcTestSocketServerProcess({
            .clientFileDescriptorTransportMode = RpcSession::FileDescriptorTransportMode::UNIX,
            .serverSupportedFileDescriptorTransportModes =
                    {RpcSession::FileDescriptorTransportMode::UNIX},
    });

    int badFd = fcntl(STDERR_FILENO, F_DUPFD_CLOEXEC, 0);
    ASSERT_NE(badFd, -1);

    // Close the file descriptor so it becomes invalid for dup
    close(badFd);

    Parcel p1;
    p1.markForBinder(proc.rootBinder);
    p1.writeInt32(3);
    EXPECT_EQ(OK, p1.writeFileDescriptor(badFd, false));

    Parcel pRaw;
    pRaw.markForBinder(proc.rootBinder);
    EXPECT_EQ(OK, pRaw.appendFrom(&p1, 0, p1.dataSize()));

    pRaw.setDataPosition(0);
    EXPECT_EQ(3, pRaw.readInt32());
    ASSERT_EQ(-1, pRaw.readFileDescriptor());
}

TEST_P(BinderRpc, WorksWithLibbinderNdkPing) {
    if constexpr (!kEnableSharedLibs) {
        GTEST_SKIP() << "Test disabled because Binder was built as a static library";
+4 −0
Original line number Diff line number Diff line
@@ -120,3 +120,7 @@ static inline void __ignore_va_args__(...) {}
    do {                                                                 \
        TLOGE("android_errorWriteLog: tag:%x subTag:%s\n", tag, subTag); \
    } while (0)

extern "C" inline void __assert(const char* file, int line, const char* str) {
    LOG_ALWAYS_FATAL("%s:%d: assertion \"%s\" failed", file, line, str);
}
+0 −1
Original line number Diff line number Diff line
@@ -62,7 +62,6 @@ cc_defaults {
        "libutils",
        "libnativewindow",
        "libvndksupport",
        "libbufferhubqueue",
    ],
    header_libs: [
        "libdvr_headers",
Loading