Loading libs/binder/RpcServer.cpp +5 −7 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ #include <thread> #include <vector> #include <android-base/hex.h> #include <android-base/scopeguard.h> #include <binder/Parcel.h> #include <binder/RpcServer.h> Loading Loading @@ -484,7 +483,7 @@ void RpcServer::establishConnection( // don't block if there is some entropy issue if (tries++ > 5) { ALOGE("Cannot find new address: %s", base::HexString(sessionId.data(), sessionId.size()).c_str()); HexString(sessionId.data(), sessionId.size()).c_str()); return; } Loading Loading @@ -536,7 +535,7 @@ void RpcServer::establishConnection( auto it = server->mSessions.find(sessionId); if (it == server->mSessions.end()) { ALOGE("Cannot add thread, no record of session with ID %s", base::HexString(sessionId.data(), sessionId.size()).c_str()); HexString(sessionId.data(), sessionId.size()).c_str()); return; } session = it->second; Loading Loading @@ -610,15 +609,14 @@ status_t RpcServer::setupRawSocketServer(unique_fd socket_fd) { void RpcServer::onSessionAllIncomingThreadsEnded(const sp<RpcSession>& session) { const std::vector<uint8_t>& id = session->mId; LOG_ALWAYS_FATAL_IF(id.empty(), "Server sessions must be initialized with ID"); LOG_RPC_DETAIL("Dropping session with address %s", base::HexString(id.data(), id.size()).c_str()); LOG_RPC_DETAIL("Dropping session with address %s", HexString(id.data(), id.size()).c_str()); RpcMutexLockGuard _l(mLock); auto it = mSessions.find(id); LOG_ALWAYS_FATAL_IF(it == mSessions.end(), "Bad state, unknown session id %s", base::HexString(id.data(), id.size()).c_str()); HexString(id.data(), id.size()).c_str()); LOG_ALWAYS_FATAL_IF(it->second != session, "Bad state, session has id mismatch %s", base::HexString(id.data(), id.size()).c_str()); HexString(id.data(), id.size()).c_str()); (void)mSessions.erase(it); } Loading libs/binder/RpcSession.cpp +2 −4 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ #include <string_view> #include <android-base/hex.h> #include <android-base/macros.h> #include <android-base/scopeguard.h> #include <binder/BpBinder.h> Loading Loading @@ -310,8 +309,7 @@ status_t RpcSession::readId() { status = state()->getSessionId(connection.get(), sp<RpcSession>::fromExisting(this), &mId); if (status != OK) return status; LOG_RPC_DETAIL("RpcSession %p has id %s", this, base::HexString(mId.data(), mId.size()).c_str()); LOG_RPC_DETAIL("RpcSession %p has id %s", this, HexString(mId.data(), mId.size()).c_str()); return OK; } Loading Loading @@ -709,7 +707,7 @@ status_t RpcSession::initAndAddConnection(RpcTransportFd fd, const std::vector<u std::nullopt, nullptr); if (sendSessionIdStatus != OK) { ALOGE("Could not write session ID ('%s') to socket: %s", base::HexString(sessionId.data(), sessionId.size()).c_str(), HexString(sessionId.data(), sessionId.size()).c_str(), statusToString(sendSessionIdStatus).c_str()); return sendSessionIdStatus; } Loading libs/binder/RpcState.cpp +2 −3 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ #include "RpcState.h" #include <android-base/hex.h> #include <android-base/macros.h> #include <android-base/scopeguard.h> #include <android-base/stringprintf.h> Loading Loading @@ -363,7 +362,7 @@ status_t RpcState::rpcSend( for (int i = 0; i < niovs; i++) { LOG_RPC_DETAIL("Sending %s (part %d of %d) on RpcTransport %p: %s", what, i + 1, niovs, connection->rpcTransport.get(), android::base::HexString(iovs[i].iov_base, iovs[i].iov_len).c_str()); HexString(iovs[i].iov_base, iovs[i].iov_len).c_str()); } if (status_t status = Loading Loading @@ -398,7 +397,7 @@ status_t RpcState::rpcRec( for (int i = 0; i < niovs; i++) { LOG_RPC_DETAIL("Received %s (part %d of %d) on RpcTransport %p: %s", what, i + 1, niovs, connection->rpcTransport.get(), android::base::HexString(iovs[i].iov_base, iovs[i].iov_len).c_str()); HexString(iovs[i].iov_base, iovs[i].iov_len).c_str()); } return OK; } Loading libs/binder/Utils.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include "Utils.h" #include <android-base/logging.h> #include <string.h> namespace android { Loading @@ -24,4 +25,22 @@ void zeroMemory(uint8_t* data, size_t size) { memset(data, 0, size); } std::string HexString(const void* bytes, size_t len) { CHECK(bytes != nullptr || len == 0) << bytes << " " << len; // b/132916539: Doing this the 'C way', std::setfill triggers ubsan implicit conversion const uint8_t* bytes8 = static_cast<const uint8_t*>(bytes); const char chars[] = "0123456789abcdef"; std::string result; result.resize(len * 2); for (size_t i = 0; i < len; i++) { const auto c = bytes8[i]; result[2 * i] = chars[c >> 4]; result[2 * i + 1] = chars[c & 0xf]; } return result; } } // namespace android libs/binder/Utils.h +6 −0 Original line number Diff line number Diff line Loading @@ -70,4 +70,10 @@ struct Span { } }; // Converts binary data into a hexString. // // Hex values are printed in order, e.g. 0xDEAD will result in 'adde' because // Android is little-endian. std::string HexString(const void* bytes, size_t len); } // namespace android Loading
libs/binder/RpcServer.cpp +5 −7 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ #include <thread> #include <vector> #include <android-base/hex.h> #include <android-base/scopeguard.h> #include <binder/Parcel.h> #include <binder/RpcServer.h> Loading Loading @@ -484,7 +483,7 @@ void RpcServer::establishConnection( // don't block if there is some entropy issue if (tries++ > 5) { ALOGE("Cannot find new address: %s", base::HexString(sessionId.data(), sessionId.size()).c_str()); HexString(sessionId.data(), sessionId.size()).c_str()); return; } Loading Loading @@ -536,7 +535,7 @@ void RpcServer::establishConnection( auto it = server->mSessions.find(sessionId); if (it == server->mSessions.end()) { ALOGE("Cannot add thread, no record of session with ID %s", base::HexString(sessionId.data(), sessionId.size()).c_str()); HexString(sessionId.data(), sessionId.size()).c_str()); return; } session = it->second; Loading Loading @@ -610,15 +609,14 @@ status_t RpcServer::setupRawSocketServer(unique_fd socket_fd) { void RpcServer::onSessionAllIncomingThreadsEnded(const sp<RpcSession>& session) { const std::vector<uint8_t>& id = session->mId; LOG_ALWAYS_FATAL_IF(id.empty(), "Server sessions must be initialized with ID"); LOG_RPC_DETAIL("Dropping session with address %s", base::HexString(id.data(), id.size()).c_str()); LOG_RPC_DETAIL("Dropping session with address %s", HexString(id.data(), id.size()).c_str()); RpcMutexLockGuard _l(mLock); auto it = mSessions.find(id); LOG_ALWAYS_FATAL_IF(it == mSessions.end(), "Bad state, unknown session id %s", base::HexString(id.data(), id.size()).c_str()); HexString(id.data(), id.size()).c_str()); LOG_ALWAYS_FATAL_IF(it->second != session, "Bad state, session has id mismatch %s", base::HexString(id.data(), id.size()).c_str()); HexString(id.data(), id.size()).c_str()); (void)mSessions.erase(it); } Loading
libs/binder/RpcSession.cpp +2 −4 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ #include <string_view> #include <android-base/hex.h> #include <android-base/macros.h> #include <android-base/scopeguard.h> #include <binder/BpBinder.h> Loading Loading @@ -310,8 +309,7 @@ status_t RpcSession::readId() { status = state()->getSessionId(connection.get(), sp<RpcSession>::fromExisting(this), &mId); if (status != OK) return status; LOG_RPC_DETAIL("RpcSession %p has id %s", this, base::HexString(mId.data(), mId.size()).c_str()); LOG_RPC_DETAIL("RpcSession %p has id %s", this, HexString(mId.data(), mId.size()).c_str()); return OK; } Loading Loading @@ -709,7 +707,7 @@ status_t RpcSession::initAndAddConnection(RpcTransportFd fd, const std::vector<u std::nullopt, nullptr); if (sendSessionIdStatus != OK) { ALOGE("Could not write session ID ('%s') to socket: %s", base::HexString(sessionId.data(), sessionId.size()).c_str(), HexString(sessionId.data(), sessionId.size()).c_str(), statusToString(sendSessionIdStatus).c_str()); return sendSessionIdStatus; } Loading
libs/binder/RpcState.cpp +2 −3 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ #include "RpcState.h" #include <android-base/hex.h> #include <android-base/macros.h> #include <android-base/scopeguard.h> #include <android-base/stringprintf.h> Loading Loading @@ -363,7 +362,7 @@ status_t RpcState::rpcSend( for (int i = 0; i < niovs; i++) { LOG_RPC_DETAIL("Sending %s (part %d of %d) on RpcTransport %p: %s", what, i + 1, niovs, connection->rpcTransport.get(), android::base::HexString(iovs[i].iov_base, iovs[i].iov_len).c_str()); HexString(iovs[i].iov_base, iovs[i].iov_len).c_str()); } if (status_t status = Loading Loading @@ -398,7 +397,7 @@ status_t RpcState::rpcRec( for (int i = 0; i < niovs; i++) { LOG_RPC_DETAIL("Received %s (part %d of %d) on RpcTransport %p: %s", what, i + 1, niovs, connection->rpcTransport.get(), android::base::HexString(iovs[i].iov_base, iovs[i].iov_len).c_str()); HexString(iovs[i].iov_base, iovs[i].iov_len).c_str()); } return OK; } Loading
libs/binder/Utils.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include "Utils.h" #include <android-base/logging.h> #include <string.h> namespace android { Loading @@ -24,4 +25,22 @@ void zeroMemory(uint8_t* data, size_t size) { memset(data, 0, size); } std::string HexString(const void* bytes, size_t len) { CHECK(bytes != nullptr || len == 0) << bytes << " " << len; // b/132916539: Doing this the 'C way', std::setfill triggers ubsan implicit conversion const uint8_t* bytes8 = static_cast<const uint8_t*>(bytes); const char chars[] = "0123456789abcdef"; std::string result; result.resize(len * 2); for (size_t i = 0; i < len; i++) { const auto c = bytes8[i]; result[2 * i] = chars[c >> 4]; result[2 * i + 1] = chars[c & 0xf]; } return result; } } // namespace android
libs/binder/Utils.h +6 −0 Original line number Diff line number Diff line Loading @@ -70,4 +70,10 @@ struct Span { } }; // Converts binary data into a hexString. // // Hex values are printed in order, e.g. 0xDEAD will result in 'adde' because // Android is little-endian. std::string HexString(const void* bytes, size_t len); } // namespace android