77 *
88 */
99
10+ #include <inttypes.h>
11+
1012#include <umf/memory_props.h>
1113#include <umf/providers/provider_cuda.h>
1214#include <umf/providers/provider_level_zero.h>
@@ -19,6 +21,9 @@ umf_result_t
1921umfGetMemoryPropertiesHandle (const void * ptr ,
2022 umf_memory_properties_handle_t * props_handle ) {
2123
24+ LOG_DEBUG ("umfGetMemoryPropertiesHandle: ptr=%p, props_handle=%p" , ptr ,
25+ props_handle );
26+
2227 if (props_handle == NULL ) {
2328 return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
2429 }
@@ -31,39 +36,67 @@ umfGetMemoryPropertiesHandle(const void *ptr,
3136
3237 * props_handle = & info -> props ;
3338
39+ LOG_DEBUG ("umfGetMemoryPropertiesHandle: props_handle=%p, id=%" PRIu64 ,
40+ * props_handle , (* props_handle )-> id );
41+
3442 return UMF_RESULT_SUCCESS ;
3543}
3644
3745umf_result_t umfGetMemoryProperty (umf_memory_properties_handle_t props_handle ,
3846 umf_memory_property_id_t memory_property_id ,
39- void * value ) {
40- if ((value == NULL ) || (props_handle == NULL )) {
47+ size_t max_property_size , void * value ) {
48+
49+ LOG_DEBUG ("umfGetMemoryProperty: props_handle=%p, memory_property_id=%d, "
50+ "max_property_size=%zu, value=%p" ,
51+ props_handle , memory_property_id , max_property_size , value );
52+
53+ if ((value == NULL ) || (props_handle == NULL ) || (max_property_size == 0 )) {
4154 return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
4255 }
4356
4457 umf_memory_provider_t * provider = props_handle -> provider ;
4558
59+ LOG_DEBUG ("umfGetMemoryProperty: provider=%p" , provider );
60+ LOG_DEBUG ("dereferencing value..." );
61+
62+ LOG_DEBUG ("value: %zu" , * (size_t * )value );
63+
4664 switch (memory_property_id ) {
4765 case UMF_MEMORY_PROPERTY_INVALID :
4866 return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
4967
5068 case UMF_MEMORY_PROPERTY_POOL_HANDLE :
69+ if (max_property_size < sizeof (umf_memory_pool_handle_t )) {
70+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
71+ }
5172 * (umf_memory_pool_handle_t * )value = props_handle -> pool ;
5273 return UMF_RESULT_SUCCESS ;
5374
5475 case UMF_MEMORY_PROPERTY_PROVIDER_HANDLE :
76+ if (max_property_size < sizeof (umf_memory_provider_handle_t )) {
77+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
78+ }
5579 * (umf_memory_provider_handle_t * )value = provider ;
5680 return UMF_RESULT_SUCCESS ;
5781
5882 case UMF_MEMORY_PROPERTY_BUFFER_ID :
83+ if (max_property_size < sizeof (uint64_t )) {
84+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
85+ }
5986 * (uint64_t * )value = props_handle -> id ;
6087 return UMF_RESULT_SUCCESS ;
6188
6289 case UMF_MEMORY_PROPERTY_BASE_ADDRESS :
90+ if (max_property_size < sizeof (uintptr_t )) {
91+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
92+ }
6393 * (uintptr_t * )value = (uintptr_t )props_handle -> base ;
6494 return UMF_RESULT_SUCCESS ;
6595
6696 case UMF_MEMORY_PROPERTY_BASE_SIZE :
97+ if (max_property_size < sizeof (size_t )) {
98+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
99+ }
67100 * (size_t * )value = props_handle -> base_size ;
68101 return UMF_RESULT_SUCCESS ;
69102
@@ -73,7 +106,7 @@ umf_result_t umfGetMemoryProperty(umf_memory_properties_handle_t props_handle,
73106 case UMF_MEMORY_PROPERTY_DEVICE :
74107 return provider -> ops .ext_get_allocation_properties (
75108 provider -> provider_priv , props_handle -> ptr , memory_property_id ,
76- value );
109+ max_property_size , value );
77110
78111 default :
79112 break ;
0 commit comments