Skip to content

Commit b64db30

Browse files
author
Ralph Castain
committed
Support PMIx versions > 2
Terminate configure with error if PMIx version is less than 1.2.0. Direct all versions above 2.x to the ext2x component. Add some protection against segfaults for incorrectly formatted info keys in notification code as an attempt to avoid issues seen in MTT Signed-off-by: Ralph Castain <[email protected]>
1 parent cec7b8b commit b64db30

File tree

2 files changed

+37
-33
lines changed

2 files changed

+37
-33
lines changed

config/opal_check_pmi.m4

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# Copyright (c) 2009-2015 Cisco Systems, Inc. All rights reserved.
1414
# Copyright (c) 2011-2014 Los Alamos National Security, LLC. All rights
1515
# reserved.
16-
# Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
16+
# Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
1717
# Copyright (c) 2014-2018 Research Organization for Information Science
1818
# and Technology (RIST). All rights reserved.
1919
# Copyright (c) 2016 IBM Corporation. All rights reserved.
@@ -253,7 +253,8 @@ AC_DEFUN([OPAL_CHECK_PMIX],[
253253
AS_IF([test -z "$with_pmix" || test "$with_pmix" = "yes" || test "$with_pmix" = "internal"],
254254
[AC_MSG_RESULT([no])
255255
opal_external_pmix_happy=no
256-
opal_prun_happy=yes],
256+
opal_prun_happy=yes
257+
opal_external_pmix_version=internal],
257258
258259
[AC_MSG_RESULT([yes])
259260
# check for external pmix lib */
@@ -272,23 +273,29 @@ AC_DEFUN([OPAL_CHECK_PMIX],[
272273
[AC_MSG_CHECKING([libpmix.* in $with_pmix_libdir/lib64])
273274
files=`ls $with_pmix_libdir/lib64/libpmix.* 2> /dev/null | wc -l`
274275
AS_IF([test "$files" -gt 0],
275-
[pmix_ext_install_libdir=$with_pmix_libdir/lib64],
276-
[AC_MSG_CHECKING([libpmix.* in $with_pmix_libdir/lib])
276+
[AC_MSG_RESULT([found])
277+
pmix_ext_install_libdir=$with_pmix_libdir/lib64],
278+
[AC_MSG_RESULT([not found])
279+
AC_MSG_CHECKING([libpmix.* in $with_pmix_libdir/lib])
277280
files=`ls $with_pmix_libdir/lib/libpmix.* 2> /dev/null | wc -l`
278281
AS_IF([test "$files" -gt 0],
279-
[pmix_ext_install_libdir=$with_pmix_libdir/lib],
282+
[AC_MSG_RESULT([found])
283+
pmix_ext_install_libdir=$with_pmix_libdir/lib],
280284
[AC_MSG_RESULT([not found])
281285
AC_MSG_ERROR([Cannot continue])])])])],
282286
[# check for presence of lib64 directory - if found, see if the
283287
# desired library is present and matches our build requirements
284288
AC_MSG_CHECKING([libpmix.* in $pmix_ext_install_dir/lib64])
285289
files=`ls $pmix_ext_install_dir/lib64/libpmix.* 2> /dev/null | wc -l`
286290
AS_IF([test "$files" -gt 0],
287-
[pmix_ext_install_libdir=$pmix_ext_install_dir/lib64],
288-
[AC_MSG_CHECKING([libpmix.* in $pmix_ext_install_dir/lib])
291+
[AC_MSG_RESULT([found])
292+
pmix_ext_install_libdir=$pmix_ext_install_dir/lib64],
293+
[AC_MSG_RESULT([not found])
294+
AC_MSG_CHECKING([libpmix.* in $pmix_ext_install_dir/lib])
289295
files=`ls $pmix_ext_install_dir/lib/libpmix.* 2> /dev/null | wc -l`
290296
AS_IF([test "$files" -gt 0],
291-
[pmix_ext_install_libdir=$pmix_ext_install_dir/lib],
297+
[AC_MSG_RESULT([found])
298+
pmix_ext_install_libdir=$pmix_ext_install_dir/lib],
292299
[AC_MSG_RESULT([not found])
293300
AC_MSG_ERROR([Cannot continue])])])])
294301
@@ -303,33 +310,22 @@ AC_DEFUN([OPAL_CHECK_PMIX],[
303310
CPPFLAGS="-I$pmix_ext_install_dir/include $CPPFLAGS"
304311
AS_IF([test "x`ls $pmix_ext_install_dir/include/pmix_version.h 2> /dev/null`" = "x"],
305312
[AC_MSG_RESULT([version file not found - assuming v1.1.4])
306-
opal_external_pmix_version_found=1
307-
opal_external_pmix_version=114
308-
opal_external_have_pmix1=1],
313+
# we don't support anything earlier than 1.2.x
314+
AC_MSG_WARN([External PMIx support requested, but version])
315+
AC_MSG_WARN([of the external lib is less than the minimum])
316+
AC_MSG_WARN([v1.2.x required by Open MPI.])
317+
AC_MSG_ERROR([cannot continue])],
309318
[AC_MSG_RESULT([version file found])
310319
opal_external_pmix_version_found=0])
311320
312321
# if it does exist, then we need to parse it to find
313322
# the actual release series
314323
AS_IF([test "$opal_external_pmix_version_found" = "0"],
315-
[AC_MSG_CHECKING([version 3x])
324+
[AC_MSG_CHECKING([version 2x or above])
316325
AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
317326
#include <pmix_version.h>
318-
#if (PMIX_VERSION_MAJOR != 3L)
319-
#error "not version 3"
320-
#endif
321-
], [])],
322-
[AC_MSG_RESULT([found])
323-
opal_external_pmix_version=3x
324-
opal_external_pmix_version_found=1],
325-
[AC_MSG_RESULT([not found])])])
326-
327-
AS_IF([test "$opal_external_pmix_version_found" = "0"],
328-
[AC_MSG_CHECKING([version 2x])
329-
AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
330-
#include <pmix_version.h>
331-
#if (PMIX_VERSION_MAJOR != 2L)
332-
#error "not version 2"
327+
#if (PMIX_VERSION_MAJOR < 2L)
328+
#error "not version 2 or above"
333329
#endif
334330
], [])],
335331
[AC_MSG_RESULT([found])
@@ -342,8 +338,8 @@ AC_DEFUN([OPAL_CHECK_PMIX],[
342338
[AC_MSG_CHECKING([version 1x])
343339
AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
344340
#include <pmix_version.h>
345-
#if (PMIX_VERSION_MAJOR != 1L)
346-
#error "not version 1"
341+
#if (PMIX_VERSION_MAJOR != 1L && PMIX_VERSION_MINOR != 2L)
342+
#error "not version 1.2.x"
347343
#endif
348344
], [])],
349345
[AC_MSG_RESULT([found])
@@ -354,8 +350,8 @@ AC_DEFUN([OPAL_CHECK_PMIX],[
354350
355351
AS_IF([test "x$opal_external_pmix_version" = "x"],
356352
[AC_MSG_WARN([External PMIx support requested, but version])
357-
AC_MSG_WARN([information of the external lib could not])
358-
AC_MSG_WARN([be detected])
353+
AC_MSG_WARN([of the external lib is less than the minimum])
354+
AC_MSG_WARN([v1.2.x required by Open MPI])
359355
AC_MSG_ERROR([cannot continue])])
360356
361357
CPPFLAGS=$opal_external_pmix_save_CPPFLAGS
@@ -371,5 +367,10 @@ AC_DEFUN([OPAL_CHECK_PMIX],[
371367
AC_DEFINE_UNQUOTED([OPAL_PMIX_V1],[$opal_external_have_pmix1],
372368
[Whether the external PMIx library is v1])
373369
AM_CONDITIONAL([OPAL_WANT_PRUN], [test "$opal_prun_happy" = "yes"])
370+
371+
AS_IF([test "$opal_external_pmix_version" = "1x"],
372+
[OPAL_SUMMARY_ADD([[Miscellaneous]],[[PMIx support]], [opal_pmix], [1.2.x: WARNING - DYNAMIC OPS NOT SUPPORTED])],
373+
[OPAL_SUMMARY_ADD([[Miscellaneous]],[[PMIx support]], [opal_pmix], [$opal_external_pmix_version])])
374+
374375
OPAL_VAR_SCOPE_POP
375376
])

opal/mca/pmix/pmix2x/pmix2x.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,13 +317,16 @@ void pmix2x_event_hdlr(size_t evhdlr_registration_id,
317317
}
318318

319319
/* convert the array of info */
320-
if (NULL != info) {
320+
if (NULL != info && 0 < ninfo) {
321321
cd->info = OBJ_NEW(opal_list_t);
322322
for (n=0; n < ninfo; n++) {
323323
iptr = OBJ_NEW(opal_value_t);
324+
/* ensure that this key is NULL terminated */
325+
info[n].key[PMIX_MAX_KEYLEN] = '\0';
324326
iptr->key = strdup(info[n].key);
325327
if (OPAL_SUCCESS != (rc = pmix2x_value_unload(iptr, &info[n].value))) {
326328
OPAL_ERROR_LOG(rc);
329+
opal_output(0, "KEY %s FAILED VALUE TRANSLATION", info[n].key);
327330
OBJ_RELEASE(iptr);
328331
continue;
329332
}
@@ -332,7 +335,7 @@ void pmix2x_event_hdlr(size_t evhdlr_registration_id,
332335
}
333336

334337
/* convert the array of prior results */
335-
if (NULL != results) {
338+
if (NULL != results && 0 < nresults) {
336339
for (n=0; n < nresults; n++) {
337340
iptr = OBJ_NEW(opal_value_t);
338341
iptr->key = strdup(results[n].key);

0 commit comments

Comments
 (0)