VirtualBox

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


Ignore:
Timestamp:
Mar 27, 2017 9:58:43 AM (8 years ago)
Author:
vboxsync
Message:

Windows Additions/VBoxCredProv: Zero KERB_INTERACTIVE_UNLOCK_LOGON and check for string lengths in kerberosLogonSerialize().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/VBoxCredProv/VBoxCredProvCredential.cpp

    r66109 r66260  
    318318     */
    319319    DWORD cbLogon = sizeof(KERB_INTERACTIVE_UNLOCK_LOGON)
    320                   + pLogonIn->LogonDomainName.Length +
    321                   + pLogonIn->UserName.Length +
     320                  + pLogonIn->LogonDomainName.Length
     321                  + pLogonIn->UserName.Length
    322322                  + pLogonIn->Password.Length;
    323323
    324 #ifdef DEBUG
    325     VBoxCredProvVerbose(3, "VBoxCredProvCredential::AllocateLogonPackage: Allocating %ld bytes (%d bytes credentials)\n",
     324    VBoxCredProvVerbose(3, "VBoxCredProvCredential::AllocateLogonPackage: Allocating %ld bytes (%zu bytes credentials)\n",
    326325                        cbLogon, cbLogon - sizeof(KERB_INTERACTIVE_UNLOCK_LOGON));
    327 #endif
    328326
    329327    KERB_INTERACTIVE_UNLOCK_LOGON *pLogon = (KERB_INTERACTIVE_UNLOCK_LOGON*)CoTaskMemAlloc(cbLogon);
    330328    if (!pLogon)
    331329        return E_OUTOFMEMORY;
     330
     331    /* Make sure to zero everything first. */
     332    RT_BZERO(pLogon, cbLogon);
    332333
    333334    /* Let our byte buffer point to the end of our allocated structure so that it can
     
    339340     * string content but a relative offset starting at the given
    340341     * KERB_INTERACTIVE_UNLOCK_LOGON structure. */
    341 #define KERB_CRED_INIT_PACKED(StringDst, StringSrc, LogonOffset)         \
    342     StringDst.Length         = StringSrc.Length;                         \
    343     StringDst.MaximumLength  = StringSrc.Length;                         \
    344     StringDst.Buffer         = (PWSTR)pbBuffer;                          \
    345     memcpy(StringDst.Buffer, StringSrc.Buffer, StringDst.Length);        \
    346     StringDst.Buffer         = (PWSTR)(pbBuffer - (PBYTE)LogonOffset);   \
    347     pbBuffer                += StringDst.Length;
    348 
    349     RT_BZERO(&pLogon->LogonId, sizeof(LUID));
     342#define KERB_CRED_INIT_PACKED(StringDst, StringSrc, LogonOffset)             \
     343    StringDst.Length         = StringSrc.Length;                             \
     344    StringDst.MaximumLength  = StringSrc.Length;                             \
     345    if (StringDst.Length)                                                    \
     346    {                                                                        \
     347        StringDst.Buffer         = (PWSTR)pbBuffer;                          \
     348        memcpy(StringDst.Buffer, StringSrc.Buffer, StringDst.Length);        \
     349        StringDst.Buffer         = (PWSTR)(pbBuffer - (PBYTE)LogonOffset);   \
     350        pbBuffer                += StringDst.Length;                         \
     351    }
    350352
    351353    KERB_INTERACTIVE_LOGON *pLogonOut = &pLogon->Logon;
     354
    352355    pLogonOut->MessageType = pLogonIn->MessageType;
    353356
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