VirtualBox

Changeset 75053 in vbox for trunk/src/VBox/HostDrivers


Ignore:
Timestamp:
Oct 24, 2018 7:08:56 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
126100
Message:

IPRT,SUPDrv: Made the verification code link, fixed a couple of assertions. Seems to work for VMMR0 now. bugref:9232

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/Makefile.kmk

    r74767 r75053  
    124124                "$@")
    125125# The build certificate.
    126 if "$(KBUILD_TARGET)" == "win" && defined(VBOX_WITH_HARDENING) && defined(VBOX_SIGNING_MODE)
     126if  ("$(KBUILD_TARGET)" == "win" && defined(VBOX_WITH_HARDENING) && defined(VBOX_SIGNING_MODE)) \
     127 || ("$(KBUILD_TARGET)" == "darwin" && defined(VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION) && defined(VBOX_SIGNING_MODE))
    127128        $(VBOX_RTSIGNTOOL) extract-exe-signer-cert --exe $(VBOX_RTSIGNTOOL) --output "[email protected]" --der
    128129        $(VBOX_BIN2C) -ascii --append SUPBuildCert "[email protected]" $@
     
    619620  VBoxDrv_DEFS.darwin    += VBOX_WITH_RAW_MODE
    620621 endif
     622 ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
     623  VBoxDrv_DEFS.darwin    += VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
     624 endif
    621625 ifdef VBOX_WITH_NETFLT
    622626  VBoxDrv_DEFS.solaris   += VBOX_WITH_NETFLT
     
    661665 VBoxDrv_SOURCES.darwin   = \
    662666        darwin/SUPDrv-darwin.cpp
     667 ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
     668  VBoxDrv_SOURCES.darwin += \
     669        $(VBOX_SUP_WIN_CERTS_FILE)
     670 endif
    663671 VBoxDrv_SOURCES.solaris  = \
    664672        solaris/SUPDrv-solaris.c
  • trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp

    r75049 r75053  
    55725572            return VINF_SUCCESS;
    55735573        }
     5574
     5575    if (!strcmp(pszSymbol, "g_SUPGlobalInfoPage"))
     5576    {
     5577        *puValue = (uintptr_t)g_pSUPGlobalInfoPage;
     5578        return VINF_SUCCESS;
     5579    }
     5580
    55745581    return VERR_SYMBOL_NOT_FOUND;
    55755582}
  • trunk/src/VBox/HostDrivers/Support/SUPDrvInternal.h

    r75052 r75053  
    369369    struct module                  *pLnxModHack;
    370370#endif
    371 #if defined(RT_OS_DARWIN)
     371#if defined(RT_OS_DARWIN) && defined(VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION)
    372372    /** Load module handle. */
    373373    RTLDRMOD                        hLdrMod;
     
    795795    /** Callback handle returned by ExRegisterCallback. */
    796796    PVOID                           hPowerCallback;
    797 # elif defined(RT_OS_DARWIN)
     797# elif defined(RT_OS_DARWIN) && defined(VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION)
    798798    /** Trusted root certificates for code signing validation. */
    799799    RTCRSTORE                       hRootStore;
  • trunk/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp

    r75052 r75053  
    101101static kern_return_t    VBoxDrvDarwinStart(struct kmod_info *pKModInfo, void *pvData);
    102102static kern_return_t    VBoxDrvDarwinStop(struct kmod_info *pKModInfo, void *pvData);
    103 #ifdef SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION
     103#ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
    104104static int              supdrvDarwinInitCertStores(PSUPDRVDEVEXT pDevExt);
    105105static void             supdrvDarwinDestroyCertStores(PSUPDRVDEVEXT pDevExt);
     
    286286        if (RT_SUCCESS(rc))
    287287        {
    288 #ifdef SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION
     288#ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
    289289            supdrvDarwinInitCertStores(&g_DevExt);
    290290#endif
     
    353353                        LogRel(("VBoxDrv: cdevsw_add failed (%d)\n", g_iMajorDeviceNo));
    354354                }
    355 #ifdef SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION
     355#ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
    356356                supdrvDarwinDestroyCertStores(&g_DevExt);
    357357#endif
     
    439439
    440440
    441 #ifdef SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION
     441#ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
    442442
    443443/**
     
    495495}
    496496
    497 #endif /* SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION */
     497#endif /* VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION */
    498498
    499499/**
     
    534534    g_Spinlock = NIL_RTSPINLOCK;
    535535
    536 #ifdef SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION
     536#ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
    537537    supdrvDarwinDestroyCertStores(&g_DevExt);
    538538#endif
     
    12231223
    12241224
    1225 #ifdef SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION
     1225#ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
    12261226
    12271227/**
     
    12731273{
    12741274    RT_NOREF(pvUser); //PSUPDRVDEVEXT pDevExt = (PSUPDRVDEVEXT)pvUser;
     1275# ifdef DEBUG_bird
     1276    printf("supdrvDarwinLdrOpenVerifyCertificatCallback: pCert=%p hCertPaths=%p\n", pCert, hCertPaths);
     1277# endif
    12751278
    12761279# if 0
     
    13611364}
    13621365
    1363 #endif /* SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION */
     1366#endif /* VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION */
    13641367
    13651368int  VBOXCALL   supdrvOSLdrOpen(PSUPDRVDEVEXT pDevExt, PSUPDRVLDRIMAGE pImage, const char *pszFilename)
    13661369{
    1367 #ifdef SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION
     1370#ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
    13681371    /*
    13691372     * Initialize our members.
     
    14501453    }
    14511454    return rc;
    1452 #else  /* !SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION */
     1455#else  /* !VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION */
    14531456    NOREF(pDevExt); NOREF(pImage); NOREF(pszFilename);
    14541457    return VERR_NOT_SUPPORTED;
    1455 #endif /* !SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION */
    1456 }
    1457 
    1458 
    1459 #ifdef SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION
     1458#endif /* !VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION */
     1459}
     1460
     1461
     1462#ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
    14601463/**
    14611464 *  @callback_method_impl{FNRTLDRENUMSYMS,
     
    14761479                                           const uint8_t *pbImageBits, const char *pszSymbol)
    14771480{
    1478 #ifdef SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION
     1481#ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
    14791482    AssertReturn(pImage->hLdrMod != NIL_RTLDRMOD, VERR_INVALID_STATE);
    14801483
     
    14851488    if (RT_C_IS_UPPER(*pszSymbol))
    14861489    {
    1487         void *pvFound = NULL;
    1488         rc = RTLdrGetSymbol(pImage->hLdrMod, pszSymbol, &pvFound);
     1490        RTLDRADDR uValueFound;
     1491        rc = RTLdrGetSymbolEx(pImage->hLdrMod, pImage->pvImage, (uintptr_t)pImage->pvImage, UINT32_MAX, pszSymbol, &uValueFound);
    14891492        if (RT_SUCCESS(rc))
    14901493        {
    1491             if (pvFound == pv)
     1494            if (uValueFound == (uintptr_t)pv)
    14921495                rc = VINF_SUCCESS;
    14931496            else
    14941497            {
    1495                 SUPR0Printf("SUPDrv: Different exports found for %s in %s: %p, expected %p\n",
    1496                             pszSymbol, pImage->szName, pvFound, pv);
     1498                SUPR0Printf("SUPDrv: Different exports found for %s in %s: %RTptr, expected %p\n",
     1499                            pszSymbol, pImage->szName, (RTUINTPTR)uValueFound, pv);
    14971500                rc = VERR_LDR_BAD_FIXUP;
    14981501            }
     
    15291532int  VBOXCALL   supdrvOSLdrLoad(PSUPDRVDEVEXT pDevExt, PSUPDRVLDRIMAGE pImage, const uint8_t *pbImageBits, PSUPLDRLOAD pReq)
    15301533{
    1531 #ifdef SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION
     1534#ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
    15321535    /* State paranoia. */
    15331536    AssertReturn(pImage->hLdrMod != NIL_RTLDRMOD, VERR_INVALID_STATE);
     
    15541557void VBOXCALL   supdrvOSLdrUnload(PSUPDRVDEVEXT pDevExt, PSUPDRVLDRIMAGE pImage)
    15551558{
    1556 #ifdef SUPDRV_WITH_DARWIN_IMAGE_VERIFICATION
     1559#ifdef VBOX_WITH_DARWIN_R0_DARWIN_IMAGE_VERIFICATION
    15571560    if (pImage->hLdrMod != NIL_RTLDRMOD)
    15581561    {
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