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

Commit 44a6f017 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Make change and version bump to q_resolv_aml_292000000 for mainline module file: apex/manifest.json

Change-Id: I31b9dee9283bed4657f8df7da7ef795eae7b5ec1
parents f78bd6ac 86944f3a
Loading
Loading
Loading
Loading
+9 −8
Original line number Original line Diff line number Diff line
@@ -51,6 +51,7 @@ cc_library {
        "res_query.cpp",
        "res_query.cpp",
        "res_send.cpp",
        "res_send.cpp",
        "res_stats.cpp",
        "res_stats.cpp",
        "util.cpp",
        "Dns64Configuration.cpp",
        "Dns64Configuration.cpp",
        "DnsProxyListener.cpp",
        "DnsProxyListener.cpp",
        "DnsResolver.cpp",
        "DnsResolver.cpp",
@@ -69,7 +70,7 @@ cc_library {
    // Link most things statically to minimize our dependence on system ABIs.
    // Link most things statically to minimize our dependence on system ABIs.
    stl: "libc++_static",
    stl: "libc++_static",
    static_libs: [
    static_libs: [
        "dnsresolver_aidl_interface-ndk_platform",
        "dnsresolver_aidl_interface-unstable-ndk_platform",
        "libbase",
        "libbase",
        "libcutils",
        "libcutils",
        "libjsoncpp",
        "libjsoncpp",
@@ -80,7 +81,7 @@ cc_library {
        "libstatssocket",
        "libstatssocket",
        "libsysutils",
        "libsysutils",
        "libutils",  // Used by libstatslog_resolv
        "libutils",  // Used by libstatslog_resolv
        "netd_event_listener_interface-V1-ndk_platform",
        "netd_event_listener_interface-ndk_platform",
        "server_configurable_flags",
        "server_configurable_flags",
        "stats_proto",
        "stats_proto",
    ],
    ],
@@ -174,7 +175,7 @@ cc_test {
        "libutils",
        "libutils",
    ],
    ],
    static_libs: [
    static_libs: [
        "dnsresolver_aidl_interface-cpp",
        "dnsresolver_aidl_interface-unstable-cpp",
        "libbase",
        "libbase",
        "libgmock",
        "libgmock",
        "libnetd_test_dnsresponder",
        "libnetd_test_dnsresponder",
@@ -183,8 +184,8 @@ cc_test {
        "libnetd_test_tun_interface",
        "libnetd_test_tun_interface",
        "libnetd_test_utils",
        "libnetd_test_utils",
        "libnetdutils",
        "libnetdutils",
        "netd_aidl_interface-V2-cpp",
        "netd_aidl_interface-cpp",
        "netd_event_listener_interface-V1-cpp",
        "netd_event_listener_interface-cpp",
    ],
    ],
    compile_multilib: "both",
    compile_multilib: "both",
    sanitize: {
    sanitize: {
@@ -213,9 +214,9 @@ cc_test {
        "libbinder_ndk",
        "libbinder_ndk",
    ],
    ],
    static_libs: [
    static_libs: [
        "dnsresolver_aidl_interface-V2-cpp",
        "dnsresolver_aidl_interface-cpp",
        "dnsresolver_aidl_interface-V2-ndk_platform",
        "dnsresolver_aidl_interface-ndk_platform",
        "netd_event_listener_interface-V1-ndk_platform",
        "netd_event_listener_interface-ndk_platform",
        "libgmock",
        "libgmock",
        "liblog",
        "liblog",
        "libnetd_resolv",
        "libnetd_resolv",
+25 −5
Original line number Original line Diff line number Diff line
@@ -535,6 +535,13 @@ DnsProxyListener::GetAddrInfoHandler::~GetAddrInfoHandler() {
    free(mHints);
    free(mHints);
}
}


static bool evaluate_domain_name(const android_net_context &netcontext,
                                 const char *host) {
    if (!gResNetdCallbacks.evaluate_domain_name)
        return true;
    return gResNetdCallbacks.evaluate_domain_name(netcontext, host);
}

static bool sendBE32(SocketClient* c, uint32_t data) {
static bool sendBE32(SocketClient* c, uint32_t data) {
    uint32_t be_data = htonl(data);
    uint32_t be_data = htonl(data);
    return c->sendData(&be_data, sizeof(be_data)) == 0;
    return c->sendData(&be_data, sizeof(be_data)) == 0;
@@ -672,7 +679,12 @@ void DnsProxyListener::GetAddrInfoHandler::run() {
    NetworkDnsEventReported event;
    NetworkDnsEventReported event;
    initDnsEvent(&event);
    initDnsEvent(&event);
    if (queryLimiter.start(uid)) {
    if (queryLimiter.start(uid)) {
        rv = resolv_getaddrinfo(mHost, mService, mHints, &mNetContext, &result, &event);
        if (evaluate_domain_name(mNetContext, mHost)) {
            rv = resolv_getaddrinfo(mHost, mService, mHints, &mNetContext, &result,
                                    &event);
        } else {
            rv = EAI_SYSTEM;
        }
        queryLimiter.finish(uid);
        queryLimiter.finish(uid);
    } else {
    } else {
        // Note that this error code is currently not passed down to the client.
        // Note that this error code is currently not passed down to the client.
@@ -887,8 +899,12 @@ void DnsProxyListener::ResNSendHandler::run() {
    NetworkDnsEventReported event;
    NetworkDnsEventReported event;
    initDnsEvent(&event);
    initDnsEvent(&event);
    if (queryLimiter.start(uid)) {
    if (queryLimiter.start(uid)) {
        if (evaluate_domain_name(mNetContext, rr_name.c_str())) {
            nsendAns = resolv_res_nsend(&mNetContext, msg.data(), msgLen, ansBuf.data(), MAXPACKET,
            nsendAns = resolv_res_nsend(&mNetContext, msg.data(), msgLen, ansBuf.data(), MAXPACKET,
                                        &rcode, static_cast<ResNsendFlags>(mFlags), &event);
                                        &rcode, static_cast<ResNsendFlags>(mFlags), &event);
        } else {
            nsendAns = -EAI_SYSTEM;
        }
        queryLimiter.finish(uid);
        queryLimiter.finish(uid);
    } else {
    } else {
        LOG(WARNING) << "ResNSendHandler::run: resnsend: from UID " << uid
        LOG(WARNING) << "ResNSendHandler::run: resnsend: from UID " << uid
@@ -1080,8 +1096,12 @@ void DnsProxyListener::GetHostByNameHandler::run() {
    NetworkDnsEventReported event;
    NetworkDnsEventReported event;
    initDnsEvent(&event);
    initDnsEvent(&event);
    if (queryLimiter.start(uid)) {
    if (queryLimiter.start(uid)) {
        if (evaluate_domain_name(mNetContext, mName)) {
            rv = resolv_gethostbyname(mName, mAf, &hbuf, tmpbuf, sizeof tmpbuf, &mNetContext, &hp,
            rv = resolv_gethostbyname(mName, mAf, &hbuf, tmpbuf, sizeof tmpbuf, &mNetContext, &hp,
                                      &event);
                                      &event);
        } else {
            rv = EAI_SYSTEM;
        }
        queryLimiter.finish(uid);
        queryLimiter.finish(uid);
    } else {
    } else {
        rv = EAI_MEMORY;
        rv = EAI_MEMORY;
+1 −0
Original line number Original line Diff line number Diff line
@@ -38,6 +38,7 @@ bool resolv_init(const ResolverNetdCallbacks* callbacks) {
    gResNetdCallbacks.log = callbacks->log;
    gResNetdCallbacks.log = callbacks->log;
    if (gApiLevel >= 30) {
    if (gApiLevel >= 30) {
        gResNetdCallbacks.tagSocket = callbacks->tagSocket;
        gResNetdCallbacks.tagSocket = callbacks->tagSocket;
        gResNetdCallbacks.evaluate_domain_name = callbacks->evaluate_domain_name;
    }
    }
    android::net::gDnsResolv = android::net::DnsResolver::getInstance();
    android::net::gDnsResolv = android::net::DnsResolver::getInstance();
    return android::net::gDnsResolv->start();
    return android::net::gDnsResolv->start();
+51 −0
Original line number Original line Diff line number Diff line
@@ -97,6 +97,7 @@ int PrivateDnsConfiguration::set(int32_t netId, uint32_t mark,
        mPrivateDnsModes[netId] = PrivateDnsMode::OFF;
        mPrivateDnsModes[netId] = PrivateDnsMode::OFF;
        mPrivateDnsTransports.erase(netId);
        mPrivateDnsTransports.erase(netId);
        resolv_stats_set_servers_for_dot(netId, {});
        resolv_stats_set_servers_for_dot(netId, {});
        mPrivateDnsValidateThreads.erase(netId);
        return 0;
        return 0;
    }
    }


@@ -155,6 +156,7 @@ void PrivateDnsConfiguration::clear(unsigned netId) {
    std::lock_guard guard(mPrivateDnsLock);
    std::lock_guard guard(mPrivateDnsLock);
    mPrivateDnsModes.erase(netId);
    mPrivateDnsModes.erase(netId);
    mPrivateDnsTransports.erase(netId);
    mPrivateDnsTransports.erase(netId);
    mPrivateDnsValidateThreads.erase(netId);
}
}


void PrivateDnsConfiguration::validatePrivateDnsProvider(const DnsTlsServer& server,
void PrivateDnsConfiguration::validatePrivateDnsProvider(const DnsTlsServer& server,
@@ -163,6 +165,10 @@ void PrivateDnsConfiguration::validatePrivateDnsProvider(const DnsTlsServer& ser
    tracker[server] = Validation::in_process;
    tracker[server] = Validation::in_process;
    LOG(DEBUG) << "Server " << addrToString(&server.ss) << " marked as in_process on netId "
    LOG(DEBUG) << "Server " << addrToString(&server.ss) << " marked as in_process on netId "
               << netId << ". Tracker now has size " << tracker.size();
               << netId << ". Tracker now has size " << tracker.size();
    // This judge must be after "tracker[server] = Validation::in_process;"
    if (!needValidateThread(server, netId)) {
        return;
    }


    // Note that capturing |server| and |netId| in this lambda create copies.
    // Note that capturing |server| and |netId| in this lambda create copies.
    std::thread validate_thread([this, server, netId, mark] {
    std::thread validate_thread([this, server, netId, mark] {
@@ -205,6 +211,7 @@ void PrivateDnsConfiguration::validatePrivateDnsProvider(const DnsTlsServer& ser
                break;
                break;
            }
            }
        }
        }
        this->cleanValidateThreadTracker(server, netId);
    });
    });
    validate_thread.detach();
    validate_thread.detach();
}
}
@@ -279,6 +286,50 @@ bool PrivateDnsConfiguration::recordPrivateDnsValidation(const DnsTlsServer& ser
    return reevaluationStatus;
    return reevaluationStatus;
}
}


bool PrivateDnsConfiguration::needValidateThread(const DnsTlsServer& server, unsigned netId)
        REQUIRES(mPrivateDnsLock) {
    // Create the thread tracker if it was not present
    auto threadPair = mPrivateDnsValidateThreads.find(netId);
    if (threadPair == mPrivateDnsValidateThreads.end()) {
        // No thread tracker yet for this netId.
        bool added;
        std::tie(threadPair, added) = mPrivateDnsValidateThreads.emplace(netId, ThreadTracker());
        if (!added) {
            LOG(ERROR) << "Memory error while needValidateThread for netId " << netId;
            return true;
        }
    }
    auto& threadTracker = threadPair->second;
    if (threadTracker.count(server)) {
        LOG(DEBUG) << "Server " << addrToString(&(server.ss))
                   << " validate thread is already running. Thread tracker now has size "
                   << threadTracker.size();
        return false;
    } else {
        threadTracker.insert(server);
        LOG(DEBUG) << "Server " << addrToString(&(server.ss))
                   << " validate thread is not running. Thread tracker now has size "
                   << threadTracker.size();
        return true;
    }
}

void PrivateDnsConfiguration::cleanValidateThreadTracker(const DnsTlsServer& server,
                                                         unsigned netId) {
    std::lock_guard<std::mutex> guard(mPrivateDnsLock);
    LOG(DEBUG) << "cleanValidateThreadTracker Server " << addrToString(&(server.ss))
               << " validate thread is stopped.";

    auto threadPair = mPrivateDnsValidateThreads.find(netId);
    if (threadPair != mPrivateDnsValidateThreads.end()) {
        auto& threadTracker = threadPair->second;
        threadTracker.erase(server);
        LOG(DEBUG) << "Server " << addrToString(&(server.ss))
                   << " validate thread is stopped. Thread tracker now has size "
                   << threadTracker.size();
    }
}

// Start validation for newly added servers as well as any servers that have
// Start validation for newly added servers as well as any servers that have
// landed in Validation::fail state. Note that servers that have failed
// landed in Validation::fail state. Note that servers that have failed
// multiple validation attempts but for which there is still a validating
// multiple validation attempts but for which there is still a validating
+5 −0
Original line number Original line Diff line number Diff line
@@ -62,12 +62,16 @@ class PrivateDnsConfiguration {


  private:
  private:
    typedef std::map<DnsTlsServer, Validation, AddressComparator> PrivateDnsTracker;
    typedef std::map<DnsTlsServer, Validation, AddressComparator> PrivateDnsTracker;
    typedef std::set<DnsTlsServer, AddressComparator> ThreadTracker;


    void validatePrivateDnsProvider(const DnsTlsServer& server, PrivateDnsTracker& tracker,
    void validatePrivateDnsProvider(const DnsTlsServer& server, PrivateDnsTracker& tracker,
                                    unsigned netId, uint32_t mark) REQUIRES(mPrivateDnsLock);
                                    unsigned netId, uint32_t mark) REQUIRES(mPrivateDnsLock);


    bool recordPrivateDnsValidation(const DnsTlsServer& server, unsigned netId, bool success);
    bool recordPrivateDnsValidation(const DnsTlsServer& server, unsigned netId, bool success);


    bool needValidateThread(const DnsTlsServer& server, unsigned netId) REQUIRES(mPrivateDnsLock);
    void cleanValidateThreadTracker(const DnsTlsServer& server, unsigned netId);

    // Start validation for newly added servers as well as any servers that have
    // Start validation for newly added servers as well as any servers that have
    // landed in Validation::fail state. Note that servers that have failed
    // landed in Validation::fail state. Note that servers that have failed
    // multiple validation attempts but for which there is still a validating
    // multiple validation attempts but for which there is still a validating
@@ -79,6 +83,7 @@ class PrivateDnsConfiguration {
    // Structure for tracking the validation status of servers on a specific netId.
    // Structure for tracking the validation status of servers on a specific netId.
    // Using the AddressComparator ensures at most one entry per IP address.
    // Using the AddressComparator ensures at most one entry per IP address.
    std::map<unsigned, PrivateDnsTracker> mPrivateDnsTransports GUARDED_BY(mPrivateDnsLock);
    std::map<unsigned, PrivateDnsTracker> mPrivateDnsTransports GUARDED_BY(mPrivateDnsLock);
    std::map<unsigned, ThreadTracker> mPrivateDnsValidateThreads GUARDED_BY(mPrivateDnsLock);
};
};


extern PrivateDnsConfiguration gPrivateDnsConfiguration;
extern PrivateDnsConfiguration gPrivateDnsConfiguration;
Loading