From: Zbigniew Jędrzejewski-Szmek Date: Fri, 14 May 2021 09:20:18 +0000 (+0200) Subject: resolved: make counter for redirects smaller X-Git-Tag: v249-rc1~203^2~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b4d1227858fb507b3bc8dc0a5ba2e4fdc0d2606f;p=thirdparty%2Fsystemd.git resolved: make counter for redirects smaller It can never go above 16, so let's use a narrower type. Order will be adjusted later to remove holes. --- diff --git a/src/resolve/resolved-dns-query.c b/src/resolve/resolved-dns-query.c index beb20592bd1..d1bb6862544 100644 --- a/src/resolve/resolved-dns-query.c +++ b/src/resolve/resolved-dns-query.c @@ -12,8 +12,10 @@ #define QUERIES_MAX 2048 #define AUXILIARY_QUERIES_MAX 64 +#define CNAME_REDIRECTS_MAX 16 assert_cc(AUXILIARY_QUERIES_MAX < UINT8_MAX); +assert_cc(CNAME_REDIRECTS_MAX < UINT8_MAX); static int dns_query_candidate_new(DnsQueryCandidate **ret, DnsQuery *q, DnsScope *s) { DnsQueryCandidate *c; @@ -984,9 +986,9 @@ static int dns_query_cname_redirect(DnsQuery *q, const DnsResourceRecord *cname) assert(q); - q->n_cname_redirects++; - if (q->n_cname_redirects > CNAME_REDIRECT_MAX) + if (q->n_cname_redirects >= CNAME_REDIRECTS_MAX) return -ELOOP; + q->n_cname_redirects++; r = dns_question_cname_redirect(q->question_idna, cname, &nq_idna); if (r < 0) diff --git a/src/resolve/resolved-dns-query.h b/src/resolve/resolved-dns-query.h index be9b5fa5488..fcc57a0e0d2 100644 --- a/src/resolve/resolved-dns-query.h +++ b/src/resolve/resolved-dns-query.h @@ -64,7 +64,7 @@ struct DnsQuery { int ifindex; DnsTransactionState state; - unsigned n_cname_redirects; + uint8_t n_cname_redirects; LIST_HEAD(DnsQueryCandidate, candidates); sd_event_source *timeout_event_source; @@ -154,5 +154,3 @@ static inline uint64_t dns_query_reply_flags_make(DnsQuery *q) { dns_query_fully_confidential(q)) | (q->answer_query_flags & (SD_RESOLVED_FROM_MASK|SD_RESOLVED_SYNTHETIC)); } - -#define CNAME_REDIRECT_MAX 16