VirtualBox

Changeset 52634 in vbox


Ignore:
Timestamp:
Sep 6, 2014 8:21:03 PM (10 years ago)
Author:
vboxsync
Message:

SUP: Fix deadlock problem when mounting ISO on vista. (Never all WinVerifyTrust while holding the loader semaphore.)

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/win/SUPHardenedVerify-win.h

    r52627 r52634  
    9191DECLHIDDEN(int)  supHardenedWinVerifyImageTrust(HANDLE hFile, PCRTUTF16 pwszName, uint32_t fFlags, int rc,
    9292                                                bool *pfWinVerifyTrust, PRTERRINFO pErrInfo);
    93 DECLHIDDEN(int)  supHardenedWinVerifyImageByHandle(HANDLE hFile, PCRTUTF16 pwszName, uint32_t fFlags,
     93DECLHIDDEN(int)  supHardenedWinVerifyImageByHandle(HANDLE hFile, PCRTUTF16 pwszName, uint32_t fFlags, bool fAvoidWinVerifyTrust,
    9494                                                   bool *pfWinVerifyTrust, PRTERRINFO pErrInfo);
    9595DECLHIDDEN(int)  supHardenedWinVerifyImageByHandleNoName(HANDLE hFile, uint32_t fFlags, PRTERRINFO pErrInfo);
    9696DECLHIDDEN(int)  supHardenedWinVerifyImageByLdrMod(RTLDRMOD hLdrMod, PCRTUTF16 pwszName, PSUPHNTVIRDR pNtViRdr,
    97                                                    bool *pfWinVerifyTrust, PRTERRINFO pErrInfo);
     97                                                   bool fAvoidWinVerifyTrust, bool *pfWinVerifyTrust, PRTERRINFO pErrInfo);
    9898/** @name SUPHNTVI_F_XXX - Flags for supHardenedWinVerifyImageByHandle.
    9999 * @{ */
  • trunk/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp

    r52627 r52634  
    10441044 *                              error/logging.
    10451045 * @param   pNtViRdr            The reader instance /w flags.
     1046 * @param   fAvoidWinVerifyTrust Whether to avoid WinVerifyTrust because of
     1047 *                              deadlock or other loader related dangers.
    10461048 * @param   pfWinVerifyTrust    Where to return whether WinVerifyTrust was used.
    10471049 * @param   pErrInfo            Pointer to error info structure. Optional.
    10481050 */
    10491051DECLHIDDEN(int) supHardenedWinVerifyImageByLdrMod(RTLDRMOD hLdrMod, PCRTUTF16 pwszName, PSUPHNTVIRDR pNtViRdr,
    1050                                                   bool *pfWinVerifyTrust, PRTERRINFO pErrInfo)
     1052                                                  bool fAvoidWinVerifyTrust, bool *pfWinVerifyTrust, PRTERRINFO pErrInfo)
    10511053{
    10521054    if (pfWinVerifyTrust)
     
    11501152     * Pass it thru WinVerifyTrust when possible.
    11511153     */
    1152     rc = supHardenedWinVerifyImageTrust(pNtViRdr->hFile, pwszName, pNtViRdr->fFlags, rc, pfWinVerifyTrust, pErrInfo);
     1154    if (!fAvoidWinVerifyTrust)
     1155        rc = supHardenedWinVerifyImageTrust(pNtViRdr->hFile, pwszName, pNtViRdr->fFlags, rc, pfWinVerifyTrust, pErrInfo);
    11531156#endif
    11541157
     
    11741177 *                              error/logging.
    11751178 * @param   fFlags              Flags, SUPHNTVI_F_XXX.
     1179 * @param   fAvoidWinVerifyTrust Whether to avoid WinVerifyTrust because of
     1180 *                              deadlock or other loader related dangers.
    11761181 * @param   pfWinVerifyTrust    Where to return whether WinVerifyTrust was used.
    11771182 * @param   pErrInfo            Pointer to error info structure. Optional.
    11781183 */
    1179 DECLHIDDEN(int) supHardenedWinVerifyImageByHandle(HANDLE hFile, PCRTUTF16 pwszName, uint32_t fFlags,
     1184DECLHIDDEN(int) supHardenedWinVerifyImageByHandle(HANDLE hFile, PCRTUTF16 pwszName, uint32_t fFlags, bool fAvoidWinVerifyTrust,
    11801185                                                  bool *pfWinVerifyTrust, PRTERRINFO pErrInfo)
    11811186{
     
    12001205             * Verify it.
    12011206             */
    1202             rc = supHardenedWinVerifyImageByLdrMod(hLdrMod, pwszName, pNtViRdr, pfWinVerifyTrust, pErrInfo);
     1207            rc = supHardenedWinVerifyImageByLdrMod(hLdrMod, pwszName, pNtViRdr, fAvoidWinVerifyTrust, pfWinVerifyTrust, pErrInfo);
    12031208            int rc2 = RTLdrClose(hLdrMod); AssertRC(rc2);
    12041209        }
     
    12451250        uBuf.UniStr.Buffer = (WCHAR *)L"TODO3";
    12461251
    1247     return supHardenedWinVerifyImageByHandle(hFile, uBuf.UniStr.Buffer, fFlags, NULL /*pfWinVerifyTrust*/, pErrInfo);
     1252    return supHardenedWinVerifyImageByHandle(hFile, uBuf.UniStr.Buffer, fFlags, false /*fAvoidWinVerifyTrust*/,
     1253                                             NULL /*pfWinVerifyTrust*/, pErrInfo);
    12481254}
    12491255#endif /* IN_RING3 */
  • trunk/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp

    r52529 r52634  
    15771577    if (!pEntry->fVerified)
    15781578    {
    1579         rc = supHardenedWinVerifyImageByLdrMod(pEntry->hLdrMod, pwszName, pEntry->pNtViRdr, NULL /*pfWinVerifyTrust*/, pErrInfo);
     1579        rc = supHardenedWinVerifyImageByLdrMod(pEntry->hLdrMod, pwszName, pEntry->pNtViRdr,
     1580                                               false /*fAvoidWinVerifyTrust*/, NULL /*pfWinVerifyTrust*/, pErrInfo);
    15801581        pEntry->fVerified = RT_SUCCESS(rc);
    15811582    }
  • trunk/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp

    r52633 r52634  
    14361436    int  rc;
    14371437    bool fWinVerifyTrust = false;
    1438     rc = supHardenedWinVerifyImageByHandle(hMyFile, uBuf.UniStr.Buffer, fFlags, &fWinVerifyTrust, &ErrInfo);
     1438    rc = supHardenedWinVerifyImageByHandle(hMyFile, uBuf.UniStr.Buffer, fFlags, fAvoidWinVerifyTrust, &fWinVerifyTrust, &ErrInfo);
    14391439    if (RT_FAILURE(rc))
    14401440    {
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