Index: /branches/rel_apv_10_7/usr/src/sys/click/netinet/click_udp.c
===================================================================
--- /branches/rel_apv_10_7/usr/src/sys/click/netinet/click_udp.c	(revision 39388)
+++ /branches/rel_apv_10_7/usr/src/sys/click/netinet/click_udp.c	(working copy)
@@ -479,18 +479,24 @@
 {
     int dns_data_len = 0;
     dns_header_t *dns = NULL;
-    struct mbuf *packet = m;
+    struct mbuf *packet = NULL;
 
     if (htons(DNS_SERVER_PORT) == udp->uh_sport) {
+        packet = m_copy(m, 0, M_COPYALL);
         dns = dns_parse_header(&packet, &dns_data_len, 0);
+
         if (dns == NULL) {
+            m_freem(packet);
             return 0;
         }
 
         if (dns->qr) {
+            m_freem(packet);
             return 1;
         }
     }
+
+    m_freem(packet);
     return 0;
 }
 
