forked from pool/systemd
52 lines
2.2 KiB
Diff
52 lines
2.2 KiB
Diff
|
From baf6a410b5bee7d45c26e9475796f1e9db201d77 Mon Sep 17 00:00:00 2001
|
||
|
From: Franck Bui <fbui@suse.com>
|
||
|
Date: Tue, 23 Mar 2021 09:09:01 +0100
|
||
|
Subject: [PATCH 1/1] Revert "resolved: gracefully handle with packets with too
|
||
|
large RR count"
|
||
|
|
||
|
This reverts commit c8b7432cba73a4215538726cd98da23a8de9b426.
|
||
|
|
||
|
[fbui: temporary workaround for bsc#1183745]
|
||
|
---
|
||
|
src/resolve/resolved-dns-packet.c | 16 +---------------
|
||
|
1 file changed, 1 insertion(+), 15 deletions(-)
|
||
|
|
||
|
diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c
|
||
|
index e97d9c6a12..90a40244b1 100644
|
||
|
--- a/src/resolve/resolved-dns-packet.c
|
||
|
+++ b/src/resolve/resolved-dns-packet.c
|
||
|
@@ -2210,18 +2210,6 @@ static int dns_packet_extract_answer(DnsPacket *p, DnsAnswer **ret_answer) {
|
||
|
if (r < 0)
|
||
|
return r;
|
||
|
|
||
|
- if (p->rindex == p->size) {
|
||
|
- /* If we reached the end of the packet already, but there are still more RRs
|
||
|
- * declared, then that's a corrupt packet. Let's accept the packet anyway, since it's
|
||
|
- * apparently a common bug in routers. Let's however suppress OPT support in this
|
||
|
- * case, so that we force the rest of the logic into lowest DNS baseline support. Or
|
||
|
- * to say this differently: if the DNS server doesn't even get the RR counts right,
|
||
|
- * it's highly unlikely it gets EDNS right. */
|
||
|
- log_debug("More resource records declared in packet than included, suppressing OPT.");
|
||
|
- bad_opt = true;
|
||
|
- break;
|
||
|
- }
|
||
|
-
|
||
|
/* Try to reduce memory usage a bit */
|
||
|
if (previous)
|
||
|
dns_resource_key_reduce(&rr->key, &previous->key);
|
||
|
@@ -2307,10 +2295,8 @@ static int dns_packet_extract_answer(DnsPacket *p, DnsAnswer **ret_answer) {
|
||
|
previous = dns_resource_record_ref(rr);
|
||
|
}
|
||
|
|
||
|
- if (bad_opt) {
|
||
|
+ if (bad_opt)
|
||
|
p->opt = dns_resource_record_unref(p->opt);
|
||
|
- p->opt_start = p->opt_size = SIZE_MAX;
|
||
|
- }
|
||
|
|
||
|
*ret_answer = TAKE_PTR(answer);
|
||
|
|
||
|
--
|
||
|
2.26.2
|
||
|
|