VirtualBox

Changeset 13871 in vbox


Ignore:
Timestamp:
Nov 5, 2008 2:45:31 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
38869
Message:

VMMR0EntryFast: Always validate idCpu.

Location:
trunk
Files:
5 edited

Legend:

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

    r13858 r13871  
    277277
    278278VMMR0DECL(int)      VMMR0EntryInt(PVM pVM, VMMR0OPERATION enmOperation, void *pvArg);
    279 VMMR0DECL(void)     VMMR0EntryFast(PVM pVM, unsigned idCPU, VMMR0OPERATION enmOperation);
     279VMMR0DECL(void)     VMMR0EntryFast(PVM pVM, unsigned idCpu, VMMR0OPERATION enmOperation);
    280280VMMR0DECL(int)      VMMR0EntryEx(PVM pVM, VMMR0OPERATION enmOperation, PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION);
    281281VMMR0DECL(int)      VMMR0CallHost(PVM pVM, VMMCALLHOST enmOperation, uint64_t uArg);
  • trunk/src/VBox/HostDrivers/Support/SUPDrv.c

    r13858 r13871  
    155155#ifdef RT_WITH_W64_UNWIND_HACK
    156156DECLASM(int)    supdrvNtWrapVMMR0EntryEx(PFNRT pfnVMMR0EntryEx, PVM pVM, unsigned uOperation, PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION pSession);
    157 DECLASM(int)    supdrvNtWrapVMMR0EntryFast(PFNRT pfnVMMR0EntryFast, PVM pVM, unsigned idCPU, unsigned uOperation);
     157DECLASM(int)    supdrvNtWrapVMMR0EntryFast(PFNRT pfnVMMR0EntryFast, PVM pVM, unsigned idCpu, unsigned uOperation);
    158158DECLASM(void)   supdrvNtWrapObjDestructor(PFNRT pfnDestruction, void *pvObj, void *pvUser1, void *pvUser2);
    159159DECLASM(void *) supdrvNtWrapQueryFactoryInterface(PFNRT pfnQueryFactoryInterface, struct SUPDRVFACTORY const *pSupDrvFactory, PSUPDRVSESSION pSession, const char *pszInterfaceUuid);
     
    861861 * @returns VBox status code that should be passed down to ring-3 unchanged.
    862862 * @param   uIOCtl      Function number.
    863  * @param   idCPU       VMCPU id.
     863 * @param   idCpu       VMCPU id.
    864864 * @param   pDevExt     Device extention.
    865865 * @param   pSession    Session data.
    866866 */
    867 int VBOXCALL supdrvIOCtlFast(uintptr_t uIOCtl, unsigned idCPU, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession)
     867int VBOXCALL supdrvIOCtlFast(uintptr_t uIOCtl, unsigned idCpu, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession)
    868868{
    869869    /*
     
    876876            case SUP_IOCTL_FAST_DO_RAW_RUN:
    877877#ifdef RT_WITH_W64_UNWIND_HACK
    878                 supdrvNtWrapVMMR0EntryFast((PFNRT)pDevExt->pfnVMMR0EntryFast, pSession->pVM, idCPU, SUP_VMMR0_DO_RAW_RUN);
     878                supdrvNtWrapVMMR0EntryFast((PFNRT)pDevExt->pfnVMMR0EntryFast, pSession->pVM, idCpu, SUP_VMMR0_DO_RAW_RUN);
    879879#else
    880                 pDevExt->pfnVMMR0EntryFast(pSession->pVM, idCPU, SUP_VMMR0_DO_RAW_RUN);
     880                pDevExt->pfnVMMR0EntryFast(pSession->pVM, idCpu, SUP_VMMR0_DO_RAW_RUN);
    881881#endif
    882882                break;
    883883            case SUP_IOCTL_FAST_DO_HWACC_RUN:
    884884#ifdef RT_WITH_W64_UNWIND_HACK
    885                 supdrvNtWrapVMMR0EntryFast((PFNRT)pDevExt->pfnVMMR0EntryFast, pSession->pVM, idCPU, SUP_VMMR0_DO_HWACC_RUN);
     885                supdrvNtWrapVMMR0EntryFast((PFNRT)pDevExt->pfnVMMR0EntryFast, pSession->pVM, idCpu, SUP_VMMR0_DO_HWACC_RUN);
    886886#else
    887                 pDevExt->pfnVMMR0EntryFast(pSession->pVM, idCPU, SUP_VMMR0_DO_HWACC_RUN);
     887                pDevExt->pfnVMMR0EntryFast(pSession->pVM, idCpu, SUP_VMMR0_DO_HWACC_RUN);
    888888#endif
    889889                break;
    890890            case SUP_IOCTL_FAST_DO_NOP:
    891891#ifdef RT_WITH_W64_UNWIND_HACK
    892                 supdrvNtWrapVMMR0EntryFast((PFNRT)pDevExt->pfnVMMR0EntryFast, pSession->pVM, idCPU, SUP_VMMR0_DO_NOP);
     892                supdrvNtWrapVMMR0EntryFast((PFNRT)pDevExt->pfnVMMR0EntryFast, pSession->pVM, idCpu, SUP_VMMR0_DO_NOP);
    893893#else
    894                 pDevExt->pfnVMMR0EntryFast(pSession->pVM, idCPU, SUP_VMMR0_DO_NOP);
     894                pDevExt->pfnVMMR0EntryFast(pSession->pVM, idCpu, SUP_VMMR0_DO_NOP);
    895895#endif
    896896                break;
  • trunk/src/VBox/HostDrivers/Support/SUPDrvInternal.h

    r13858 r13871  
    647647    DECLR0CALLBACKMEMBER(int, pfnVMMR0EntryInt, (PVM pVM, unsigned uOperation, void *pvArg));
    648648    /** VMMR0EntryFast() pointer. */
    649     DECLR0CALLBACKMEMBER(void, pfnVMMR0EntryFast, (PVM pVM, unsigned idCPU, unsigned uOperation));
     649    DECLR0CALLBACKMEMBER(void, pfnVMMR0EntryFast, (PVM pVM, unsigned idCpu, unsigned uOperation));
    650650    /** VMMR0EntryEx() pointer. */
    651651    DECLR0CALLBACKMEMBER(int, pfnVMMR0EntryEx, (PVM pVM, unsigned uOperation, PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION pSession));
     
    703703*******************************************************************************/
    704704int  VBOXCALL   supdrvIOCtl(uintptr_t uIOCtl, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPREQHDR pReqHdr);
    705 int  VBOXCALL   supdrvIOCtlFast(uintptr_t uIOCtl, unsigned idCPU, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession);
     705int  VBOXCALL   supdrvIOCtlFast(uintptr_t uIOCtl, unsigned idCpu, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession);
    706706int  VBOXCALL   supdrvIDC(uintptr_t uIOCtl, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPDRVIDCREQHDR pReqHdr);
    707707int  VBOXCALL   supdrvInitDevExt(PSUPDRVDEVEXT pDevExt);
  • trunk/src/VBox/HostDrivers/Support/SUPLib.cpp

    r13858 r13871  
    565565
    566566
    567 SUPR3DECL(int) SUPCallVMMR0Fast(PVMR0 pVMR0, unsigned uOperation, unsigned idCPU)
     567SUPR3DECL(int) SUPCallVMMR0Fast(PVMR0 pVMR0, unsigned uOperation, unsigned idCpu)
    568568{
    569569    if (RT_LIKELY(uOperation == SUP_VMMR0_DO_RAW_RUN))
    570         return suplibOsIOCtlFast(&g_supLibData, SUP_IOCTL_FAST_DO_RAW_RUN, idCPU);
     570        return suplibOsIOCtlFast(&g_supLibData, SUP_IOCTL_FAST_DO_RAW_RUN, idCpu);
    571571    if (RT_LIKELY(uOperation == SUP_VMMR0_DO_HWACC_RUN))
    572         return suplibOsIOCtlFast(&g_supLibData, SUP_IOCTL_FAST_DO_HWACC_RUN, idCPU);
     572        return suplibOsIOCtlFast(&g_supLibData, SUP_IOCTL_FAST_DO_HWACC_RUN, idCpu);
    573573    if (RT_LIKELY(uOperation == SUP_VMMR0_DO_NOP))
    574         return suplibOsIOCtlFast(&g_supLibData, SUP_IOCTL_FAST_DO_NOP, idCPU);
     574        return suplibOsIOCtlFast(&g_supLibData, SUP_IOCTL_FAST_DO_NOP, idCpu);
    575575
    576576    AssertMsgFailed(("%#x\n", uOperation));
  • trunk/src/VBox/VMM/VMMR0/VMMR0.cpp

    r13858 r13871  
    566566 * @param   pVM             The VM to operate on.
    567567 *                          The return code is stored in pVM->vmm.s.iLastGZRc.
    568  * @param   idCPU           VMCPU id.
     568 * @param   idCpu           VMCPU id.
    569569 * @param   enmOperation    Which operation to execute.
    570570 * @remarks Assume called with interrupts _enabled_.
    571571 */
    572 VMMR0DECL(void) VMMR0EntryFast(PVM pVM, unsigned idCPU, VMMR0OPERATION enmOperation)
    573 {
     572VMMR0DECL(void) VMMR0EntryFast(PVM pVM, unsigned idCpu, VMMR0OPERATION enmOperation)
     573{
     574    if (RT_UNLIKELY(idCpu >= pVM->cCPUs))
     575    {
     576        pVM->vmm.s.iLastGZRc = VERR_INVALID_PARAMETER;
     577        return;
     578    }
     579
    574580    switch (enmOperation)
    575581    {
     
    621627
    622628            STAM_COUNTER_INC(&pVM->vmm.s.StatRunRC);
    623 
    624             if (idCPU >= pVM->cCPUs)
    625             {
    626                 pVM->vmm.s.iLastGZRc = VERR_INVALID_PARAMETER;
    627                 return;
    628             }
    629629
    630630#ifndef RT_OS_WINDOWS /** @todo check other hosts */
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