diff --git a/bpf/dns_tracker.h b/bpf/dns_tracker.h
index 714e128626738723184a686ecf545981fe9069f0..73434befd71a47ea900e3ff95b8bf328772f826a 100644
--- a/bpf/dns_tracker.h
+++ b/bpf/dns_tracker.h
@@ -10,6 +10,7 @@
 #define UDP_MAXMSG 512
 #define EINVAL 22
 #define DNS_DEFAULT_PORT 53
+#define ENOENT 2
 
 struct dns_header {
     u16 id;
@@ -67,6 +68,7 @@ static __always_inline u8 calc_dns_header_offset(pkt_info *pkt, void *data_end)
 
 static __always_inline int track_dns_packet(struct __sk_buff *skb, pkt_info *pkt) {
     void *data_end = (void *)(long)skb->data_end;
+    int ret = 0;
     if (pkt->id->dst_port == dns_port || pkt->id->src_port == dns_port ||
         pkt->id->dst_port == DNS_DEFAULT_PORT || pkt->id->src_port == DNS_DEFAULT_PORT) {
         dns_flow_id dns_req;
@@ -77,7 +79,6 @@ static __always_inline int track_dns_packet(struct __sk_buff *skb, pkt_info *pkt
         }
 
         struct dns_header dns;
-        int ret;
         u32 dns_offset = (long)pkt->l4_hdr - (long)skb->data + len;
 
         if ((ret = bpf_skb_load_bytes(skb, dns_offset, &dns, sizeof(dns))) < 0) {
@@ -99,12 +100,14 @@ static __always_inline int track_dns_packet(struct __sk_buff *skb, pkt_info *pkt
             if (value != NULL) {
                 pkt->dns_latency = ts - *value;
                 bpf_map_delete_elem(&dns_flows, &dns_req);
+            } else {
+                ret = ENOENT;
             }
             pkt->dns_id = dns_id;
             pkt->dns_flags = flags;
         } // end of dns response
     }
-    return 0;
+    return ret;
 }
 
 #endif // __DNS_TRACKER_H__
diff --git a/pkg/decode/decode_protobuf.go b/pkg/decode/decode_protobuf.go
index b98b815372c55253cce9ddaa12df82532f27795b..f2f3699a44da71c26e22c7369bf0f841b49fa9b4 100644
--- a/pkg/decode/decode_protobuf.go
+++ b/pkg/decode/decode_protobuf.go
@@ -117,11 +117,7 @@ func RecordToMap(fr *flow.Record) config.GenericMap {
 			out["DnsId"] = dnsID
 			out["DnsFlags"] = fr.Metrics.DnsRecord.Flags
 			out["DnsFlagsResponseCode"] = DNSRcodeToStr(uint32(fr.Metrics.DnsRecord.Flags) & 0xF)
-			if fr.Metrics.DnsRecord.Latency != 0 {
-				out["DnsLatencyMs"] = fr.DNSLatency.Milliseconds()
-			}
-			// Not sure about the logic here, why erasing errno?
-			out["DnsErrno"] = uint32(0)
+			out["DnsLatencyMs"] = fr.DNSLatency.Milliseconds()
 		}
 	}
 
diff --git a/pkg/decode/decode_protobuf_test.go b/pkg/decode/decode_protobuf_test.go
index 8eb74cf896efc5337625ba737cc1d936c821cd76..6644d8322c9a33d0b454238122123ae0cc5026cf 100644
--- a/pkg/decode/decode_protobuf_test.go
+++ b/pkg/decode/decode_protobuf_test.go
@@ -101,7 +101,7 @@ func TestPBFlowToMap(t *testing.T) {
 		"DnsId":                  uint16(1),
 		"DnsFlags":               uint16(0x80),
 		"DnsFlagsResponseCode":   "NoError",
-		"DnsErrno":               uint32(0),
+		"DnsErrno":               uint8(0),
 		"TimeFlowRttNs":          someDuration.Nanoseconds(),
 	}, out)
 
diff --git a/pkg/ebpf/bpf_arm64_bpfel.o b/pkg/ebpf/bpf_arm64_bpfel.o
index e188a8b9cebac2aeb66c41968c8493357cb62563..b73811ea5361ffc65e9254ef042f9c24d2d9de75 100644
Binary files a/pkg/ebpf/bpf_arm64_bpfel.o and b/pkg/ebpf/bpf_arm64_bpfel.o differ
diff --git a/pkg/ebpf/bpf_powerpc_bpfel.o b/pkg/ebpf/bpf_powerpc_bpfel.o
index 19dc48bb5a9d5152f929e5e5240d88e45feeb40c..94f67ccb6ed1589104d1100e4692d0e7ae87c7da 100644
Binary files a/pkg/ebpf/bpf_powerpc_bpfel.o and b/pkg/ebpf/bpf_powerpc_bpfel.o differ
diff --git a/pkg/ebpf/bpf_s390_bpfeb.o b/pkg/ebpf/bpf_s390_bpfeb.o
index f116bfe59de2bb9743a6dd122357597612d9cf86..47506cc7d96fc58d5d278e990a4c544a98bb7d6b 100644
Binary files a/pkg/ebpf/bpf_s390_bpfeb.o and b/pkg/ebpf/bpf_s390_bpfeb.o differ
diff --git a/pkg/ebpf/bpf_x86_bpfel.o b/pkg/ebpf/bpf_x86_bpfel.o
index 22fe778e99d008fbfef53a36938223d58aeed0a3..98201800d8893921fc11ca48156471107da3f3bf 100644
Binary files a/pkg/ebpf/bpf_x86_bpfel.o and b/pkg/ebpf/bpf_x86_bpfel.o differ
diff --git a/pkg/flow/record.go b/pkg/flow/record.go
index 825ca37879490f6dd061049352e99a7b7db11771..0d948fcc27dccad8018247d354b185e7a844922d 100644
--- a/pkg/flow/record.go
+++ b/pkg/flow/record.go
@@ -105,6 +105,10 @@ func Accumulate(r *ebpf.BpfFlowMetrics, src *ebpf.BpfFlowMetrics) {
 	r.DnsRecord.Flags |= src.DnsRecord.Flags
 	if src.DnsRecord.Id != 0 {
 		r.DnsRecord.Id = src.DnsRecord.Id
+		r.DnsRecord.Errno = src.DnsRecord.Errno
+	}
+	if r.DnsRecord.Errno != src.DnsRecord.Errno {
+		r.DnsRecord.Errno = src.DnsRecord.Errno
 	}
 	if r.DnsRecord.Latency < src.DnsRecord.Latency {
 		r.DnsRecord.Latency = src.DnsRecord.Latency
@@ -117,10 +121,6 @@ func Accumulate(r *ebpf.BpfFlowMetrics, src *ebpf.BpfFlowMetrics) {
 	if src.Dscp != 0 {
 		r.Dscp = src.Dscp
 	}
-	// Accumulate DNSErrno
-	if src.DnsRecord.Errno != 0 {
-		r.DnsRecord.Errno = src.DnsRecord.Errno
-	}
 }
 
 // IP returns the net.IP equivalent object