From 7839dc91a8f7a1f33114761ae13a5d7d4d1bfa18 Mon Sep 17 00:00:00 2001 From: Ralph Castain <rhc@open-mpi.org> Date: Mon, 30 Oct 2017 13:06:41 -0700 Subject: [PATCH] Sync to PMIx v3.0 (master) Signed-off-by: Ralph Castain <rhc@open-mpi.org> --- opal/mca/pmix/pmix3x/pmix/VERSION | 4 +-- .../pmix3x/pmix/config/pmix_setup_zlib.m4 | 28 +++++++++++-------- .../pmix/pmix3x/pmix/src/mca/ptl/base/base.h | 1 + .../pmix/src/mca/ptl/base/ptl_base_frame.c | 7 +++++ .../pmix/src/mca/ptl/base/ptl_base_sendrecv.c | 7 +++++ .../pmix/src/runtime/help-pmix-runtime.txt | 9 ++++++ opal/mca/pmix/pmix3x/pmix/src/util/path.c | 1 + opal/mca/pmix/pmix3x/pmix/src/util/pif.c | 10 +++---- 8 files changed, 48 insertions(+), 19 deletions(-) diff --git a/opal/mca/pmix/pmix3x/pmix/VERSION b/opal/mca/pmix/pmix3x/pmix/VERSION index 2e8071d32c..75471cddac 100644 --- a/opal/mca/pmix/pmix3x/pmix/VERSION +++ b/opal/mca/pmix/pmix3x/pmix/VERSION @@ -30,7 +30,7 @@ greek= # command, or with the date (if "git describe" fails) in the form of # "date<date>". -repo_rev=gitffa464b +repo_rev=git877b4d8 # If tarball_version is not empty, it is used as the version string in # the tarball filename, regardless of all other versions listed in @@ -44,7 +44,7 @@ tarball_version= # The date when this release was created -date="Oct 26, 2017" +date="Oct 30, 2017" # The shared library version of each of PMIx's public libraries. # These versions are maintained in accordance with the "Library diff --git a/opal/mca/pmix/pmix3x/pmix/config/pmix_setup_zlib.m4 b/opal/mca/pmix/pmix3x/pmix/config/pmix_setup_zlib.m4 index a67f1b7043..5440999eb1 100644 --- a/opal/mca/pmix/pmix3x/pmix/config/pmix_setup_zlib.m4 +++ b/opal/mca/pmix/pmix3x/pmix/config/pmix_setup_zlib.m4 @@ -13,7 +13,7 @@ # MCA_zlib_CONFIG([action-if-found], [action-if-not-found]) # -------------------------------------------------------------------- AC_DEFUN([PMIX_ZLIB_CONFIG],[ - PMIX_VAR_SCOPE_PUSH([pmix_zlib_dir pmix_zlib_libdir]) + PMIX_VAR_SCOPE_PUSH([pmix_zlib_dir pmix_zlib_libdir pmix_zlib_standard_lib_location pmix_zlib_standard_header_location]) AC_ARG_WITH([zlib], [AC_HELP_STRING([--with-zlib=DIR], @@ -24,28 +24,32 @@ AC_DEFUN([PMIX_ZLIB_CONFIG],[ [Search for zlib libraries in DIR ])]) pmix_zlib_support=0 + if test "$with_zlib" != "no"; then AC_MSG_CHECKING([for zlib in]) if test ! -z "$with_zlib" && test "$with_zlib" != "yes"; then pmix_zlib_dir=$with_zlib pmix_zlib_standard_header_location=no - if test -d $with_zlib/lib; then - pmix_zlib_libdir=$with_zlib/lib - elif test -d $with_zlib/lib64; then - pmix_zlib_libdir=$with_zlib/lib64 - else - AC_MSG_RESULT([Could not find $with_zlib/lib or $with_zlib/lib64]) - AC_MSG_ERROR([Can not continue]) - fi - AC_MSG_RESULT([$pmix_zlib_dir and $pmix_zlib_libdir]) + pmix_zlib_standard_lib_location=no + AS_IF([test -z "$with_zlib_libdir" || test "$with_zlib_libdir" = "yes"], + [if test -d $with_zlib/lib; then + pmix_zlib_libdir=$with_zlib/lib + elif test -d $with_zlib/lib64; then + pmix_zlib_libdir=$with_zlib/lib64 + else + AC_MSG_RESULT([Could not find $with_zlib/lib or $with_zlib/lib64]) + AC_MSG_ERROR([Can not continue]) + fi + AC_MSG_RESULT([$pmix_zlib_dir and $pmix_zlib_libdir])], + [AC_MSG_RESULT([$with_zlib_libdir])]) else AC_MSG_RESULT([(default search paths)]) pmix_zlib_standard_header_location=yes + pmix_zlib_standard_lib_location=yes fi AS_IF([test ! -z "$with_zlib_libdir" && test "$with_zlib_libdir" != "yes"], [pmix_zlib_libdir="$with_zlib_libdir" - pmix_zlib_standard_lib_location=no], - [pmix_zlib_standard_lib_location=yes]) + pmix_zlib_standard_lib_location=no]) PMIX_CHECK_PACKAGE([pmix_zlib], [zlib.h], diff --git a/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/base.h b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/base.h index 80bac4e5c3..47215a1e19 100644 --- a/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/base.h +++ b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/base.h @@ -79,6 +79,7 @@ struct pmix_ptl_globals_t { bool listen_thread_active; pmix_list_t listeners; uint32_t current_tag; + size_t max_msg_size; }; typedef struct pmix_ptl_globals_t pmix_ptl_globals_t; diff --git a/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_frame.c b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_frame.c index 705c3f3f3d..7ca906edbc 100644 --- a/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_frame.c +++ b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_frame.c @@ -59,6 +59,13 @@ int pmix_ptl_base_output = -1; static int pmix_ptl_register(pmix_mca_base_register_flag_t flags) { + pmix_ptl_globals.max_msg_size = 8000000; + pmix_mca_base_var_register("pmix", "ptl", "base", "max_msg_size", + "Max size (in bytes) of a client/server msg", + PMIX_MCA_BASE_VAR_TYPE_SIZE_T, NULL, 0, 0, + PMIX_INFO_LVL_2, + PMIX_MCA_BASE_VAR_SCOPE_READONLY, + &pmix_ptl_globals.max_msg_size); return PMIX_SUCCESS; } diff --git a/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_sendrecv.c b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_sendrecv.c index 97149094c9..a657f95880 100644 --- a/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_sendrecv.c +++ b/opal/mca/pmix/pmix3x/pmix/src/mca/ptl/base/ptl_base_sendrecv.c @@ -44,6 +44,7 @@ #include "src/client/pmix_client_ops.h" #include "src/server/pmix_server_ops.h" #include "src/util/error.h" +#include "src/util/show_help.h" #include "src/mca/ptl/base/base.h" @@ -459,6 +460,12 @@ void pmix_ptl_base_recv_handler(int sd, short flags, void *cbdata) "ptl:base:recv:handler allocate data region of size %lu", (unsigned long)peer->recv_msg->hdr.nbytes); /* allocate the data region */ + if (pmix_ptl_globals.max_msg_size < peer->recv_msg->hdr.nbytes) { + pmix_show_help("help-pmix-runtime.txt", "ptl:msg_size", true, + (unsigned long)peer->recv_msg->hdr.nbytes, + (unsigned long)pmix_ptl_globals.max_msg_size); + goto err_close; + } peer->recv_msg->data = (char*)malloc(peer->recv_msg->hdr.nbytes); memset(peer->recv_msg->data, 0, peer->recv_msg->hdr.nbytes); /* point to it */ diff --git a/opal/mca/pmix/pmix3x/pmix/src/runtime/help-pmix-runtime.txt b/opal/mca/pmix/pmix3x/pmix/src/runtime/help-pmix-runtime.txt index dcd9c1cd69..c1890837bf 100644 --- a/opal/mca/pmix/pmix3x/pmix/src/runtime/help-pmix-runtime.txt +++ b/opal/mca/pmix/pmix3x/pmix/src/runtime/help-pmix-runtime.txt @@ -58,3 +58,12 @@ by any of the following: that includes at least one usable plugin for this framework. Please check your installation and environment. +# +[ptl:msg_size] +A received msg header indicates a size that is too large: + + Requested size: %lu + Size limit: %lu + +If you believe this msg is legitimate, please increase the +max msg size via the ptl_base_max_msg_size parameter. diff --git a/opal/mca/pmix/pmix3x/pmix/src/util/path.c b/opal/mca/pmix/pmix3x/pmix/src/util/path.c index 0de2fafef6..ad7e911a46 100644 --- a/opal/mca/pmix/pmix3x/pmix/src/util/path.c +++ b/opal/mca/pmix/pmix3x/pmix/src/util/path.c @@ -403,6 +403,7 @@ char* pmix_find_absolute_path( char* app_name ) char* resolved_path = (char*)malloc(PMIX_PATH_MAX); if (NULL == realpath( abs_app_name, resolved_path )) { free(resolved_path); + free(abs_app_name); return NULL; } if( abs_app_name != app_name ) { diff --git a/opal/mca/pmix/pmix3x/pmix/src/util/pif.c b/opal/mca/pmix/pmix3x/pmix/src/util/pif.c index 2f58f0203a..78ca9559ff 100644 --- a/opal/mca/pmix/pmix3x/pmix/src/util/pif.c +++ b/opal/mca/pmix/pmix3x/pmix/src/util/pif.c @@ -269,13 +269,13 @@ int16_t pmix_ifaddrtokindex(const char* if_addr) for (r = res; r != NULL; r = r->ai_next) { PMIX_LIST_FOREACH(intf, &pmix_if_list, pmix_pif_t) { if (AF_INET == r->ai_family && AF_INET == intf->af_family) { - struct sockaddr ipv4, intv4; - memset(&ipv4, 0, sizeof(struct sockaddr)); + struct sockaddr_in ipv4, intv4; + memset(&ipv4, 0, sizeof(struct sockaddr_in)); len = (r->ai_addrlen < sizeof(struct sockaddr_in)) ? r->ai_addrlen : sizeof(struct sockaddr_in); memcpy(&ipv4, r->ai_addr, len); - memset(&intv4, 0, sizeof(struct sockaddr)); - memcpy(&intv4, &intf->if_addr, sizeof(struct sockaddr)); - if (pmix_net_samenetwork(&ipv4, &intv4, intf->if_mask)) { + memset(&intv4, 0, sizeof(struct sockaddr_in)); + memcpy(&intv4, &intf->if_addr, sizeof(struct sockaddr_in)); + if (pmix_net_samenetwork((struct sockaddr*)&ipv4, (struct sockaddr*)&intv4, intf->if_mask)) { if_kernel_index = intf->if_kernel_index; freeaddrinfo (res); return if_kernel_index;