VirtualBox

Changeset 6354 in vbox for trunk/src/VBox/Additions/common


Ignore:
Timestamp:
Jan 15, 2008 10:32:07 AM (17 years ago)
Author:
vboxsync
Message:

Solaris: handle HGCM and backdoor logging in vboxadd.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c

    r6346 r6354  
    2121*******************************************************************************/
    2222#include <sys/conf.h>
    23 #include <sys/cmn_err.h>
    2423#include <sys/modctl.h>
    2524#include <sys/mutex.h>
     
    3534#include "VBoxGuestInternal.h"
    3635#include <VBox/log.h>
    37 #include <iprt/asm.h>
    3836#include <iprt/assert.h>
    3937#include <iprt/initterm.h>
     
    567565        }
    568566        *pDev = makedevice(getmajor(*pDev), instance);
    569         Log((DEVICE_NAME "VBoxAddSolarisOpen: g_DevExt=%p pSession=%p rc=%d pid=%d\n", &g_DevExt, pSession, rc, (int)RTProcSelf()));
     567        Log((DEVICE_NAME ":VBoxAddSolarisOpen success: g_DevExt=%p pSession=%p rc=%d pid=%d\n", &g_DevExt, pSession, rc, (int)RTProcSelf()));
    570568        return 0;
    571569    }
     
    737735        cbBuf = sizeof(VMMDevRequestHeader);
    738736        requestType = 1;
    739         LogFlow((DEVICE_NAME ":VBOXGUEST_IOCTL_VMMREQUEST"));
     737        LogFlow((DEVICE_NAME ":VBOXGUEST_IOCTL_VMMREQUEST %#x", Cmd));
    740738    }
    741739#ifdef VBOX_HGCM
     
    744742        cbBuf = sizeof(VBoxGuestHGCMCallInfo);
    745743        requestType = 2;
    746         LogFlow((DEVICE_NAME ":VBOXGUEST_IOCTL_HGCM_CALL", Cmd));
     744        LogFlow((DEVICE_NAME ":VBOXGUEST_IOCTL_HGCM_CALL %#x", Cmd));
    747745    }
    748746#endif /* VBOX_HGCM */
    749747    else if (VBOXGUEST_IOCTL_NUMBER(Cmd) == VBOXGUEST_IOCTL_NUMBER(VBOXGUEST_IOCTL_LOG(0)))
    750748    {
    751         /** Untested Code. Will be tested soon. */
    752749        cbBuf = VBOXGUEST_IOCTL_SIZE(Cmd);
    753         LogFlow((DEVICE_NAME ":VBOXGUEST_IOCTL_LOG Cmd=%#x cbBuf=%d", Cmd, cbBuf));       
    754         char* pszLogMsg = RTMemTmpAlloc(cbBuf);
     750        LogFlow((DEVICE_NAME ":VBOXGUEST_IOCTL_LOG Cmd=%#x cbBuf=%d", Cmd, cbBuf));
     751        char *pszLogMsg = RTMemTmpAlloc(cbBuf);
    755752        if (RT_UNLIKELY(!pszLogMsg))
    756753        {
     
    759756        }
    760757        rc = ddi_copyin((void *)pArg, pszLogMsg, cbBuf, Mode);
    761         if (rc == 0)
     758        if (RT_UNLIKELY(rc))
     759            LogRel((DEVICE_NAME ":ddi_copyin failed. rc=%d\n", rc));
     760        else
    762761            Log(("%.*s", cbBuf, pszLogMsg));
    763         else
    764             LogRel((DEVICE_NAME ":ddi_copyin failed. rc=%d\n", rc));
    765762        RTMemTmpFree(pszLogMsg);
     763        return rc;
    766764    }
    767765    else
     
    808806        }
    809807    }
    810     if (RT_UNLIKELY(cbBuf > IOCPARM_LEN(Cmd)))
    811     {
    812         LogRel((DEVICE_NAME ":VBoxAddSolarisIOCtl: buffer size mismatch. size=%d expected=%d.\n", IOCPARM_LEN(Cmd), cbBuf));
    813         return EINVAL;
    814     }
    815808
    816809    /*
     
    834827        }
    835828    }
    836     /** @todo handle HGCM calls. */
     829    else if (requestType == 2)
     830    {
     831        VBoxGuestHGCMCallInfo Hdr;
     832        rc = ddi_copyin((void *)pArg, &Hdr, sizeof(Hdr), Mode);
     833        if (RT_UNLIKELY(rc))
     834        {
     835            Log((DEVICE_NAME ":VBoxAddSolarisIOCtl: ddi_copyin failed to read header pArg=%p Cmd=%d. rc=%d.\n", pArg, Cmd, rc));
     836            return EINVAL;
     837        }
     838
     839        if (RT_UNLIKELY(Hdr.cParms <= 0))
     840        {
     841            Log((DEVICE_NAME ":VBoxAddSolarisIOCtl: Invalid request size. cParms=%d in HCGM call info header.\n", Hdr.cParms));
     842            return EINVAL;
     843        }
     844        cbBuf += Hdr.cParms * sizeof(HGCMFunctionParameter);
     845    }
    837846
    838847    /*
     
    901910    int rc;
    902911    VBoxAddDevState *pState = (VBoxAddDevState *)pvState;
    903     LogFlow((DEVICE_NAME "VBoxGuestSolarisAddIRQ\n"));
     912    LogFlow((DEVICE_NAME ":VBoxGuestSolarisAddIRQ %p\n", pvState));
    904913
    905914    /*
     
    930939static void VBoxGuestSolarisRemoveIRQ(dev_info_t *pDip, void *pvState)
    931940{
    932     LogFlow((DEVICE_NAME ":VBoxGuestSolarisRemoveIRQ\n"));
     941    LogFlow((DEVICE_NAME ":VBoxGuestSolarisRemoveIRQ pvState=%p\n"));
    933942
    934943    VBoxAddDevState *pState = (VBoxAddDevState *)pvState;
     
    945954static uint_t VBoxGuestSolarisISR(caddr_t Arg)
    946955{
    947     LogFlow((DEVICE_NAME ":VBoxGuestSolarisISR\n"));
     956    LogFlow((DEVICE_NAME ":VBoxGuestSolarisISR Arg=%p\n", Arg));
    948957
    949958    VBoxAddDevState *pState = (VBoxAddDevState *)Arg;
     
    968977DECLVBGL(int) VBoxGuestSolarisServiceCall(void *pvSession, unsigned iCmd, void *pvData, size_t cbData, size_t *pcbDataReturned)
    969978{
    970     LogFlow((DEVICE_NAME ":VBoxGuestSolarisServiceCall\n"));
     979    LogFlow((DEVICE_NAME ":VBoxGuestSolarisServiceCall %pvSesssion=%p Cmd=%u pvData=%p cbData=%d\n", pvSession, iCmd, pvData, cbData));
    971980
    972981    PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)pvSession;
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