Skip to content

Commit d3c9ef5

Browse files
Revert "net: send EDNS(0) packet length in DNS query"
This reverts https://go.dev/cl/385035. For 1.18 we will use a simple change to increase the accepted DNS packet size, to handle what appear to be broken resolvers that don't honor the 512 byte limit. For 1.19 we will restore CL 385035 to make a proper EDNS request, so that it has more testing time before it goes out in a release. For #6464 For #21160 For #44135 For #51127 For #51153 Change-Id: Ie4a0eb85ca0a6a73bee5cd4cfc6b7d2a15ef259f Reviewed-on: https://go-review.googlesource.com/c/go/+/386014 Trust: Ian Lance Taylor <[email protected]> Reviewed-by: Matthew Dempsky <[email protected]> Reviewed-by: Damien Neil <[email protected]>
1 parent d199cef commit d3c9ef5

File tree

2 files changed

+2
-74
lines changed

2 files changed

+2
-74
lines changed

src/net/dnsclient_unix.go

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ const (
3030
// to be used as a useTCP parameter to exchange
3131
useTCPOnly = true
3232
useUDPOrTCP = false
33-
34-
// Requested DNS packet size.
35-
// Value taken from https://dnsflagday.net/2020/.
36-
maxDNSPacketSize = 1232
3733
)
3834

3935
var (
@@ -60,19 +56,6 @@ func newRequest(q dnsmessage.Question) (id uint16, udpReq, tcpReq []byte, err er
6056
if err := b.Question(q); err != nil {
6157
return 0, nil, nil, err
6258
}
63-
64-
// Accept packets up to maxDNSPacketSize. RFC 6891.
65-
if err := b.StartAdditionals(); err != nil {
66-
return 0, nil, nil, err
67-
}
68-
var rh dnsmessage.ResourceHeader
69-
if err := rh.SetEDNS0(maxDNSPacketSize, dnsmessage.RCodeSuccess, false); err != nil {
70-
return 0, nil, nil, err
71-
}
72-
if err := b.OPTResource(rh, dnsmessage.OPTResource{}); err != nil {
73-
return 0, nil, nil, err
74-
}
75-
7659
tcpReq, err = b.Finish()
7760
udpReq = tcpReq[2:]
7861
l := len(tcpReq) - 2
@@ -99,7 +82,7 @@ func dnsPacketRoundTrip(c Conn, id uint16, query dnsmessage.Question, b []byte)
9982
return dnsmessage.Parser{}, dnsmessage.Header{}, err
10083
}
10184

102-
b = make([]byte, maxDNSPacketSize)
85+
b = make([]byte, 512) // see RFC 1035
10386
for {
10487
n, err := c.Read(b)
10588
if err != nil {

src/net/dnsclient_unix_test.go

Lines changed: 1 addition & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,7 @@ func (f *fakeDNSPacketConn) Close() error {
881881
func TestIgnoreDNSForgeries(t *testing.T) {
882882
c, s := Pipe()
883883
go func() {
884-
b := make([]byte, maxDNSPacketSize)
884+
b := make([]byte, 512)
885885
n, err := s.Read(b)
886886
if err != nil {
887887
t.Error(err)
@@ -2161,58 +2161,3 @@ func TestRootNS(t *testing.T) {
21612161
t.Errorf("records = [%v]; want [%v]", strings.Join(records, " "), want[0])
21622162
}
21632163
}
2164-
2165-
// Test that we advertise support for a larger DNS packet size.
2166-
// This isn't a great test as it just tests the dnsmessage package
2167-
// against itself.
2168-
func TestDNSPacketSize(t *testing.T) {
2169-
fake := fakeDNSServer{
2170-
rh: func(_, _ string, q dnsmessage.Message, _ time.Time) (dnsmessage.Message, error) {
2171-
if len(q.Additionals) == 0 {
2172-
t.Error("missing EDNS record")
2173-
} else if opt, ok := q.Additionals[0].Body.(*dnsmessage.OPTResource); !ok {
2174-
t.Errorf("additional record type %T, expected OPTResource", q.Additionals[0])
2175-
} else if len(opt.Options) != 0 {
2176-
t.Errorf("found %d Options, expected none", len(opt.Options))
2177-
} else {
2178-
got := int(q.Additionals[0].Header.Class)
2179-
t.Logf("EDNS packet size == %d", got)
2180-
if got != maxDNSPacketSize {
2181-
t.Errorf("EDNS packet size == %d, want %d", got, maxDNSPacketSize)
2182-
}
2183-
}
2184-
2185-
// Hand back a dummy answer to verify that
2186-
// LookupIPAddr completes.
2187-
r := dnsmessage.Message{
2188-
Header: dnsmessage.Header{
2189-
ID: q.Header.ID,
2190-
Response: true,
2191-
RCode: dnsmessage.RCodeSuccess,
2192-
},
2193-
Questions: q.Questions,
2194-
}
2195-
if q.Questions[0].Type == dnsmessage.TypeA {
2196-
r.Answers = []dnsmessage.Resource{
2197-
{
2198-
Header: dnsmessage.ResourceHeader{
2199-
Name: q.Questions[0].Name,
2200-
Type: dnsmessage.TypeA,
2201-
Class: dnsmessage.ClassINET,
2202-
Length: 4,
2203-
},
2204-
Body: &dnsmessage.AResource{
2205-
A: TestAddr,
2206-
},
2207-
},
2208-
}
2209-
}
2210-
return r, nil
2211-
},
2212-
}
2213-
2214-
r := &Resolver{PreferGo: true, Dial: fake.DialContext}
2215-
if _, err := r.LookupIPAddr(context.Background(), "go.dev"); err != nil {
2216-
t.Errorf("lookup failed: %v", err)
2217-
}
2218-
}

0 commit comments

Comments
 (0)