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

Commit 6bcd0ff2 authored by Ken Chen's avatar Ken Chen Committed by Gerrit Code Review
Browse files

Merge "Not report DNS failures caused by network restriction errors" into main

parents 55525d1c b8d156e6
Loading
Loading
Loading
Loading
+20 −14
Original line number Original line Diff line number Diff line
@@ -322,9 +322,11 @@ void maybeLogQuery(int eventType, const android_net_context& netContext,


void reportDnsEvent(int eventType, const android_net_context& netContext, int latencyUs,
void reportDnsEvent(int eventType, const android_net_context& netContext, int latencyUs,
                    int returnCode, NetworkDnsEventReported& event, const std::string& query_name,
                    int returnCode, NetworkDnsEventReported& event, const std::string& query_name,
                    const std::vector<std::string>& ip_addrs = {}, int total_ip_addr_count = 0) {
                    bool skipStats, const std::vector<std::string>& ip_addrs = {},
    uint32_t rate =
                    int total_ip_addr_count = 0) {
            (query_name.ends_with(".local") && is_mdns_supported_network(netContext.dns_netid) &&
    int32_t rate =
            skipStats ? 0
            : (query_name.ends_with(".local") && is_mdns_supported_network(netContext.dns_netid) &&
               android::net::Experiments::getInstance()->getFlag("mdns_resolution", 1))
               android::net::Experiments::getInstance()->getFlag("mdns_resolution", 1))
                    ? getDnsEventSubsamplingRate(netContext.dns_netid, returnCode, true)
                    ? getDnsEventSubsamplingRate(netContext.dns_netid, returnCode, true)
                    : getDnsEventSubsamplingRate(netContext.dns_netid, returnCode, false);
                    : getDnsEventSubsamplingRate(netContext.dns_netid, returnCode, false);
@@ -903,7 +905,8 @@ void DnsProxyListener::GetAddrInfoHandler::run() {
    int32_t rv = 0;
    int32_t rv = 0;
    NetworkDnsEventReported event;
    NetworkDnsEventReported event;
    initDnsEvent(&event, mNetContext);
    initDnsEvent(&event, mNetContext);
    if (isUidNetworkingBlocked(mNetContext.uid, mNetContext.dns_netid)) {
    const bool isUidBlocked = isUidNetworkingBlocked(mNetContext.uid, mNetContext.dns_netid);
    if (isUidBlocked) {
        LOG(INFO) << "GetAddrInfoHandler::run: network access blocked";
        LOG(INFO) << "GetAddrInfoHandler::run: network access blocked";
        rv = EAI_FAIL;
        rv = EAI_FAIL;
    } else if (startQueryLimiter(uid)) {
    } else if (startQueryLimiter(uid)) {
@@ -951,7 +954,7 @@ void DnsProxyListener::GetAddrInfoHandler::run() {
    std::vector<std::string> ip_addrs;
    std::vector<std::string> ip_addrs;
    const int total_ip_addr_count = extractGetAddrInfoAnswers(result, &ip_addrs);
    const int total_ip_addr_count = extractGetAddrInfoAnswers(result, &ip_addrs);
    reportDnsEvent(INetdEventListener::EVENT_GETADDRINFO, mNetContext, latencyUs, rv, event, mHost,
    reportDnsEvent(INetdEventListener::EVENT_GETADDRINFO, mNetContext, latencyUs, rv, event, mHost,
                   ip_addrs, total_ip_addr_count);
                   isUidBlocked, ip_addrs, total_ip_addr_count);
    freeaddrinfo(result);
    freeaddrinfo(result);
}
}


@@ -1115,7 +1118,8 @@ void DnsProxyListener::ResNSendHandler::run() {
    int ansLen = -1;
    int ansLen = -1;
    NetworkDnsEventReported event;
    NetworkDnsEventReported event;
    initDnsEvent(&event, mNetContext);
    initDnsEvent(&event, mNetContext);
    if (isUidNetworkingBlocked(mNetContext.uid, mNetContext.dns_netid)) {
    const bool isUidBlocked = isUidNetworkingBlocked(mNetContext.uid, mNetContext.dns_netid);
    if (isUidBlocked) {
        LOG(INFO) << "ResNSendHandler::run: network access blocked";
        LOG(INFO) << "ResNSendHandler::run: network access blocked";
        ansLen = -ECONNREFUSED;
        ansLen = -ECONNREFUSED;
    } else if (startQueryLimiter(uid)) {
    } else if (startQueryLimiter(uid)) {
@@ -1146,7 +1150,7 @@ void DnsProxyListener::ResNSendHandler::run() {
        }
        }
        if (rr_type == ns_t_a || rr_type == ns_t_aaaa) {
        if (rr_type == ns_t_a || rr_type == ns_t_aaaa) {
            reportDnsEvent(INetdEventListener::EVENT_RES_NSEND, mNetContext, latencyUs,
            reportDnsEvent(INetdEventListener::EVENT_RES_NSEND, mNetContext, latencyUs,
                           resNSendToAiError(ansLen, rcode), event, rr_name);
                           resNSendToAiError(ansLen, rcode), event, rr_name, isUidBlocked);
        }
        }
        return;
        return;
    }
    }
@@ -1176,8 +1180,8 @@ void DnsProxyListener::ResNSendHandler::run() {
        const int total_ip_addr_count =
        const int total_ip_addr_count =
                extractResNsendAnswers(std::span(ansBuf.data(), ansLen), rr_type, &ip_addrs);
                extractResNsendAnswers(std::span(ansBuf.data(), ansLen), rr_type, &ip_addrs);
        reportDnsEvent(INetdEventListener::EVENT_RES_NSEND, mNetContext, latencyUs,
        reportDnsEvent(INetdEventListener::EVENT_RES_NSEND, mNetContext, latencyUs,
                       resNSendToAiError(ansLen, rcode), event, rr_name, ip_addrs,
                       resNSendToAiError(ansLen, rcode), event, rr_name, /*skipStats=*/false,
                       total_ip_addr_count);
                       ip_addrs, total_ip_addr_count);
    }
    }
}
}


@@ -1319,7 +1323,8 @@ void DnsProxyListener::GetHostByNameHandler::run() {
    int32_t rv = 0;
    int32_t rv = 0;
    NetworkDnsEventReported event;
    NetworkDnsEventReported event;
    initDnsEvent(&event, mNetContext);
    initDnsEvent(&event, mNetContext);
    if (isUidNetworkingBlocked(mNetContext.uid, mNetContext.dns_netid)) {
    const bool isUidBlocked = isUidNetworkingBlocked(mNetContext.uid, mNetContext.dns_netid);
    if (isUidBlocked) {
        LOG(INFO) << "GetHostByNameHandler::run: network access blocked";
        LOG(INFO) << "GetHostByNameHandler::run: network access blocked";
        rv = EAI_FAIL;
        rv = EAI_FAIL;
    } else if (startQueryLimiter(uid)) {
    } else if (startQueryLimiter(uid)) {
@@ -1363,7 +1368,7 @@ void DnsProxyListener::GetHostByNameHandler::run() {
    std::vector<std::string> ip_addrs;
    std::vector<std::string> ip_addrs;
    const int total_ip_addr_count = extractGetHostByNameAnswers(hp, &ip_addrs);
    const int total_ip_addr_count = extractGetHostByNameAnswers(hp, &ip_addrs);
    reportDnsEvent(INetdEventListener::EVENT_GETHOSTBYNAME, mNetContext, latencyUs, rv, event,
    reportDnsEvent(INetdEventListener::EVENT_GETHOSTBYNAME, mNetContext, latencyUs, rv, event,
                   mName, ip_addrs, total_ip_addr_count);
                   mName, isUidBlocked, ip_addrs, total_ip_addr_count);
}
}


std::string DnsProxyListener::GetHostByNameHandler::threadName() {
std::string DnsProxyListener::GetHostByNameHandler::threadName() {
@@ -1482,7 +1487,8 @@ void DnsProxyListener::GetHostByAddrHandler::run() {
    NetworkDnsEventReported event;
    NetworkDnsEventReported event;
    initDnsEvent(&event, mNetContext);
    initDnsEvent(&event, mNetContext);


    if (isUidNetworkingBlocked(mNetContext.uid, mNetContext.dns_netid)) {
    const bool isUidBlocked = isUidNetworkingBlocked(mNetContext.uid, mNetContext.dns_netid);
    if (isUidBlocked) {
        LOG(INFO) << "GetHostByAddrHandler::run: network access blocked";
        LOG(INFO) << "GetHostByAddrHandler::run: network access blocked";
        rv = EAI_FAIL;
        rv = EAI_FAIL;
    } else if (startQueryLimiter(uid)) {
    } else if (startQueryLimiter(uid)) {
@@ -1528,7 +1534,7 @@ void DnsProxyListener::GetHostByAddrHandler::run() {
    }
    }


    reportDnsEvent(INetdEventListener::EVENT_GETHOSTBYADDR, mNetContext, latencyUs, rv, event,
    reportDnsEvent(INetdEventListener::EVENT_GETHOSTBYADDR, mNetContext, latencyUs, rv, event,
                   (hp && hp->h_name) ? hp->h_name : "null", {}, 0);
                   (hp && hp->h_name) ? hp->h_name : "null", isUidBlocked, {}, 0);
}
}


std::string DnsProxyListener::GetHostByAddrHandler::threadName() {
std::string DnsProxyListener::GetHostByAddrHandler::threadName() {