forked from coolsnowwolf/lede
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
dnsmasq: rewrite config on host name modification
- Loading branch information
1 parent
d1a4dbb
commit 84bc8c0
Showing
4 changed files
with
80 additions
and
29 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
package/network/services/dnsmasq/patches/250-Fix-infinite-retries-in-strict-order-mode.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
From ef3d137a646fa8309e1ff5184e3e145eef40cc4d Mon Sep 17 00:00:00 2001 | ||
From: Simon Kelley <[email protected]> | ||
Date: Tue, 5 Dec 2017 22:37:29 +0000 | ||
Subject: [PATCH] Fix infinite retries in strict-order mode. | ||
|
||
If all configured dns servers return refused in | ||
response to a query; dnsmasq will end up in an infinite loop | ||
retransmitting the dns query resulting into high CPU load. | ||
Problem is caused by the dns refuse retransmission logic which does | ||
not check for the end of a dns server list iteration in strict mode. | ||
Having one configured dns server returning a refused reply easily | ||
triggers this problem in strict order mode. This was introduced in | ||
9396752c115b3ab733fa476b30da73237e12e7ba | ||
|
||
Thanks to Hans Dedecker <[email protected]> for spotting this | ||
and the initial patch. | ||
--- | ||
src/forward.c | 14 ++++++++++++-- | ||
1 file changed, 12 insertions(+), 2 deletions(-) | ||
|
||
--- a/src/forward.c | ||
+++ b/src/forward.c | ||
@@ -797,10 +797,20 @@ void reply_query(int fd, int family, tim | ||
unsigned char *pheader; | ||
size_t plen; | ||
int is_sign; | ||
- | ||
+ | ||
+ /* In strict order mode, there must be a server later in the chain | ||
+ left to send to, otherwise without the forwardall mechanism, | ||
+ code further on will cycle around the list forwever if they | ||
+ all return REFUSED. Note that server is always non-NULL before | ||
+ this executes. */ | ||
+ if (option_bool(OPT_ORDER)) | ||
+ for (server = forward->sentto->next; server; server = server->next) | ||
+ if (!(server->flags & (SERV_LITERAL_ADDRESS | SERV_HAS_DOMAIN | SERV_FOR_NODOTS | SERV_NO_ADDR | SERV_LOOP))) | ||
+ break; | ||
+ | ||
/* recreate query from reply */ | ||
pheader = find_pseudoheader(header, (size_t)n, &plen, NULL, &is_sign, NULL); | ||
- if (!is_sign) | ||
+ if (!is_sign && server) | ||
{ | ||
header->ancount = htons(0); | ||
header->nscount = htons(0); |