@@ -402,6 +402,9 @@ static umf_result_t translate_params(umf_os_memory_provider_params_t *in_params,
402402 return result ;
403403 }
404404
405+ // IPC API requires in_params->visibility == UMF_MEM_MAP_SHARED
406+ provider -> IPC_enabled = (in_params -> visibility == UMF_MEM_MAP_SHARED );
407+
405408 // NUMA config
406409 int emptyNodeset = in_params -> numa_list_len == 0 ;
407410 result = validate_numa_mode (in_params -> numa_mode , emptyNodeset );
@@ -1089,7 +1092,7 @@ static umf_result_t os_allocation_split(void *provider, void *ptr,
10891092 (void )totalSize ;
10901093
10911094 os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1092- if (os_provider -> fd <= 0 ) {
1095+ if (os_provider -> fd < 0 ) {
10931096 return UMF_RESULT_SUCCESS ;
10941097 }
10951098
@@ -1122,7 +1125,7 @@ static umf_result_t os_allocation_merge(void *provider, void *lowPtr,
11221125 (void )totalSize ;
11231126
11241127 os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1125- if (os_provider -> fd <= 0 ) {
1128+ if (os_provider -> fd < 0 ) {
11261129 return UMF_RESULT_SUCCESS ;
11271130 }
11281131
@@ -1152,6 +1155,10 @@ static umf_result_t os_get_ipc_handle_size(void *provider, size_t *size) {
11521155 }
11531156
11541157 os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1158+ if (!os_provider -> IPC_enabled ) {
1159+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1160+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1161+ }
11551162
11561163 if (os_provider -> shm_name [0 ]) {
11571164 // os_ipc_data_t->shm_name will be used
@@ -1171,7 +1178,8 @@ static umf_result_t os_get_ipc_handle(void *provider, const void *ptr,
11711178 }
11721179
11731180 os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1174- if (os_provider -> fd <= 0 ) {
1181+ if (!os_provider -> IPC_enabled ) {
1182+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
11751183 return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
11761184 }
11771185
@@ -1203,6 +1211,11 @@ static umf_result_t os_put_ipc_handle(void *provider, void *providerIpcData) {
12031211 }
12041212
12051213 os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1214+ if (!os_provider -> IPC_enabled ) {
1215+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1216+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1217+ }
1218+
12061219 os_ipc_data_t * os_ipc_data = (os_ipc_data_t * )providerIpcData ;
12071220
12081221 if (os_ipc_data -> pid != utils_getpid ()) {
@@ -1229,6 +1242,11 @@ static umf_result_t os_open_ipc_handle(void *provider, void *providerIpcData,
12291242 }
12301243
12311244 os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1245+ if (!os_provider -> IPC_enabled ) {
1246+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1247+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1248+ }
1249+
12321250 os_ipc_data_t * os_ipc_data = (os_ipc_data_t * )providerIpcData ;
12331251 umf_result_t ret = UMF_RESULT_SUCCESS ;
12341252 int fd ;
@@ -1269,6 +1287,12 @@ static umf_result_t os_close_ipc_handle(void *provider, void *ptr,
12691287 return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
12701288 }
12711289
1290+ os_memory_provider_t * os_provider = (os_memory_provider_t * )provider ;
1291+ if (!os_provider -> IPC_enabled ) {
1292+ LOG_ERR ("memory visibility mode is not UMF_MEM_MAP_SHARED" )
1293+ return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
1294+ }
1295+
12721296 errno = 0 ;
12731297 int ret = utils_munmap (ptr , size );
12741298 // ignore error when size == 0
0 commit comments