VirtualBox

Ignore:
Timestamp:
Jul 29, 2016 7:54:03 PM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
109276
Message:

VBoxUsbRt.cpp: Fixed two uninitialized variables caused by slightly complicated while-break loop. Messing up the state of these is dead easy, so they should be shunned along with gotos. Fixed unused warnings.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp

    r62490 r62702  
    33 * VBox USB R0 runtime
    44 */
     5
    56/*
    67 * Copyright (C) 2011-2016 Oracle Corporation
     
    1516 */
    1617
     18/*********************************************************************************************************************************
     19*   Header Files                                                                                                                 *
     20*********************************************************************************************************************************/
    1721#include "VBoxUsbCmn.h"
    1822#include "../cmn/VBoxUsbIdc.h"
     
    2226#include <iprt/assert.h>
    2327#include <VBox/log.h>
    24 #define _USBD_
     28
     29
     30/*********************************************************************************************************************************
     31*   Defined Constants And Macros                                                                                                 *
     32*********************************************************************************************************************************/
     33#define _USBD_ /** @todo r=bird: What is this?? */
    2534
    2635#define USBD_DEFAULT_PIPE_TRANSFER 0x00000008
     
    2837#define VBOXUSB_MAGIC  0xABCF1423
    2938
     39/*********************************************************************************************************************************
     40*   Structures and Typedefs                                                                                                      *
     41*********************************************************************************************************************************/
    3042typedef struct VBOXUSB_URB_CONTEXT
    3143{
     
    4759} VBOXUSB_SETUP, *PVBOXUSB_SETUP;
    4860
     61
     62
    4963static bool vboxUsbRtCtxSetOwner(PVBOXUSBDEV_EXT pDevExt, PFILE_OBJECT pFObj)
    5064{
    51     bool bRc = ASMAtomicCmpXchgPtr(&pDevExt->Rt.pOwner, pFObj, NULL);
    52     if (bRc)
    53     {
     65    bool fRc = ASMAtomicCmpXchgPtr(&pDevExt->Rt.pOwner, pFObj, NULL);
     66    if (fRc)
    5467        LogFunc(("pDevExt (0x%x) Owner(0x%x) acquired\n", pFObj));
    55     }
    5668    else
    57     {
    5869        LogFunc(("pDevExt (0x%x) Owner(0x%x) FAILED!!\n", pFObj));
    59     }
    60     return bRc;
     70    return fRc;
    6171}
    6272
    6373static bool vboxUsbRtCtxReleaseOwner(PVBOXUSBDEV_EXT pDevExt, PFILE_OBJECT pFObj)
    6474{
    65     bool bRc = ASMAtomicCmpXchgPtr(&pDevExt->Rt.pOwner, NULL, pFObj);
    66     if (bRc)
    67     {
     75    bool fRc = ASMAtomicCmpXchgPtr(&pDevExt->Rt.pOwner, NULL, pFObj);
     76    if (fRc)
    6877        LogFunc(("pDevExt (0x%x) Owner(0x%x) released\n", pFObj));
    69     }
    7078    else
    71     {
    7279        LogFunc(("pDevExt (0x%x) Owner(0x%x) release: is NOT an owner\n", pFObj));
    73     }
    74     return bRc;
     80    return fRc;
    7581}
    7682
     
    100106        if (NT_SUCCESS(Status))
    101107        {
    102             if (Version.u32Major == VBOXUSBIDC_VERSION_MAJOR
    103                     && Version.u32Minor >= VBOXUSBIDC_VERSION_MINOR)
     108            if (   Version.u32Major == VBOXUSBIDC_VERSION_MAJOR
     109#if VBOXUSBIDC_VERSION_MINOR != 0
     110                && Version.u32Minor >= VBOXUSBIDC_VERSION_MINOR
     111#endif
     112               )
    104113                return STATUS_SUCCESS;
    105114            AssertFailed();
     
    408417    {
    409418        vboxUsbRtFreeCachedDescriptors(pDevExt);
    410         bool bRc = vboxUsbRtCtxReleaseOwner(pDevExt, pFObj);
    411         Assert(bRc);
     419        bool fRc = vboxUsbRtCtxReleaseOwner(pDevExt, pFObj);
     420        Assert(fRc); NOREF(fRc);
    412421    }
    413422    else
     
    464473{
    465474    PIO_STACK_LOCATION pSl = IoGetCurrentIrpStackLocation(pIrp);
    466     PUSBSUP_GETDEV pDev  = (PUSBSUP_GETDEV)pIrp->AssociatedIrp.SystemBuffer;
    467     NTSTATUS Status = STATUS_SUCCESS;
     475    PUSBSUP_GETDEV pDev = (PUSBSUP_GETDEV)pIrp->AssociatedIrp.SystemBuffer;
    468476    ULONG cbOut = 0;
    469477
    470478    /* don't check for owner since this request is allowed for non-owners as well */
    471 
    472     if (pDev && pSl->Parameters.DeviceIoControl.InputBufferLength == sizeof (*pDev)
    473              && pSl->Parameters.DeviceIoControl.OutputBufferLength == sizeof (*pDev))
     479    NTSTATUS Status;
     480    if (   pDev
     481        && pSl->Parameters.DeviceIoControl.InputBufferLength  == sizeof(*pDev)
     482        && pSl->Parameters.DeviceIoControl.OutputBufferLength == sizeof(*pDev))
    474483    {
    475484        Status = VBoxUsbToolGetDeviceSpeed(pDevExt->pLowerDO, &pDevExt->Rt.fIsHighSpeed);
     
    483492    }
    484493    else
    485     {
    486494        Status = STATUS_INVALID_PARAMETER;
    487     }
    488495
    489496    Assert(Status != STATUS_PENDING);
     
    495502static NTSTATUS vboxUsbRtDispatchUsbReset(PVBOXUSBDEV_EXT pDevExt, PIRP pIrp)
    496503{
    497     PIO_STACK_LOCATION pSl = IoGetCurrentIrpStackLocation(pIrp);
    498     PFILE_OBJECT pFObj = pSl->FileObject;
    499     PUSBSUP_GETDEV pDev  = (PUSBSUP_GETDEV)pIrp->AssociatedIrp.SystemBuffer;
    500     NTSTATUS Status = STATUS_SUCCESS;
    501 
    502     do
    503     {
    504         if (!pFObj)
     504    PIO_STACK_LOCATION  pSl   = IoGetCurrentIrpStackLocation(pIrp);
     505    PFILE_OBJECT        pFObj = pSl->FileObject;
     506    NTSTATUS            rcNt;
     507    if (pFObj)
     508    {
     509        if (vboxUsbRtCtxIsOwner(pDevExt, pFObj))
     510        {
     511            if (   pIrp->AssociatedIrp.SystemBuffer == NULL
     512                && pSl->Parameters.DeviceIoControl.InputBufferLength == 0
     513                && pSl->Parameters.DeviceIoControl.OutputBufferLength == 0)
     514            {
     515                rcNt = VBoxUsbToolIoInternalCtlSendSync(pDevExt->pLowerDO, IOCTL_INTERNAL_USB_RESET_PORT, NULL, NULL);
     516                Assert(NT_SUCCESS(rcNt));
     517            }
     518            else
     519            {
     520                AssertFailed();
     521                rcNt = STATUS_INVALID_PARAMETER;
     522            }
     523        }
     524        else
    505525        {
    506526            AssertFailed();
    507             Status = STATUS_INVALID_PARAMETER;
    508             break;
    509         }
    510 
    511         if (!vboxUsbRtCtxIsOwner(pDevExt, pFObj))
    512         {
    513             AssertFailed();
    514             Status = STATUS_ACCESS_DENIED;
    515             break;
    516         }
    517 
    518         if (pIrp->AssociatedIrp.SystemBuffer
    519                 || pSl->Parameters.DeviceIoControl.InputBufferLength
    520                 || pSl->Parameters.DeviceIoControl.OutputBufferLength)
    521         {
    522             AssertFailed();
    523             Status = STATUS_INVALID_PARAMETER;
    524             break;
    525         }
    526 
    527         Status = VBoxUsbToolIoInternalCtlSendSync(pDevExt->pLowerDO, IOCTL_INTERNAL_USB_RESET_PORT, NULL, NULL);
    528         Assert(NT_SUCCESS(Status));
    529     } while (0);
    530 
    531     Assert(Status != STATUS_PENDING);
    532     VBoxDrvToolIoComplete(pIrp, Status, 0);
     527            rcNt = STATUS_ACCESS_DENIED;
     528        }
     529    }
     530    else
     531    {
     532        AssertFailed();
     533        rcNt = STATUS_INVALID_PARAMETER;
     534    }
     535
     536    Assert(rcNt != STATUS_PENDING);
     537    VBoxDrvToolIoComplete(pIrp, rcNt, 0);
    533538    vboxUsbDdiStateRelease(pDevExt);
    534     return Status;
     539    return rcNt;
    535540}
    536541
     
    770775    NTSTATUS Status = STATUS_SUCCESS;
    771776    PURB pUrb;
    772     PUSBD_INTERFACE_INFORMATION pNewIFInfo;
    773     VBOXUSB_PIPE_INFO *pNewPipeInfo;
     777    PUSBD_INTERFACE_INFORMATION pNewIFInfo = NULL;
     778    VBOXUSB_PIPE_INFO *pNewPipeInfo = NULL;
    774779
    775780    if (pDevExt->Rt.pVBIfaceInfo[InterfaceNumber].pInterfaceInfo)
     
    898903{
    899904    if (EndPointAddress == 0)
    900     {
    901905        return pDevExt->Rt.hPipe0;
    902     }
    903906
    904907    for (ULONG i = 0; i < pDevExt->Rt.uNumInterfaces; i++)
     
    10261029static NTSTATUS vboxUsbRtUrbSendCompletion(PDEVICE_OBJECT pDevObj, IRP *pIrp, void *pvContext)
    10271030{
     1031    RT_NOREF1(pDevObj);
     1032
    10281033    if (!pvContext)
    10291034    {
     
    10761081            default:
    10771082                pUrbInfo->error = USBSUP_XFER_DNR;
    1078             break;
     1083                break;
    10791084        }
    10801085
     
    13001305                 * data length is therefore pUrb->len - 8
    13011306                 */
    1302                 PVBOXUSB_SETUP pSetup = (PVBOXUSB_SETUP)pUrb->UrbControlTransfer.SetupPacket;
     1307                //PVBOXUSB_SETUP pSetup = (PVBOXUSB_SETUP)pUrb->UrbControlTransfer.SetupPacket;
    13031308                memcpy(pUrb->UrbControlTransfer.SetupPacket, pBuffer, min(sizeof (pUrb->UrbControlTransfer.SetupPacket), pUrbInfo->len));
    13041309
     
    14881493    NTSTATUS Status = STATUS_SUCCESS;
    14891494
    1490     if (pVer && pSl->Parameters.DeviceIoControl.InputBufferLength == 0
    1491              && pSl->Parameters.DeviceIoControl.OutputBufferLength == sizeof (*pVer))
     1495    if (   pVer
     1496        && pSl->Parameters.DeviceIoControl.InputBufferLength == 0
     1497        && pSl->Parameters.DeviceIoControl.OutputBufferLength == sizeof(*pVer))
    14921498    {
    14931499        pVer->u32Major = USBDRV_MAJOR_VERSION;
     
    15151521DECLHIDDEN(NTSTATUS) vboxUsbRtCreate(PVBOXUSBDEV_EXT pDevExt, PIRP pIrp)
    15161522{
     1523    RT_NOREF1(pDevExt);
    15171524    PIO_STACK_LOCATION pSl = IoGetCurrentIrpStackLocation(pIrp);
    15181525    PFILE_OBJECT pFObj = pSl->FileObject;
    1519     if (!pFObj)
    1520     {
    1521         AssertFailed();
    1522         return STATUS_INVALID_PARAMETER;
    1523     }
    1524 
     1526    AssertReturn(pFObj, STATUS_INVALID_PARAMETER);
    15251527    return STATUS_SUCCESS;
    15261528}
     
    15431545    {
    15441546        case SUPUSB_IOCTL_USB_CLAIM_DEVICE:
    1545         {
    15461547            return vboxUsbRtDispatchClaimDevice(pDevExt, pIrp);
    1547         }
     1548
    15481549        case SUPUSB_IOCTL_USB_RELEASE_DEVICE:
    1549         {
    15501550            return vboxUsbRtDispatchReleaseDevice(pDevExt, pIrp);
    1551         }
     1551
    15521552        case SUPUSB_IOCTL_GET_DEVICE:
    1553         {
    15541553            return vboxUsbRtDispatchGetDevice(pDevExt, pIrp);
    1555         }
     1554
    15561555        case SUPUSB_IOCTL_USB_RESET:
    1557         {
    15581556            return vboxUsbRtDispatchUsbReset(pDevExt, pIrp);
    1559         }
     1557
    15601558        case SUPUSB_IOCTL_USB_SET_CONFIG:
    1561         {
    15621559            return vboxUsbRtDispatchUsbSetConfig(pDevExt, pIrp);
    1563         }
     1560
    15641561        case SUPUSB_IOCTL_USB_SELECT_INTERFACE:
    1565         {
    15661562            return vboxUsbRtDispatchUsbSelectInterface(pDevExt, pIrp);
    1567         }
     1563
    15681564        case SUPUSB_IOCTL_USB_CLEAR_ENDPOINT:
    1569         {
    15701565            return vboxUsbRtDispatchUsbClearEndpoint(pDevExt, pIrp);
    1571         }
     1566
    15721567        case SUPUSB_IOCTL_USB_ABORT_ENDPOINT:
    1573         {
    15741568            return vboxUsbRtDispatchUsbAbortEndpoint(pDevExt, pIrp);
    1575         }
     1569
    15761570        case SUPUSB_IOCTL_SEND_URB:
    1577         {
    15781571            return vboxUsbRtDispatchSendUrb(pDevExt, pIrp);
    1579         }
     1572
    15801573        case SUPUSB_IOCTL_IS_OPERATIONAL:
    1581         {
    15821574            return vboxUsbRtDispatchIsOperational(pDevExt, pIrp);
    1583         }
     1575
    15841576        case SUPUSB_IOCTL_GET_VERSION:
    1585         {
    15861577            return vboxUsbRtDispatchGetVersion(pDevExt, pIrp);
    1587         }
     1578
    15881579        default:
    1589         {
    15901580            return vboxUsbRtDispatchDefault(pDevExt, pIrp);
    1591         }
    1592     }
    1593 }
     1581    }
     1582}
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