VirtualBox

Changeset 30353 in vbox


Ignore:
Timestamp:
Jun 22, 2010 8:09:41 AM (14 years ago)
Author:
vboxsync
Message:

NAT: fixed m_freem() in arp_input()

File:
1 edited

Legend:

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

    r30350 r30353  
    14021402            mr = m_getcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR);
    14031403            if (mr == NULL)
    1404                 return;
     1404                break;
    14051405            reh = mtod(mr, struct ethhdr *);
    14061406            mr->m_data += ETH_HLEN;
     
    14191419                    || CTL_CHECK(htip, CTL_TFTP))
    14201420                    goto arp_ok;
    1421                 m_freem(pData, m);
    14221421                m_freem(pData, mr);
    1423                 return;
     1422                break;
    14241423
    14251424         arp_ok:
     
    14451444                if_encap(pData, ETH_P_ARP, mr, ETH_ENCAP_URG);
    14461445            }
     1446            else
     1447                m_freem(pData, mr);
     1448
    14471449            /* Gratuitous ARP */
    14481450            if (  *(uint32_t *)ah->ar_sip == *(uint32_t *)ah->ar_tip
     
    14531455                 * Let's do ARP cache update
    14541456                 */
    1455                 if (slirp_arp_cache_update(pData, *(uint32_t *)ah->ar_tip, &eh->h_dest[0]) == 0)
    1456                 {
    1457                     m_freem(pData, m);
    1458                     break;
    1459                 }
    1460                 slirp_arp_cache_add(pData, *(uint32_t *)ah->ar_tip, &eh->h_dest[0]);
     1457                slirp_arp_cache_update_or_add(pData, *(uint32_t *)ah->ar_tip, &eh->h_dest[0]);
    14611458            }
    14621459            break;
    14631460
    14641461        case ARPOP_REPLY:
    1465             if (slirp_arp_cache_update(pData, *(uint32_t *)ah->ar_sip, &ah->ar_sha[0]) == 0)
    1466             {
    1467                 m_freem(pData, m);
    1468                 break;
    1469             }
    1470             slirp_arp_cache_add(pData, *(uint32_t *)ah->ar_sip, ah->ar_sha);
    1471             m_freem(pData, m);
     1462            slirp_arp_cache_update_or_add(pData, *(uint32_t *)ah->ar_sip, &ah->ar_sha[0]);
    14721463            break;
    14731464
     
    14751466            break;
    14761467    }
     1468
     1469    m_freem(pData, m);
    14771470}
    14781471
Note: See TracChangeset for help on using the changeset viewer.

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