VirtualBox

Changeset 35923 in vbox for trunk/src/VBox/Devices/Network


Ignore:
Timestamp:
Feb 10, 2011 3:48:27 AM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
69951
Message:

NAT: 'icmp_error` frees source mbuf.

Location:
trunk/src/VBox/Devices/Network/slirp
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/slirp/ip_icmp.c

    r34103 r35923  
    537537 * packet.  The maximum payload is 576-20(ip hdr)-8(icmp hdr)=548
    538538 *
    539  * @note This function will NOT free msrc!
     539 * @note This function will free msrc!
    540540 */
    541541
     
    591591    new_m_size = sizeof(struct ip) + ICMP_MINLEN + msrc->m_len + ICMP_MAXDATALEN;
    592592    if (new_m_size < MSIZE)
    593     {
    594593        size = MCLBYTES;
    595     }
    596594    else if (new_m_size < MCLBYTES)
    597     {
    598595        size = MCLBYTES;
    599     }
    600596    else if(new_m_size < MJUM9BYTES)
    601     {
    602597        size = MJUM9BYTES;
    603     }
    604598    else if (new_m_size < MJUM16BYTES)
    605     {
    606599        size = MJUM16BYTES;
    607     }
    608600    else
    609     {
    610601        AssertMsgFailed(("Unsupported size"));
    611     }
    612602    m = m_getjcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR, size);
    613603    if (!m)
     
    645635
    646636    memcpy(&icp->icmp_ip, msrc->m_data, s_ip_len);   /* report the ip packet */
     637    m_freem(pData, msrc);
    647638
    648639    HTONS(icp->icmp_ip.ip_len);
  • trunk/src/VBox/Devices/Network/slirp/ip_input.c

    r34103 r35923  
    131131    {
    132132        ipstat.ips_toosmall++;
    133         STAM_PROFILE_STOP(&pData->StatIP_input, a);
    134         return;
     133        goto bad_free_m;
    135134    }
    136135
     
    194193    {
    195194        icmp_error(pData, m, ICMP_TIMXCEED, ICMP_TIMXCEED_INTRANS, 0, "ttl");
    196         goto bad_free_m;
     195        goto no_free_m;
    197196    }
    198197
     
    210209        m = ip_reass(pData, m);
    211210        if (m == NULL)
    212         {
    213              STAM_PROFILE_STOP(&pData->StatIP_input, a);
    214              return;
    215         }
     211            goto no_free_m;
    216212        ip = mtod(m, struct ip *);
    217213        hlen = ip->ip_hl << 2;
     
    239235            m_freem(pData, m);
    240236    }
    241     STAM_PROFILE_STOP(&pData->StatIP_input, a);
    242     return;
     237    goto no_free_m;
    243238
    244239bad_free_m:
     
    246241        &ip->ip_dst, ip->ip_len));
    247242    m_freem(pData, m);
     243no_free_m:
    248244    STAM_PROFILE_STOP(&pData->StatIP_input, a);
    249245    return;
  • trunk/src/VBox/Devices/Network/slirp/socket.c

    r35826 r35923  
    815815            Log2((" rx error, tx icmp ICMP_UNREACH:%i\n", code));
    816816            icmp_error(pData, so->so_m, ICMP_UNREACH, code, 0, strerror(errno));
    817             m_freem(pData, so->so_m);
    818817            so->so_m = NULL;
    819818        }
     
    13681367                code = (code != ~0 ? code : ICMP_UNREACH_PORT);
    13691368                icmp_error(pData, so->so_m, ICMP_UNREACH, code, 0, "Error occurred!!!");
    1370                 m_freem(pData, so->so_m);
    13711369                so->so_m = NULL;
    13721370                break;
     
    14871485        LogRel((" udp icmp rx errno = %d (%s)\n", errno, strerror(errno)));
    14881486        icmp_error(pData, so->so_m, ICMP_UNREACH, code, 0, strerror(errno));
    1489         m_freem(pData, so->so_m);
    14901487        so->so_m = NULL;
    14911488        Log(("sorecvfrom_icmp_unix: 1 - step can't read IP datagramm\n"));
  • trunk/src/VBox/Devices/Network/slirp/tcp_input.c

    r35860 r35923  
    790790                    *ip = save_ip;
    791791                    icmp_error(pData, m, ICMP_UNREACH, code, 0, strerror(errno));
    792                     m_freem(pData, m);
    793792                    tp->t_socket->so_m = NULL;
    794793                }
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette