Skip to content

Commit

Permalink
Merge pull request #5463 from mysteriumnetwork/fix_netstack_dnsclient
Browse files Browse the repository at this point in the history
fix truncated responses in netstack's DNS client
  • Loading branch information
Snawoot authored Sep 22, 2022
2 parents 2bfa2df + 58d4cc7 commit 10ae5a9
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion services/wireguard/endpoint/netstack/netstack.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ import (
"gvisor.dev/gvisor/pkg/waiter"
)

// MaxDNSMsgSize defines UDP recv buffer for resolver and announced
// EDNS0 buffer size
const MaxDNSResponseMsgSize = 4096

type netTun struct {
stack *stack.Stack
dispatcher stack.NetworkDispatcher
Expand Down Expand Up @@ -616,6 +620,17 @@ func newRequest(q dnsmessage.Question) (id uint16, udpReq, tcpReq []byte, err er
if err := b.Question(q); err != nil {
return 0, nil, nil, err
}
// Accept packets up to MaxDNSResponseMsgSize. RFC 6891.
if err := b.StartAdditionals(); err != nil {
return 0, nil, nil, err
}
var rh dnsmessage.ResourceHeader
if err := rh.SetEDNS0(MaxDNSResponseMsgSize, dnsmessage.RCodeSuccess, false); err != nil {
return 0, nil, nil, err
}
if err := b.OPTResource(rh, dnsmessage.OPTResource{}); err != nil {
return 0, nil, nil, err
}
tcpReq, err = b.Finish()
udpReq = tcpReq[2:]
l := len(tcpReq) - 2
Expand Down Expand Up @@ -661,7 +676,7 @@ func dnsPacketRoundTrip(c net.Conn, id uint16, query dnsmessage.Question, b []by
if _, err := c.Write(b); err != nil {
return dnsmessage.Parser{}, dnsmessage.Header{}, err
}
b = make([]byte, 512)
b = make([]byte, MaxDNSResponseMsgSize)
for {
n, err := c.Read(b)
if err != nil {
Expand Down

0 comments on commit 10ae5a9

Please sign in to comment.