VirtualBox

Changeset 95332 in vbox


Ignore:
Timestamp:
Jun 21, 2022 7:45:27 PM (3 years ago)
Author:
vboxsync
Message:

GuestProperties: Call setPropertyInternal with different timestamps or we'll assert like crazy in getOldNotification. No need to memcpy the two byte string indication deletion/setting in getNotificationWriteOut. bugref:10185

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/GuestProperties/VBoxGuestPropSvc.cpp

    r95324 r95332  
    224224        AssertPtrReturn(pProp, VERR_INVALID_POINTER);
    225225        int rc = getOldNotificationInternal(pszPatterns, nsTimestamp, pProp);
     226
    226227#ifdef VBOX_STRICT
    227228        /*
     
    10471048    {
    10481049        char szFlags[GUEST_PROP_MAX_FLAGS_LEN];
    1049         char szWasDeleted[2] = { fWasDeleted ? '1' : '0', '\0' };
    1050 
    10511050        rc = GuestPropWriteFlags(rProp.mFlags, szFlags);
    10521051        if (RT_SUCCESS(rc))
     
    10541053            HGCMSvcSetU64(&paParms[1], rProp.mTimestamp);
    10551054
    1056             size_t const cbFlags  = strlen(szFlags) + 1;
    1057             size_t const cbName   = rProp.mName.length() + 1;
    1058             size_t const cbValue  = rProp.mValue.length() + 1;
    1059             size_t const cbWasDeleted  = strlen(szWasDeleted) + 1;
    1060             size_t const cbNeeded = cbName + cbValue + cbFlags + cbWasDeleted;
     1055            size_t const cbFlags      = strlen(szFlags) + 1;
     1056            size_t const cbName       = rProp.mName.length() + 1;
     1057            size_t const cbValue      = rProp.mValue.length() + 1;
     1058            size_t const cbWasDeleted = 2;
     1059            size_t const cbNeeded     = cbName + cbValue + cbFlags + cbWasDeleted;
    10611060            HGCMSvcSetU32(&paParms[3], (uint32_t)cbNeeded);
    10621061            if (cbNeeded <= cbBuf)
     
    10691068                memcpy(pchBuf, szFlags, cbFlags);
    10701069                pchBuf += cbFlags;
    1071                 memcpy(pchBuf, szWasDeleted, cbWasDeleted);
     1070                *pchBuf++ = fWasDeleted ? '1' : '0';
     1071                *pchBuf++ = '\0';
    10721072            }
    10731073            else
     
    17031703    AssertRCReturn(rc, rc);
    17041704
    1705     /* Sysprep execution by VBoxService (host is allowed to change these). */
    1706     uint64_t nsNow = getCurrentTimestamp();
    1707     rc = setPropertyInternal("/VirtualBox/HostGuest/SysprepExec", "", GUEST_PROP_F_TRANSIENT | GUEST_PROP_F_RDONLYGUEST, nsNow);
    1708     AssertRCReturn(rc, rc);
    1709     rc = setPropertyInternal("/VirtualBox/HostGuest/SysprepArgs", "", GUEST_PROP_F_TRANSIENT | GUEST_PROP_F_RDONLYGUEST, nsNow);
    1710     AssertRCReturn(rc, rc);
     1705    uint64_t nsNow = getCurrentTimestamp(); /* Must increment this for each property to avoid asserting in getOldNotification. */
    17111706
    17121707    /* Resume and reset counters. */
    1713     rc = setPropertyInternal("/VirtualBox/VMInfo/ResumeCounter", "0", GUEST_PROP_F_TRANSIENT | GUEST_PROP_F_RDONLYGUEST, nsNow);
    1714     AssertRCReturn(rc, rc);
    17151708    rc = setPropertyInternal("/VirtualBox/VMInfo/ResetCounter",  "0", GUEST_PROP_F_TRANSIENT | GUEST_PROP_F_RDONLYGUEST, nsNow);
    17161709    AssertRCReturn(rc, rc);
     1710    rc = setPropertyInternal("/VirtualBox/VMInfo/ResumeCounter", "0", GUEST_PROP_F_TRANSIENT | GUEST_PROP_F_RDONLYGUEST, ++nsNow);
     1711    AssertRCReturn(rc, rc);
     1712
     1713    /* Sysprep execution by VBoxService (host is allowed to change these). */
     1714    rc = setPropertyInternal("/VirtualBox/HostGuest/SysprepExec", "", GUEST_PROP_F_TRANSIENT | GUEST_PROP_F_RDONLYGUEST, ++nsNow);
     1715    AssertRCReturn(rc, rc);
     1716    rc = setPropertyInternal("/VirtualBox/HostGuest/SysprepArgs", "", GUEST_PROP_F_TRANSIENT | GUEST_PROP_F_RDONLYGUEST, ++nsNow);
     1717    AssertRCReturn(rc, rc);
     1718
    17171719
    17181720    /* The host notification thread and queue. */
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