VirtualBox

Changeset 57201 in vbox


Ignore:
Timestamp:
Aug 5, 2015 7:57:08 PM (9 years ago)
Author:
vboxsync
Message:

windows hardning error reporting improvements.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/err.h

    r57109 r57201  
    18121812/** A TSC-delta measurement request is currently being serviced. */
    18131813#define VERR_SUPDRV_TSC_DELTA_MEASUREMENT_BUSY      (-3747)
     1814/** The process trying to open VBoxDrv is not a budding VM process (1). */
     1815#define VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_1          (-3748)
     1816/** The process trying to open VBoxDrv is not a budding VM process (2). */
     1817#define VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_2          (-3748)
    18141818/** @} */
    18151819
  • trunk/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp

    r57108 r57201  
    846846                        LogRel(("vboxdrv: %p is not a budding VM process (enmProcessKind=%d).\n",
    847847                                PsGetProcessId(PsGetCurrentProcess()), pNtProtect->enmProcessKind));
    848                         rc = VERR_ACCESS_DENIED;
     848                        rc = VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_2;
    849849                    }
    850850                    supdrvNtProtectRelease(pNtProtect);
     
    853853                {
    854854                    LogRel(("vboxdrv: %p is not a budding VM process.\n", PsGetProcessId(PsGetCurrentProcess())));
    855                     rc = VERR_ACCESS_DENIED;
     855                    rc = VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_1;
    856856                }
    857857            }
     
    14791479                /*
    14801480                 * Did we find error info and is the caller requesting data within it?
    1481                  * If so, cehck the destination buffer and copy the data into it.
     1481                 * If so, check the destination buffer and copy the data into it.
    14821482                 */
    14831483                if (   pCur
     
    14891489                    {
    14901490                        uint32_t offRead  = (uint32_t)pStack->Parameters.Read.ByteOffset.QuadPart;
    1491                         uint32_t cbToRead = pCur->cchErrorInfo - (uint32_t)offRead;
    1492                         if (cbToRead > pStack->Parameters.Read.Length)
    1493                         {
     1491                        uint32_t cbToRead = pCur->cchErrorInfo - offRead;
     1492                        if (cbToRead < pStack->Parameters.Read.Length)
     1493                            RT_BZERO((uint8_t *)pvDstBuf + cbToRead, pStack->Parameters.Read.Length - cbToRead);
     1494                        else
    14941495                            cbToRead = pStack->Parameters.Read.Length;
    1495                             RT_BZERO((uint8_t *)pvDstBuf + cbToRead, pStack->Parameters.Read.Length - cbToRead);
    1496                         }
    14971496                        memcpy(pvDstBuf, &pCur->szErrorInfo[offRead], cbToRead);
    14981497                        pIrp->IoStatus.Information = cbToRead;
     
    15221521            else
    15231522                rcNt = STATUS_UNSUCCESSFUL;
     1523
     1524            /* Paranoia: Clear the buffer on failure. */
     1525            if (!NT_SUCCESS(rcNt))
     1526            {
     1527                PVOID pvDstBuf = pIrp->AssociatedIrp.SystemBuffer;
     1528                if (   pvDstBuf
     1529                    && pStack->Parameters.Read.Length)
     1530                    RT_BZERO(pvDstBuf, pStack->Parameters.Read.Length);
     1531            }
    15241532        }
    15251533        else
     
    41654173            pErrorInfo->cchErrorInfo = (uint32_t)RTStrPrintf(pErrorInfo->szErrorInfo, sizeof(pErrorInfo->szErrorInfo),
    41664174                                                             "supdrvNtProtectVerifyProcess: rc=%d", rc);
    4167         if (RT_FAILURE(rc))
    4168             RTLogWriteDebugger(pErrorInfo->szErrorInfo, pErrorInfo->cchErrorInfo);
     4175        RTLogWriteDebugger(pErrorInfo->szErrorInfo, pErrorInfo->cchErrorInfo);
    41694176
    41704177        int rc2 = RTSemMutexRequest(g_hErrorInfoLock, RT_INDEFINITE_WAIT);
  • trunk/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp

    r57161 r57201  
    41894189            rcNt = NtReadFile(hFile, NULL /*hEvent*/, NULL /*ApcRoutine*/, NULL /*ApcContext*/, &Ios,
    41904190                              &pszErrorInfo[cchPrefix], (ULONG)(cbErrorInfo - cchPrefix - 1), &offRead, NULL);
    4191             if (NT_SUCCESS(rcNt))
     4191            if (NT_SUCCESS(rcNt) && NT_SUCCESS(Ios.Status) && Ios.Information > 0)
    41924192            {
    41934193                memcpy(pszErrorInfo, pszPrefix, cchPrefix);
    4194                 pszErrorInfo[cbErrorInfo - 1] = '\0';
     4194                pszErrorInfo[RT_MIN(cbErrorInfo - 1, Ios.Information)] = '\0';
    41954195                SUP_DPRINTF(("supR3HardenedWinReadErrorInfoDevice: '%s'", &pszErrorInfo[cchPrefix]));
    41964196            }
     
    41984198            {
    41994199                *pszErrorInfo = '\0';
    4200                 if (rcNt != STATUS_END_OF_FILE)
    4201                     SUP_DPRINTF(("supR3HardenedWinReadErrorInfoDevice: NtReadFile -> %#x\n", rcNt));
     4200                if (rcNt != STATUS_END_OF_FILE || Ios.Status != STATUS_END_OF_FILE)
     4201                    SUP_DPRINTF(("supR3HardenedWinReadErrorInfoDevice: NtReadFile -> %#x / %#x / %p\n",
     4202                                 rcNt, Ios.Status, Ios.Information));
    42024203            }
    42034204        }
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