VirtualBox

Changeset 50025 in vbox for trunk/src/VBox/Additions


Ignore:
Timestamp:
Jan 6, 2014 4:17:58 PM (11 years ago)
Author:
vboxsync
Message:

VBoxService/VMInfo: Fixed crashes in user detection.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp

    r48678 r50025  
    364364                        if (dwLength)
    365365                        {
    366                             pProc->pSid = (PSID)RTMemAlloc(dwLength);
     366                            pProc->pSid = (PSID)HeapAlloc(GetProcessHeap(),
     367                                                          HEAP_ZERO_MEMORY, dwLength);
    367368                            AssertPtr(pProc->pSid);
    368369                            if (CopySid(dwLength, pProc->pSid, pUser->User.Sid))
     
    378379
    379380                        if (dwErr != ERROR_SUCCESS)
     381                        {
    380382                            VBoxServiceError("Error retrieving SID of process PID=%ld: %ld\n",
    381383                                             pProc->id, dwErr);
     384                            if (pProc->pSid)
     385                            {
     386                                HeapFree(GetProcessHeap(), 0 /* Flags */, pProc->pSid);
     387                                pProc->pSid = NULL;
     388                            }
     389                        }
    382390                        break;
    383391                    }
     
    457465        }
    458466    } while (cProcesses <= _32K); /* Should be enough; see: http://blogs.technet.com/markrussinovich/archive/2009/07/08/3261309.aspx */
     467
    459468    if (RT_SUCCESS(rc))
    460469    {
     
    495504            }
    496505            else
    497                 RTMemFree(paProcs);
     506                VBoxServiceVMInfoWinProcessesFree(cProcesses, paProcs);
    498507        }
    499508        else
     
    516525    {
    517526        if (paProcs[i].pSid)
    518             RTMemFree(paProcs[i].pSid);
     527        {
     528            HeapFree(GetProcessHeap(), 0 /* Flags */, paProcs[i].pSid);
     529            paProcs[i].pSid = NULL;
     530        }
     531
    519532    }
    520533    RTMemFree(paProcs);
     
    9921005    AssertRC(rc2);
    9931006
     1007    char *pszUserList = NULL;
     1008    uint32_t cUsersInList = 0;
     1009
    9941010    /* This function can report stale or orphaned interactive logon sessions
    9951011       of already logged off users (especially in Windows 2000). */
     
    11391155                               cUniqueUsers);
    11401156
    1141             *pcUsersInList = 0;
    11421157            for (ULONG i = 0; i < cUniqueUsers; i++)
    11431158            {
     
    11591174                                       pUserInfo[i].wszUser, pUserInfo[i].ulNumProcs, pUserInfo[i].ulLastSession);
    11601175
    1161                     if (*pcUsersInList > 0)
     1176                    if (cUsersInList > 0)
    11621177                    {
    1163                         rc = RTStrAAppend(ppszUserList, ",");
    1164                         AssertRCBreakStmt(rc, RTStrFree(*ppszUserList));
     1178                        rc = RTStrAAppend(&pszUserList, ",");
     1179                        AssertRCBreakStmt(rc, RTStrFree(pszUserList));
    11651180                    }
    11661181
    1167                     *pcUsersInList += 1;
     1182                    cUsersInList += 1;
    11681183
    11691184                    char *pszUser = NULL;
     
    11761191                    {
    11771192                        /* Append user to users list. */
    1178                         rc = RTStrAAppend(ppszUserList, pszUser);
     1193                        rc = RTStrAAppend(&pszUserList, pszUser);
    11791194
    11801195                        /* Do idle detection. */
     
    11831198                    }
    11841199                    else
    1185                         rc = RTStrAAppend(ppszUserList, "<string-conversion-error>");
     1200                        rc = RTStrAAppend(&pszUserList, "<string-conversion-error>");
    11861201
    11871202                    RTStrFree(pszUser);
    11881203                    RTStrFree(pszDomain);
    11891204
    1190                     AssertRCBreakStmt(rc, RTStrFree(*ppszUserList));
     1205                    AssertRCBreakStmt(rc, RTStrFree(pszUserList));
    11911206                }
    11921207            }
     
    11981213    if (paSessions)
    11991214        LsaFreeReturnBuffer(paSessions);
     1215
     1216    if (RT_SUCCESS(rc))
     1217    {
     1218        *ppszUserList = pszUserList;
     1219        *pcUsersInList = cUsersInList;
     1220    }
    12001221
    12011222    s_uDebugIter++;
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