]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: make counter for redirects smaller
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 14 May 2021 09:20:18 +0000 (11:20 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 14 May 2021 14:26:52 +0000 (16:26 +0200)
It can never go above 16, so let's use a narrower type.

Order will be adjusted later to remove holes.

src/resolve/resolved-dns-query.c
src/resolve/resolved-dns-query.h

index beb20592bd1016648041c887dd205a1f52b1d189..d1bb6862544d959233f4860c685013e748c127da 100644 (file)
 
 #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)
index be9b5fa548876aaf4f148b22acd4c6286b74a9b0..fcc57a0e0d21219c5d2dd51d7ee319da61d36d8f 100644 (file)
@@ -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