VirtualBox

Changeset 56281 in vbox for trunk


Ignore:
Timestamp:
Jun 9, 2015 12:08:44 AM (9 years ago)
Author:
vboxsync
Message:

VBoxNetFlt/darwin: Ignore IPv4 (RFC3927) and IPv6 link-local addresses
on other devices.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/VBoxNetFlt/darwin/VBoxNetFlt-darwin.cpp

    r56267 r56281  
    8686#define VBOXNETFLT_DARWIN_TEST_SEG_SIZE 14
    8787#endif
     88
     89/* XXX: hidden undef #ifdef __APPLE__ */
     90#define VBOX_IN_LOOPBACK(addr)  (((addr) & IN_CLASSA_NET) == 0x7f000000)
     91#define VBOX_IN_LINKLOCAL(addr) (((addr) & IN_CLASSB_NET) == 0xa9fe0000)
     92
    8893
    8994
     
    14001405            u_int32_t u32Addr = ntohl(sin->sin_addr.s_addr);
    14011406
    1402             if ((u32Addr >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET)
     1407            if (VBOX_IN_LOOPBACK(u32Addr))
     1408                continue;
     1409
     1410            if (ifaddr_ifnet(ifa) != pIfNet && VBOX_IN_LINKLOCAL(u32Addr))
    14031411                continue;
    14041412
     
    14151423
    14161424            /* link-local from other interfaces are out of scope */
    1417             if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr) && ifaddr_ifnet(ifa) != pIfNet)
     1425            if (ifaddr_ifnet(ifa) != pIfNet && IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr))
    14181426                continue;
    14191427
     
    14491457        return;
    14501458    }
     1459
     1460    struct net_event_data my_link;
     1461    ifnet_t pIfNet = pThis->u.s.pIfNet; /* XXX: retain? */
     1462    ifnet_family_t if_family = ifnet_family(pIfNet);
     1463    u_int32_t if_unit = ifnet_unit(pIfNet);
    14511464
    14521465    for (;;) {
     
    14901503            struct net_event_data *link = &iev->link_data;
    14911504            PCRTNETADDRU pAddr = (PCRTNETADDRU)&iev->ia_addr;
     1505            u_int32_t u32Addr = ntohl(pAddr->IPv4.u);
     1506
     1507            if (VBOX_IN_LOOPBACK(u32Addr))
     1508            {
     1509                mbuf_freem(m);
     1510                continue;
     1511            }
     1512
     1513            if (   (link->if_family != if_family || link->if_unit != if_unit)
     1514                && VBOX_IN_LINKLOCAL(u32Addr))
     1515            {
     1516                mbuf_freem(m);
     1517                continue;
     1518            }
     1519
    14921520            switch (msg->event_code)
    14931521            {
    14941522                case KEV_INET_NEW_ADDR:
    14951523                    Log(("KEV_INET_NEW_ADDR %.*s%d: %RTnaipv4\n",
    1496                          IFNAMSIZ, link->if_name, link->if_unit, pAddr->IPv4));
     1524                         IFNAMSIZ, link->if_name, link->if_unit, pAddr->IPv4.u));
    14971525
    14981526                    pThis->pSwitchPort->pfnNotifyHostAddress(pThis->pSwitchPort,
     
    15021530                case KEV_INET_ADDR_DELETED:
    15031531                    Log(("KEV_INET_ADDR_DELETED %.*s%d: %RTnaipv4\n",
    1504                          IFNAMSIZ, link->if_name, link->if_unit, pAddr->IPv4));
     1532                         IFNAMSIZ, link->if_name, link->if_unit, pAddr->IPv4.u));
    15051533
    15061534                    pThis->pSwitchPort->pfnNotifyHostAddress(pThis->pSwitchPort,
     
    15101538                default:
    15111539                    Log(("KEV INET event %u %.*s%d: addr %RTnaipv4\n",
    1512                          msg->event_code, IFNAMSIZ, link->if_name, link->if_unit, pAddr->IPv4));
     1540                         msg->event_code, IFNAMSIZ, link->if_name, link->if_unit, pAddr->IPv4.u));
    15131541                    break;
    15141542            }
     
    15271555            struct net_event_data *link = &iev6->link_data;
    15281556            PCRTNETADDRU pAddr = (PCRTNETADDRU)&iev6->ia_addr.sin6_addr;
     1557
     1558            if (IN6_IS_ADDR_LOOPBACK(&iev6->ia_addr.sin6_addr))
     1559            {
     1560                mbuf_freem(m);
     1561                continue;
     1562            }
     1563
     1564            if (   (link->if_family != if_family || link->if_unit != if_unit)
     1565                && IN6_IS_ADDR_LINKLOCAL(&iev6->ia_addr.sin6_addr))
     1566            {
     1567                mbuf_freem(m);
     1568                continue;
     1569            }
     1570
     1571
     1572
    15291573            switch (msg->event_code)
    15301574            {
     
    15321576                    Log(("KEV_INET6_NEW_USER_ADDR %.*s%d: %RTnaipv6\n",
    15331577                         IFNAMSIZ, link->if_name, link->if_unit, pAddr));
    1534                     /*
    1535                      * XXX: TODO: link-local addresses are first
    1536                      * reported as KEV_INET6_NEW_LL_ADDR, but then are
    1537                      * also reported here too, after DAD, I guess.
    1538                      */
    15391578                    goto kev_inet6_new;
    15401579
     
    15421581                    Log(("KEV_INET6_NEW_LL_ADDR %.*s%d: %RTnaipv6\n",
    15431582                         IFNAMSIZ, link->if_name, link->if_unit, pAddr));
    1544                     /* XXX: uwe: TODO: only interface we are attached to */
    15451583                    goto kev_inet6_new;
    15461584
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