VirtualBox

Changeset 101138 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Sep 18, 2023 10:38:19 AM (17 months ago)
Author:
vboxsync
Message:

Main: Fixed a VBoxSVC crash when committing network adapter changes, if the adapter count got increased if a peer exists. The network adapter vector first needs to be resized and initialized properly, then be linked to the peer object. Probably a regression from r80073.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-server/MachineImpl.cpp

    r101124 r101138  
    1180411804    if (mPeer)
    1180511805    {
     11806        size_t const oldSize     = mNetworkAdapters.size();
     11807        size_t const oldPeerSize = mPeer->mNetworkAdapters.size();
     11808
    1180611809        /* commit everything, even the ones which will go away */
    11807         for (size_t slot = 0; slot < mNetworkAdapters.size(); slot++)
     11810        for (size_t slot = 0; slot < oldSize; slot++)
    1180811811            mNetworkAdapters[slot]->i_commit();
    1180911812        /* copy over the new entries, creating a peer and uninit the original */
    11810         mPeer->mNetworkAdapters.resize(RT_MAX(newSize, mPeer->mNetworkAdapters.size()));
     11813        mPeer->mNetworkAdapters.resize(RT_MAX(newSize, oldPeerSize));
     11814        /* make sure to have enough room for iterating over the (newly added) slots down below */
     11815        if (newSize > oldSize)
     11816        {
     11817            mNetworkAdapters.resize(newSize);
     11818
     11819            com::Utf8Str           osTypeId;
     11820            ComObjPtr<GuestOSType> osType = NULL;
     11821            hrc = getOSTypeId(osTypeId);
     11822            if (SUCCEEDED(hrc))
     11823                hrc = mParent->i_findGuestOSType(Bstr(osTypeId), osType);
     11824
     11825            for (size_t slot = oldSize; slot < newSize; slot++)
     11826            {
     11827                mNetworkAdapters[slot].createObject();
     11828                mNetworkAdapters[slot]->init(this, (ULONG)slot);
     11829                mNetworkAdapters[slot]->i_applyDefaults(SUCCEEDED(hrc) ? osType : NULL);
     11830            }
     11831        }
    1181111832        for (size_t slot = 0; slot < newSize; slot++)
    1181211833        {
     
    1182311844        }
    1182411845        /* uninit any no longer needed network adapters */
    11825         for (size_t slot = newSize; slot < mNetworkAdapters.size(); ++slot)
     11846        for (size_t slot = newSize; slot < oldSize; ++slot)
    1182611847            mNetworkAdapters[slot]->uninit();
    11827         for (size_t slot = newSize; slot < mPeer->mNetworkAdapters.size(); ++slot)
     11848        for (size_t slot = newSize; slot < oldPeerSize; ++slot)
    1182811849        {
    1182911850            if (mPeer->mNetworkAdapters[slot])
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