SHA256
1
0
forked from pool/systemd
systemd/0001-Revert-resolved-gracefully-handle-with-packets-with-.patch
Franck Bui 19b66c67b1 - Add 0001-Revert-resolved-gracefully-handle-with-packets-with-.patch
Temporary workaround for bsc#1183745 (upstream issue 18917) until an
  actual fix is found.

OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=1144
2021-03-24 07:19:48 +00:00

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