Index: /trunk/src/VBox/Devices/Network/slirp/ip_icmp.c
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/ip_icmp.c	(revision 30403)
+++ /trunk/src/VBox/Devices/Network/slirp/ip_icmp.c	(revision 30404)
@@ -330,5 +330,5 @@
 {
     register struct icmp *icp;
-    int fIcpOnMbuf = 1; /* if icp pointer to m->m_data */
+    void *icp_buf = NULL;
     register struct ip *ip = mtod(m, struct ip *);
     int icmplen = ip->ip_len;
@@ -367,19 +367,17 @@
     }
 
-    if (m->m_next != NULL)
-    {
-        char *buf = RTMemAlloc(icmplen);
-        if (!buf)
+    if (m->m_next)
+    {
+        icp_buf = RTMemAlloc(icmplen);
+        if (!icp_buf)
         {
             LogRel(("NAT: not enought memory to allocate the buffer\n"));
             goto end_error;
         }
-        m_copydata(m, 0, icmplen, buf);
-        icp = (struct icmp *)buf;
-        fIcpOnMbuf = 0;
+        m_copydata(m, 0, icmplen, icp_buf);
+        icp = (struct icmp *)icp_buf;
     }
     else
         icp = mtod(m, struct icmp *);
-
 
     m->m_len += hlen;
@@ -509,8 +507,8 @@
 end_error:
     m_freem(pData, m);
+
 done:
-    if (   !fIcpOnMbuf
-        && !icp)
-        RTMemFree(icp);
+    if (icp_buf)
+        RTMemFree(icp_buf);
 }
 
