VirtualBox

Ignore:
Timestamp:
Aug 29, 2014 9:55:38 AM (10 years ago)
Author:
vboxsync
Message:

SUP: Try reduce the number of error messages about the same DLL.

File:
1 edited

Legend:

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

    r52524 r52528  
    137137    /** The verification result. */
    138138    int                     rc;
     139    /** Used for shutting up errors after a while. */
     140    uint32_t volatile       cErrorHits;
    139141    /** The validation flags (for WinVerifyTrust retry). */
    140142    uint32_t                fFlags;
     
    231233*******************************************************************************/
    232234static NTSTATUS supR3HardenedScreenImage(HANDLE hFile, bool fImage, PULONG pfAccess, PULONG pfProtect,
    233                                          bool *pfCallRealApi, const char *pszCaller, bool fAvoidWinVerifyTrust);
     235                                         bool *pfCallRealApi, const char *pszCaller, bool fAvoidWinVerifyTrust,
     236                                         bool *pfQuietFailure);
    234237
    235238#ifdef RT_ARCH_AMD64
     
    514517        pEntry->pNextTodoWvt    = NULL;
    515518        pEntry->hFile           = hFile;
     519        pEntry->uHash           = supR3HardenedWinVerifyCacheHashPath(pUniStr);
    516520        pEntry->rc              = rc;
    517         pEntry->uHash           = supR3HardenedWinVerifyCacheHashPath(pUniStr);
    518521        pEntry->fFlags          = fFlags;
     522        pEntry->cErrorHits      = 0;
    519523        pEntry->fWinVerifyTrust = fWinVerifyTrust;
    520524        pEntry->cbPath          = pUniStr->Length;
     
    874878                    bool  fCallRealApi = false;
    875879                    rcNt = supR3HardenedScreenImage(hFile, true /*fImage*/, &fAccess, &fProtect, &fCallRealApi,
    876                                                     "Imports", false /*fAvoidWinVerifyTrust*/);
     880                                                    "Imports", false /*fAvoidWinVerifyTrust*/, NULL /*pfQuietFailure*/);
    877881                    NtClose(hFile);
    878882                }
     
    10971101
    10981102static NTSTATUS supR3HardenedScreenImage(HANDLE hFile, bool fImage, PULONG pfAccess, PULONG pfProtect,
    1099                                          bool *pfCallRealApi, const char *pszCaller, bool fAvoidWinVerifyTrust)
     1103                                         bool *pfCallRealApi, const char *pszCaller, bool fAvoidWinVerifyTrust,
     1104                                         bool *pfQuietFailure)
    11001105{
    11011106    *pfCallRealApi = false;
     1107    if (pfQuietFailure)
     1108        *pfQuietFailure = false;
    11021109
    11031110    /*
     
    11611168                             pszCaller, pCacheHit->rc, pCacheHit->wszPath));
    11621169        }
    1163         else
     1170        else if (pCacheHit->cErrorHits < 16)
    11641171            SUP_DPRINTF(("supR3HardenedScreenImage/%s: cache hit (%Rrc) on %ls%s\n",
    11651172                         pszCaller, pCacheHit->rc, pCacheHit->wszPath, pCacheHit->fWinVerifyTrust ? "" : " [lacks WinVerifyTrust]"));
     
    11711178            return STATUS_SUCCESS;
    11721179        }
    1173         supR3HardenedError(VINF_SUCCESS, false,
    1174                            "supR3HardenedScreenImage/%s: cached rc=%Rrc fImage=%d fProtect=%#x fAccess=%#x %ls\n",
    1175                            pszCaller, pCacheHit->rc, fImage, *pfProtect, *pfAccess, uBuf.UniStr.Buffer);
     1180
     1181        uint32_t cErrorHits = ASMAtomicIncU32(&pCacheHit->cErrorHits);
     1182        if (   cErrorHits < 8
     1183            || RT_IS_POWER_OF_TWO(cErrorHits))
     1184            supR3HardenedError(VINF_SUCCESS, false,
     1185                               "supR3HardenedScreenImage/%s: cached rc=%Rrc fImage=%d fProtect=%#x fAccess=%#x cErrorHits=%u %ls\n",
     1186                               pszCaller, pCacheHit->rc, fImage, *pfProtect, *pfAccess, cErrorHits, uBuf.UniStr.Buffer);
     1187        else if (pfQuietFailure)
     1188            *pfQuietFailure = true;
     1189
    11761190        return STATUS_TRUST_FAILURE;
    11771191    }
     
    14211435    bool  fCallRealApi;
    14221436    //SUP_DPRINTF(("supR3HardenedWinVerifyCachePreload: scanning %ls\n", pwszName));
    1423     supR3HardenedScreenImage(hFile, false, &fAccess, &fProtect, &fCallRealApi, "preload", false /*fAvoidWinVerifyTrust*/);
     1437    supR3HardenedScreenImage(hFile, false, &fAccess, &fProtect, &fCallRealApi, "preload", false /*fAvoidWinVerifyTrust*/,
     1438                             NULL /*pfQuietFailure*/);
    14241439    //SUP_DPRINTF(("supR3HardenedWinVerifyCachePreload: done %ls\n", pwszName));
    14251440
     
    14591474            //SUP_DPRINTF(("supR3HardenedMonitor_NtCreateSection: 1\n"));
    14601475            NTSTATUS rcNt = supR3HardenedScreenImage(hFile, fImage, &fAccess, &fProtect, &fCallRealApi,
    1461                                                      "NtCreateSection", true /*fAvoidWinVerifyTrust*/);
     1476                                                     "NtCreateSection", true /*fAvoidWinVerifyTrust*/, NULL /*pfQuietFailure*/);
    14621477            //SUP_DPRINTF(("supR3HardenedMonitor_NtCreateSection: 2 rcNt=%#x fCallRealApi=%#x\n", rcNt, fCallRealApi));
    14631478
     
    16531668            ULONG fProtect = 0;
    16541669            bool  fCallRealApi = false;
     1670            bool  fQuietFailure = false;
    16551671            rcNt = supR3HardenedScreenImage(hFile, true /*fImage*/, &fAccess, &fProtect, &fCallRealApi,
    1656                                             "LdrLoadDll", false /*fAvoidWinVerifyTrust*/);
     1672                                            "LdrLoadDll", false /*fAvoidWinVerifyTrust*/, &fQuietFailure);
    16571673            NtClose(hFile);
    16581674            if (!NT_SUCCESS(rcNt))
    16591675            {
    1660                 supR3HardenedError(VINF_SUCCESS, false, "supR3HardenedMonitor_LdrLoadDll: rejecting '%ls': rcNt=%#x\n", wszPath, rcNt);
    1661                 SUP_DPRINTF(("supR3HardenedMonitor_LdrLoadDll: returns rcNt=%#x '%ls'\n", rcNt, wszPath));
     1676                if (!fQuietFailure)
     1677                {
     1678                    supR3HardenedError(VINF_SUCCESS, false, "supR3HardenedMonitor_LdrLoadDll: rejecting '%ls': rcNt=%#x\n",
     1679                                       wszPath, rcNt);
     1680                    SUP_DPRINTF(("supR3HardenedMonitor_LdrLoadDll: returns rcNt=%#x '%ls'\n", rcNt, wszPath));
     1681                }
    16621682                return rcNt;
    16631683            }
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