VirtualBox

Changeset 52207 in vbox


Ignore:
Timestamp:
Jul 27, 2014 7:33:11 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
95268
Message:

SUP: Fixed handle leak in the driver. Adjusted NtQueryInformationProcess/ProcessImageInformation for XP. Shut up an DEBUG assertion caused by certificate(s) with malformed ASN.1 UTC TIME objects (not zulu time).

Location:
trunk/src/VBox/HostDrivers/Support/win
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp

    r52204 r52207  
    14561456            if (pCurCtx->dwCertEncodingType & X509_ASN_ENCODING)
    14571457            {
     1458                RTERRINFOSTATIC StaticErrInfo;
    14581459                RTASN1CURSORPRIMARY PrimaryCursor;
    1459                 RTAsn1CursorInitPrimary(&PrimaryCursor, pCurCtx->pbCertEncoded, pCurCtx->cbCertEncoded, NULL /*pErrInfo*/,
     1460                RTAsn1CursorInitPrimary(&PrimaryCursor, pCurCtx->pbCertEncoded, pCurCtx->cbCertEncoded,
     1461                                        RTErrInfoInitStatic(&StaticErrInfo),
    14601462                                        &g_RTAsn1DefaultAllocator, RTASN1CURSOR_FLAGS_DER, "CurCtx");
    14611463                RTCRX509CERTIFICATE MyCert;
    14621464                int rc = RTCrX509Certificate_DecodeAsn1(&PrimaryCursor.Cursor, 0, &MyCert, "Cert");
    1463                 AssertRC(rc);
    14641465                if (RT_SUCCESS(rc))
    14651466                {
     
    14781479                    RTCrX509Certificate_Delete(&MyCert);
    14791480                }
     1481                /* XP root certificate "C&W HKT SecureNet CA SGC Root" has non-standard validity
     1482                   timestamps, the UTC formatting isn't Zulu time but specifies timezone offsets.
     1483                   Ignore these failures and certificates. */
     1484                else if (rc != VERR_ASN1_INVALID_UTC_TIME_ENCODING)
     1485                    AssertMsgFailed(("RTCrX509Certificate_DecodeAsn1 failed: rc=%#x: %s\n", rc, StaticErrInfo.szMsg));
    14801486            }
    14811487        }
  • trunk/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp

    r52205 r52207  
    114114    /** The file reader. */
    115115    PSUPHNTVIRDR    pNtViRdr;
     116    /** The module file handle, if we've opened it.
     117     * (pNtviRdr does not close the file handle on destruction.)  */
     118    HANDLE          hFile;
    116119    /** Image bits for lazy cleanup. */
    117120    uint8_t        *pbBits;
     
    650653        return supHardNtVpSetInfo2(pThis, rc, "%s: RTLdrGetBits failed: %Rrc", pImage->pszName, rc);
    651654
    652     /** @todo figure out if all windows versions do this... */
    653     if (fIs32Bit)
    654         ((PIMAGE_NT_HEADERS32)&pImage->pbBits[offNtHdrs])->OptionalHeader.ImageBase = (uint32_t)pImage->uImageBase;
    655     else
    656         ((PIMAGE_NT_HEADERS)&pImage->pbBits[offNtHdrs])->OptionalHeader.ImageBase   = pImage->uImageBase;
     655    /* XP SP3 does not set ImageBase to load address. It fixes up the image on load time though. */
     656    if (g_uNtVerCombined >= SUP_NT_VER_VISTA)
     657    {
     658        if (fIs32Bit)
     659            ((PIMAGE_NT_HEADERS32)&pImage->pbBits[offNtHdrs])->OptionalHeader.ImageBase = (uint32_t)pImage->uImageBase;
     660        else
     661            ((PIMAGE_NT_HEADERS)&pImage->pbBits[offNtHdrs])->OptionalHeader.ImageBase   = pImage->uImageBase;
     662    }
    657663
    658664    /*
     
    10601066    pImage->uImageBase = (uintptr_t)pMemInfo->AllocationBase;
    10611067    pImage->cbImage    = pMemInfo->RegionSize;
     1068    pImage->hFile      = NULL;
    10621069    pImage->hLdrMod    = NIL_RTLDRMOD;
    10631070    pImage->pNtViRdr   = NULL;
     
    13321339
    13331340/**
    1334  * Opens all the images with the IPRT loader, setting both pNtViRdr and hLdrMod
    1335  * for each image.
     1341 * Opens all the images with the IPRT loader, setting both, hFile, pNtViRdr and
     1342 * hLdrMod for each image.
    13361343 *
    13371344 * @returns VBox status code.
     
    13891396            return rc;
    13901397        }
     1398        pImage->hFile    = hFile;
    13911399        pImage->pNtViRdr = pNtViRdr;
    13921400
     
    14821490    /*
    14831491     * Check linking requirements.
     1492     * This query is only available using the current process pseudo handle on
     1493     * older windows versions.  The cut-off seems to be Vista.
    14841494     */
    14851495    SECTION_IMAGE_INFORMATION ImageInfo;
    14861496    rcNt = NtQueryInformationProcess(hProcess, ProcessImageInformation, &ImageInfo, sizeof(ImageInfo), NULL);
    14871497    if (!NT_SUCCESS(rcNt))
     1498    {
     1499        if (   rcNt == STATUS_INVALID_PARAMETER
     1500            && g_uNtVerCombined < SUP_NT_VER_VISTA
     1501            && hProcess != NtCurrentProcess() )
     1502            return VINF_SUCCESS;
    14881503        return supHardNtVpSetInfo2(pThis, VERR_SUP_VP_NT_QI_PROCESS_IMG_INFO_ERROR,
    1489                                    "NtQueryInformationProcess/ProcessImageInformation failed: %#x", rcNt);
     1504                                   "NtQueryInformationProcess/ProcessImageInformation failed: %#x hProcess=%#x", rcNt, hProcess);
     1505    }
    14901506    if ( !(ImageInfo.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY))
    14911507        return supHardNtVpSetInfo2(pThis, VERR_SUP_VP_EXE_MISSING_FORCE_INTEGRITY,
     
    16411657                else if (pThis->aImages[i].pNtViRdr)
    16421658                    pThis->aImages[i].pNtViRdr->Core.pfnDestroy(&pThis->aImages[i].pNtViRdr->Core);
     1659                if (pThis->aImages[i].hFile)
     1660                    NtClose(pThis->aImages[i].hFile);
    16431661            }
    16441662            suplibHardenedFree(pThis);
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette