gfx: pvr: Move ioctl number check before first use
authorPauli Nieminen <pauli.nieminen@linux.intel.com>
Wed, 23 Nov 2011 19:06:25 +0000 (21:06 +0200)
committerMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Tue, 3 Jul 2012 09:28:41 +0000 (12:28 +0300)
Driver is using user provided ioctl number before checking if it is in
valid range. That makes it possible to force kernel to read memory past
the end of ioctl information array.

Signed-off-by: Pauli Nieminen <pauli.nieminen@linux.intel.com>
Acked-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
drivers/staging/mrst/pvr/services4/srvkm/bridged/bridged_pvr_bridge.c

index c161d43..6f1e2dd 100644 (file)
@@ -3850,6 +3850,13 @@ IMG_INT BridgedDispatchKM(PVRSRV_PER_PROCESS_DATA * psPerProc,
        IMG_INT      err          = -EFAULT;
        PVRSRV_ERROR pvr_err      = PVRSRV_OK;
 
+       if(ui32BridgeID >= (BRIDGE_DISPATCH_TABLE_ENTRY_COUNT))
+       {
+               PVR_DPF((PVR_DBG_ERROR, "%s: ui32BridgeID = %d is out if range!",
+                                __FUNCTION__, ui32BridgeID));
+               goto return_fault;
+       }
+
        dte = &g_BridgeDispatchTable[ui32BridgeID];
 
 #if defined(DEBUG_TRACE_BRIDGE_KM)
@@ -3953,12 +3960,6 @@ IMG_INT BridgedDispatchKM(PVRSRV_PER_PROCESS_DATA * psPerProc,
        psBridgeOut = psBridgePackageKM->pvParamOut;
 #endif
 
-       if(ui32BridgeID >= (BRIDGE_DISPATCH_TABLE_ENTRY_COUNT))
-       {
-               PVR_DPF((PVR_DBG_ERROR, "%s: ui32BridgeID = %d is out if range!",
-                                __FUNCTION__, ui32BridgeID));
-               goto return_fault;
-       }
        pfBridgeHandler = (BridgeWrapperFunction)dte->pfFunction;
        err = pfBridgeHandler(ui32BridgeID,
                                                  psBridgeIn,