@@ -45,6 +45,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
4545
4646#include "img_defs.h"
4747
48+ #include "pmr.h"
4849#include "devicemem_history_server.h"
4950
5051#include "common_devicememhistory_bridge.h"
@@ -89,9 +90,7 @@ PVRSRVBridgeDevicememHistoryMap(IMG_UINT32 ui32DispatchTableEntry,
8990
9091 IMG_UINT32 ui32NextOffset = 0 ;
9192 IMG_BYTE * pArrayArgsBuffer = NULL ;
92- #if !defined(INTEGRITY_OS )
9393 IMG_BOOL bHaveEnoughSpace = IMG_FALSE ;
94- #endif
9594
9695 IMG_UINT32 ui32BufferSize = 0 ;
9796 IMG_UINT64 ui64BufferSize = ((IMG_UINT64 ) DEVMEM_ANNOTATION_MAX_LEN * sizeof (IMG_CHAR )) + 0 ;
@@ -106,7 +105,6 @@ PVRSRVBridgeDevicememHistoryMap(IMG_UINT32 ui32DispatchTableEntry,
106105
107106 if (ui32BufferSize != 0 )
108107 {
109- #if !defined(INTEGRITY_OS )
110108 /* Try to use remainder of input buffer for copies if possible, word-aligned for safety. */
111109 IMG_UINT32 ui32InBufferOffset =
112110 PVR_ALIGN (sizeof (* psDevicememHistoryMapIN ), sizeof (unsigned long ));
@@ -122,7 +120,6 @@ PVRSRVBridgeDevicememHistoryMap(IMG_UINT32 ui32DispatchTableEntry,
122120 pArrayArgsBuffer = & pInputBuffer [ui32InBufferOffset ];
123121 }
124122 else
125- #endif
126123 {
127124 pArrayArgsBuffer = OSAllocMemNoStats (ui32BufferSize );
128125
@@ -199,11 +196,7 @@ PVRSRVBridgeDevicememHistoryMap(IMG_UINT32 ui32DispatchTableEntry,
199196 PVR_ASSERT (ui32BufferSize == ui32NextOffset );
200197#endif /* PVRSRV_NEED_PVR_ASSERT */
201198
202- #if defined(INTEGRITY_OS )
203- if (pArrayArgsBuffer )
204- #else
205199 if (!bHaveEnoughSpace && pArrayArgsBuffer )
206- #endif
207200 OSFreeMemNoStats (pArrayArgsBuffer );
208201
209202 return 0 ;
@@ -231,9 +224,7 @@ PVRSRVBridgeDevicememHistoryUnmap(IMG_UINT32 ui32DispatchTableEntry,
231224
232225 IMG_UINT32 ui32NextOffset = 0 ;
233226 IMG_BYTE * pArrayArgsBuffer = NULL ;
234- #if !defined(INTEGRITY_OS )
235227 IMG_BOOL bHaveEnoughSpace = IMG_FALSE ;
236- #endif
237228
238229 IMG_UINT32 ui32BufferSize = 0 ;
239230 IMG_UINT64 ui64BufferSize = ((IMG_UINT64 ) DEVMEM_ANNOTATION_MAX_LEN * sizeof (IMG_CHAR )) + 0 ;
@@ -248,7 +239,6 @@ PVRSRVBridgeDevicememHistoryUnmap(IMG_UINT32 ui32DispatchTableEntry,
248239
249240 if (ui32BufferSize != 0 )
250241 {
251- #if !defined(INTEGRITY_OS )
252242 /* Try to use remainder of input buffer for copies if possible, word-aligned for safety. */
253243 IMG_UINT32 ui32InBufferOffset =
254244 PVR_ALIGN (sizeof (* psDevicememHistoryUnmapIN ), sizeof (unsigned long ));
@@ -264,7 +254,6 @@ PVRSRVBridgeDevicememHistoryUnmap(IMG_UINT32 ui32DispatchTableEntry,
264254 pArrayArgsBuffer = & pInputBuffer [ui32InBufferOffset ];
265255 }
266256 else
267- #endif
268257 {
269258 pArrayArgsBuffer = OSAllocMemNoStats (ui32BufferSize );
270259
@@ -341,11 +330,7 @@ PVRSRVBridgeDevicememHistoryUnmap(IMG_UINT32 ui32DispatchTableEntry,
341330 PVR_ASSERT (ui32BufferSize == ui32NextOffset );
342331#endif /* PVRSRV_NEED_PVR_ASSERT */
343332
344- #if defined(INTEGRITY_OS )
345- if (pArrayArgsBuffer )
346- #else
347333 if (!bHaveEnoughSpace && pArrayArgsBuffer )
348- #endif
349334 OSFreeMemNoStats (pArrayArgsBuffer );
350335
351336 return 0 ;
@@ -371,9 +356,7 @@ PVRSRVBridgeDevicememHistoryMapVRange(IMG_UINT32 ui32DispatchTableEntry,
371356
372357 IMG_UINT32 ui32NextOffset = 0 ;
373358 IMG_BYTE * pArrayArgsBuffer = NULL ;
374- #if !defined(INTEGRITY_OS )
375359 IMG_BOOL bHaveEnoughSpace = IMG_FALSE ;
376- #endif
377360
378361 IMG_UINT32 ui32BufferSize = 0 ;
379362 IMG_UINT64 ui64BufferSize = ((IMG_UINT64 ) DEVMEM_ANNOTATION_MAX_LEN * sizeof (IMG_CHAR )) + 0 ;
@@ -388,7 +371,6 @@ PVRSRVBridgeDevicememHistoryMapVRange(IMG_UINT32 ui32DispatchTableEntry,
388371
389372 if (ui32BufferSize != 0 )
390373 {
391- #if !defined(INTEGRITY_OS )
392374 /* Try to use remainder of input buffer for copies if possible, word-aligned for safety. */
393375 IMG_UINT32 ui32InBufferOffset =
394376 PVR_ALIGN (sizeof (* psDevicememHistoryMapVRangeIN ), sizeof (unsigned long ));
@@ -404,7 +386,6 @@ PVRSRVBridgeDevicememHistoryMapVRange(IMG_UINT32 ui32DispatchTableEntry,
404386 pArrayArgsBuffer = & pInputBuffer [ui32InBufferOffset ];
405387 }
406388 else
407- #endif
408389 {
409390 pArrayArgsBuffer = OSAllocMemNoStats (ui32BufferSize );
410391
@@ -454,11 +435,7 @@ PVRSRVBridgeDevicememHistoryMapVRange(IMG_UINT32 ui32DispatchTableEntry,
454435 PVR_ASSERT (ui32BufferSize == ui32NextOffset );
455436#endif /* PVRSRV_NEED_PVR_ASSERT */
456437
457- #if defined(INTEGRITY_OS )
458- if (pArrayArgsBuffer )
459- #else
460438 if (!bHaveEnoughSpace && pArrayArgsBuffer )
461- #endif
462439 OSFreeMemNoStats (pArrayArgsBuffer );
463440
464441 return 0 ;
@@ -484,9 +461,7 @@ PVRSRVBridgeDevicememHistoryUnmapVRange(IMG_UINT32 ui32DispatchTableEntry,
484461
485462 IMG_UINT32 ui32NextOffset = 0 ;
486463 IMG_BYTE * pArrayArgsBuffer = NULL ;
487- #if !defined(INTEGRITY_OS )
488464 IMG_BOOL bHaveEnoughSpace = IMG_FALSE ;
489- #endif
490465
491466 IMG_UINT32 ui32BufferSize = 0 ;
492467 IMG_UINT64 ui64BufferSize = ((IMG_UINT64 ) DEVMEM_ANNOTATION_MAX_LEN * sizeof (IMG_CHAR )) + 0 ;
@@ -501,7 +476,6 @@ PVRSRVBridgeDevicememHistoryUnmapVRange(IMG_UINT32 ui32DispatchTableEntry,
501476
502477 if (ui32BufferSize != 0 )
503478 {
504- #if !defined(INTEGRITY_OS )
505479 /* Try to use remainder of input buffer for copies if possible, word-aligned for safety. */
506480 IMG_UINT32 ui32InBufferOffset =
507481 PVR_ALIGN (sizeof (* psDevicememHistoryUnmapVRangeIN ), sizeof (unsigned long ));
@@ -518,7 +492,6 @@ PVRSRVBridgeDevicememHistoryUnmapVRange(IMG_UINT32 ui32DispatchTableEntry,
518492 pArrayArgsBuffer = & pInputBuffer [ui32InBufferOffset ];
519493 }
520494 else
521- #endif
522495 {
523496 pArrayArgsBuffer = OSAllocMemNoStats (ui32BufferSize );
524497
@@ -570,18 +543,18 @@ PVRSRVBridgeDevicememHistoryUnmapVRange(IMG_UINT32 ui32DispatchTableEntry,
570543 PVR_ASSERT (ui32BufferSize == ui32NextOffset );
571544#endif /* PVRSRV_NEED_PVR_ASSERT */
572545
573- #if defined(INTEGRITY_OS )
574- if (pArrayArgsBuffer )
575- #else
576546 if (!bHaveEnoughSpace && pArrayArgsBuffer )
577- #endif
578547 OSFreeMemNoStats (pArrayArgsBuffer );
579548
580549 return 0 ;
581550}
582551
583552static_assert (DEVMEM_ANNOTATION_MAX_LEN <= IMG_UINT32_MAX ,
584553 "DEVMEM_ANNOTATION_MAX_LEN must not be larger than IMG_UINT32_MAX" );
554+ static_assert (PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX ,
555+ "PMR_MAX_SUPPORTED_4K_PAGE_COUNT must not be larger than IMG_UINT32_MAX" );
556+ static_assert (PMR_MAX_SUPPORTED_4K_PAGE_COUNT <= IMG_UINT32_MAX ,
557+ "PMR_MAX_SUPPORTED_4K_PAGE_COUNT must not be larger than IMG_UINT32_MAX" );
585558
586559static IMG_INT
587560PVRSRVBridgeDevicememHistorySparseChange (IMG_UINT32 ui32DispatchTableEntry ,
@@ -604,9 +577,7 @@ PVRSRVBridgeDevicememHistorySparseChange(IMG_UINT32 ui32DispatchTableEntry,
604577
605578 IMG_UINT32 ui32NextOffset = 0 ;
606579 IMG_BYTE * pArrayArgsBuffer = NULL ;
607- #if !defined(INTEGRITY_OS )
608580 IMG_BOOL bHaveEnoughSpace = IMG_FALSE ;
609- #endif
610581
611582 IMG_UINT32 ui32BufferSize = 0 ;
612583 IMG_UINT64 ui64BufferSize =
@@ -616,6 +587,21 @@ PVRSRVBridgeDevicememHistorySparseChange(IMG_UINT32 ui32DispatchTableEntry,
616587 ((IMG_UINT64 ) psDevicememHistorySparseChangeIN -> ui32FreePageCount *
617588 sizeof (IMG_UINT32 )) + 0 ;
618589
590+ if (unlikely
591+ (psDevicememHistorySparseChangeIN -> ui32AllocPageCount >
592+ PMR_MAX_SUPPORTED_4K_PAGE_COUNT ))
593+ {
594+ psDevicememHistorySparseChangeOUT -> eError = PVRSRV_ERROR_BRIDGE_ARRAY_SIZE_TOO_BIG ;
595+ goto DevicememHistorySparseChange_exit ;
596+ }
597+
598+ if (unlikely
599+ (psDevicememHistorySparseChangeIN -> ui32FreePageCount > PMR_MAX_SUPPORTED_4K_PAGE_COUNT ))
600+ {
601+ psDevicememHistorySparseChangeOUT -> eError = PVRSRV_ERROR_BRIDGE_ARRAY_SIZE_TOO_BIG ;
602+ goto DevicememHistorySparseChange_exit ;
603+ }
604+
619605 if (ui64BufferSize > IMG_UINT32_MAX )
620606 {
621607 psDevicememHistorySparseChangeOUT -> eError = PVRSRV_ERROR_BRIDGE_BUFFER_TOO_SMALL ;
@@ -626,7 +612,6 @@ PVRSRVBridgeDevicememHistorySparseChange(IMG_UINT32 ui32DispatchTableEntry,
626612
627613 if (ui32BufferSize != 0 )
628614 {
629- #if !defined(INTEGRITY_OS )
630615 /* Try to use remainder of input buffer for copies if possible, word-aligned for safety. */
631616 IMG_UINT32 ui32InBufferOffset =
632617 PVR_ALIGN (sizeof (* psDevicememHistorySparseChangeIN ), sizeof (unsigned long ));
@@ -643,7 +628,6 @@ PVRSRVBridgeDevicememHistorySparseChange(IMG_UINT32 ui32DispatchTableEntry,
643628 pArrayArgsBuffer = & pInputBuffer [ui32InBufferOffset ];
644629 }
645630 else
646- #endif
647631 {
648632 pArrayArgsBuffer = OSAllocMemNoStats (ui32BufferSize );
649633
@@ -771,11 +755,7 @@ PVRSRVBridgeDevicememHistorySparseChange(IMG_UINT32 ui32DispatchTableEntry,
771755 PVR_ASSERT (ui32BufferSize == ui32NextOffset );
772756#endif /* PVRSRV_NEED_PVR_ASSERT */
773757
774- #if defined(INTEGRITY_OS )
775- if (pArrayArgsBuffer )
776- #else
777758 if (!bHaveEnoughSpace && pArrayArgsBuffer )
778- #endif
779759 OSFreeMemNoStats (pArrayArgsBuffer );
780760
781761 return 0 ;
0 commit comments