mirror of
https://github.com/coredns/coredns.git
synced 2026-09-03 18:47:05 -04:00
plugin/dns64: Fixes a nil pointer dereference panic in dns64 during response (#8511)
This PR fixes a nil pointer dereference panic in dns64 during response, when the internal A-record upstream re-lookup returns a nil response. Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This commit is contained in:
@@ -6,6 +6,7 @@ package dns64
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -122,6 +123,9 @@ func (d *DNS64) DoDNS64(ctx context.Context, w dns.ResponseWriter, r *dns.Msg, o
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if resp == nil {
|
||||||
|
return nil, fmt.Errorf("dns64: upstream returned no response")
|
||||||
|
}
|
||||||
out := d.Synthesize(r, origResponse, resp)
|
out := d.Synthesize(r, origResponse, resp)
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -554,3 +554,30 @@ func (fu *fakeUpstream) Lookup(_ context.Context, _ request.Request, name string
|
|||||||
|
|
||||||
return fu.resp, nil
|
return fu.resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type nilUpstream struct{}
|
||||||
|
|
||||||
|
func (n *nilUpstream) Lookup(_ context.Context, _ request.Request, _ string, _ uint16) (*dns.Msg, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
func TestDNS64NilUpstreamResponse(t *testing.T) {
|
||||||
|
_, pfx, _ := net.ParseCIDR("64:ff9b::/96")
|
||||||
|
|
||||||
|
d := DNS64{
|
||||||
|
Prefix: pfx,
|
||||||
|
Upstream: &nilUpstream{},
|
||||||
|
}
|
||||||
|
|
||||||
|
req := new(dns.Msg)
|
||||||
|
req.SetQuestion("example.com.", dns.TypeAAAA)
|
||||||
|
|
||||||
|
origResponse := new(dns.Msg)
|
||||||
|
origResponse.SetReply(req)
|
||||||
|
|
||||||
|
rec := dnstest.NewRecorder(&test.ResponseWriter{RemoteIP: "::1"})
|
||||||
|
|
||||||
|
_, err := d.DoDNS64(context.Background(), rec, req, origResponse)
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error when upstream returns nil response, got nil")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user