Bug 608

Summary: Receive malformed packet from authoritative name server when request with edns0, and retry with edns0 again
Product: unbound Reporter: chenfzh
Component: serverAssignee: unbound team <unbound-team>
Status: ASSIGNED ---    
Severity: enhancement CC: wouter
Priority: P5    
Version: unspecified   
Hardware: All   
OS: All   
Attachments: example of malformed packet

Description chenfzh 2014-08-27 10:15:50 CEST
Created attachment 260 [details]
example of malformed packet

Some authoritative name server doesn't support edns well, when unbound send a request to it, it response with a malformed packet. If I request this server without edns, it response with a normal packet.

unbound detect by checking NOTIMPL or FORMERR flag, but the malformed packet do not contain these flag, so function servied_udp_callback treat it like a normal packet, but unbound fail to parse this packet. Then unbound retry with edns0, and fail again, and again...

I'm not sure it's a bug, but I think it's better to send to the authoritative name server a request without edns after receiving a malformed packet from the server.

There's an example in the attachment.The domain name is 126.com.cn, and the authoritative name server is
Comment 1 Wouter Wijngaards 2014-08-28 13:53:50 CEST
Hi Chenfzh,

Yes that is an interesting improvement in EDNS support detection.  The packet is malformed, but is good if the additional-rr-count had been 1.

Best regards,
Comment 2 chenfzh 2014-08-29 04:22:37 CEST
I tried to let the serviced_query.status do not be serviced_query_UDP_EDNS any more if unbound received malformed packet before, but I didn't find out a suitable way to implement it.

I modified function parse_section in util/data/msgparse.c to make it work (so far), but I think that's not a good solution.