It seems that Mrecv() tries to write on the status arg, even when it
is STATUS_IGNORE. Looking at the sources (pmrecv.c and pmprobe.c),
there are some memcheck code paths that access status but do not check
for STATUS_IGNORE, please review them.

$ cat tmp.c
#include <mpi.h>

int main(int argc, char *argv[])
{
  MPI_Message message;
  MPI_Init(&argc, &argv);
  message = MPI_MESSAGE_NO_PROC;
  MPI_Mrecv(NULL, 0, MPI_BYTE, &message, MPI_STATUS_IGNORE);
  MPI_Finalize();
  return 0;
}

$ mpicc tmp.c
$ valgrind ./a.out
...
==17489==
==17489== Invalid write of size 8
==17489==    at 0x4CA811C: PMPI_Mrecv (pmrecv.c:62)
==17489==    by 0x400816: main (in /tmp/a.out)
==17489==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==17489==
[localhost:17489] *** Process received signal ***
[localhost:17489] Signal: Segmentation fault (11)
[localhost:17489] Signal code: Address not mapped (1)
[localhost:17489] Failing at address: (nil)
...


--
Lisandro Dalcin
---------------
CIMEC (INTEC/CONICET-UNL)
Predio CONICET-Santa Fe
Colectora RN 168 Km 472, Paraje El Pozo
3000 Santa Fe, Argentina
Tel: +54-342-4511594 (ext 1011)
Tel/Fax: +54-342-4511169

Reply via email to