Skip to content

Commit c2185bb

Browse files
authored
Merge pull request #1781 from jsquyres/pr/disable-psm-psm2-signal-hijacking
PSM/PSM2: Disable signal handler hijacking by default
2 parents 2886d93 + 5071602 commit c2185bb

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

ompi/mpi/java/c/mpi_MPI.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* All rights reserved.
1313
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
1414
* reserved.
15-
* Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
15+
* Copyright (c) 2015-2016 Cisco Systems, Inc. All rights reserved.
1616
* Copyright (c) 2015 Intel, Inc. All rights reserved.
1717
* Copyright (c) 2015 Research Organization for Information Science
1818
* and Technology (RIST). All rights reserved.
@@ -131,6 +131,10 @@ OBJ_CLASS_INSTANCE(ompi_java_buffer_t,
131131
*/
132132
jint JNI_OnLoad(JavaVM *vm, void *reserved)
133133
{
134+
// Ensure that PSM signal hijacking is disabled *before* loading
135+
// the library (see comment in the function for more detail).
136+
opal_init_psm();
137+
134138
libmpi = dlopen("libmpi." OPAL_DYN_LIB_SUFFIX, RTLD_NOW | RTLD_GLOBAL);
135139

136140
#if defined(HAVE_DL_INFO) && defined(HAVE_LIBGEN_H)

opal/runtime/opal.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* Copyright (c) 2004-2005 The Regents of the University of California.
1111
* All rights reserved.
1212
* Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.
13-
* Copyright (c) 2010-2012 Cisco Systems, Inc. All rights reserved.
13+
* Copyright (c) 2010-2016 Cisco Systems, Inc. All rights reserved.
1414
* Copyright (c) 2014 Intel, Inc. All rights reserved.
1515
* $COPYRIGHT$
1616
*
@@ -76,6 +76,13 @@ OPAL_DECLSPEC int opal_finalize(void);
7676
*/
7777
OPAL_DECLSPEC int opal_init_util(int* pargc, char*** pargv);
7878

79+
/**
80+
* Disable PSM/PSM2 signal hijacking.
81+
*
82+
* See comment in the function for more detail.
83+
*/
84+
OPAL_DECLSPEC int opal_init_psm(void);
85+
7986
/**
8087
* Finalize the OPAL layer, excluding the MCA system.
8188
*

opal/runtime/opal_init.c

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* University of Stuttgart. All rights reserved.
1111
* Copyright (c) 2004-2005 The Regents of the University of California.
1212
* All rights reserved.
13-
* Copyright (c) 2007-2012 Cisco Systems, Inc. All rights reserved.
13+
* Copyright (c) 2007-2016 Cisco Systems, Inc. All rights reserved.
1414
* Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
1515
* Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
1616
* Copyright (c) 2010-2015 Los Alamos National Security, LLC.
@@ -265,6 +265,34 @@ opal_err2str(int errnum, const char **errmsg)
265265
}
266266

267267

268+
int opal_init_psm(void)
269+
{
270+
/* Very early in the init sequence -- before *ANY* MCA components
271+
are opened -- we need to disable some behavior from the PSM and
272+
PSM2 libraries (by default): at least some old versions of
273+
these libraries hijack signal handlers during their library
274+
constructors and then do not un-hijack them when the libraries
275+
are unloaded.
276+
277+
It is a bit of an abstraction break that we have to put
278+
vendor/transport-specific code in the OPAL core, but we're
279+
out of options, unfortunately.
280+
281+
NOTE: We only disable this behavior if the corresponding
282+
environment variables are not already set (i.e., if the
283+
user/environment has indicated a preference for this behavior,
284+
we won't override it). */
285+
if (NULL == getenv("IPATH_NO_BACKTRACE")) {
286+
opal_setenv("IPATH_NO_BACKTRACE", "1", true, &environ);
287+
}
288+
if (NULL == getenv("HFI_NO_BACKTRACE")) {
289+
opal_setenv("HFI_NO_BACKTRACE", "1", true, &environ);
290+
}
291+
292+
return OPAL_SUCCESS;
293+
}
294+
295+
268296
int
269297
opal_init_util(int* pargc, char*** pargv)
270298
{
@@ -328,6 +356,10 @@ opal_init_util(int* pargc, char*** pargv)
328356
goto return_error;
329357
}
330358

359+
// Disable PSM signal hijacking (see comment in function for more
360+
// details)
361+
opal_init_psm();
362+
331363
/* Setup the parameter system */
332364
if (OPAL_SUCCESS != (ret = mca_base_var_init())) {
333365
error = "mca_base_var_init";

0 commit comments

Comments
 (0)