Blame SOURCES/bind-9.11-CVE-2019-6471.patch

9f77a9
From 66c074b707318005d50f14910678ba451877a7a6 Mon Sep 17 00:00:00 2001
9f77a9
From: Petr Mensik <pemensik@redhat.com>
9f77a9
Date: Wed, 19 Jun 2019 12:28:08 +0200
9f77a9
Subject: [PATCH] Fix CVE-2019-6471
9f77a9
9f77a9
5244.	[security]	Fixed a race condition in dns_dispatch_getnext()
9f77a9
			that could cause an assertion failure if a
9f77a9
			significant number of incoming packets were
9f77a9
			rejected. (CVE-2019-6471) [GL #942]
9f77a9
---
9f77a9
 lib/dns/dispatch.c | 10 +++++++---
9f77a9
 1 file changed, 7 insertions(+), 3 deletions(-)
9f77a9
9f77a9
diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c
9f77a9
index 321459ebcb..ae5c9c0fc7 100644
9f77a9
--- a/lib/dns/dispatch.c
9f77a9
+++ b/lib/dns/dispatch.c
9f77a9
@@ -3419,13 +3419,14 @@ dns_dispatch_getnext(dns_dispentry_t *resp, dns_dispatchevent_t **sockevent) {
9f77a9
 	disp = resp->disp;
9f77a9
 	REQUIRE(VALID_DISPATCH(disp));
9f77a9
 
9f77a9
-	REQUIRE(resp->item_out == ISC_TRUE);
9f77a9
-	resp->item_out = ISC_FALSE;
9f77a9
-
9f77a9
 	ev = *sockevent;
9f77a9
 	*sockevent = NULL;
9f77a9
 
9f77a9
 	LOCK(&disp->lock);
9f77a9
+
9f77a9
+	REQUIRE(resp->item_out == ISC_TRUE);
9f77a9
+	resp->item_out = ISC_FALSE;
9f77a9
+
9f77a9
 	if (ev->buffer.base != NULL)
9f77a9
 		free_buffer(disp, ev->buffer.base, ev->buffer.length);
9f77a9
 	free_devent(disp, ev);
9f77a9
@@ -3570,6 +3571,9 @@ dns_dispatch_removeresponse(dns_dispentry_t **resp,
9f77a9
 		isc_task_send(disp->task[0], &disp->ctlevent);
9f77a9
 }
9f77a9
 
9f77a9
+/*
9f77a9
+ * disp must be locked.
9f77a9
+ */
9f77a9
 static void
9f77a9
 do_cancel(dns_dispatch_t *disp) {
9f77a9
 	dns_dispatchevent_t *ev;
9f77a9
-- 
9f77a9
2.20.1
9f77a9