1
1

Merge pull request #6855 from hkuno/hkuno/mmap_loop

Fix mmap infinite recurse in memory patcher
Этот коммит содержится в:
Howard Pritchard 2019-08-26 14:28:53 -06:00 коммит произвёл GitHub
родитель 5a3646fd1d fca8436064
Коммит 71e1fad4a9
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 7 добавлений и 10 удалений

Просмотреть файл

@ -47,13 +47,15 @@ AC_DEFUN([MCA_opal_memory_patcher_CONFIG],[
esac esac
AC_MSG_RESULT([$opal_memory_patcher_happy]) AC_MSG_RESULT([$opal_memory_patcher_happy])
# syscall interface causes compiler warnings.
# Per the above logic, memory patcher no longer supports MacOS/Darwin,
# so we no longer support Darwin-specific logic for intercept_mmap.
# See issue #6853: mmap infinite recurse in opal/mca/memory/patcher
AS_IF([test "$opal_memory_patcher_happy" == "yes"], [ AS_IF([test "$opal_memory_patcher_happy" == "yes"], [
AC_CHECK_FUNCS([__curbrk]) AC_CHECK_FUNCS([__curbrk])
AC_CHECK_HEADERS([linux/mman.h sys/syscall.h]) AC_CHECK_HEADERS([linux/mman.h sys/syscall.h])
AC_CHECK_DECLS([__mmap], [], [], [#include <sys/mman.h>]) AC_CHECK_DECLS([__syscall], [], [], [#include <sys/syscall.h>])
AC_CHECK_FUNCS([__mmap]) AC_CHECK_FUNCS([__syscall])
AC_CHECK_DECLS([__syscall], [], [], [#include <sys/syscall.h>])
AC_CHECK_FUNCS([__syscall])
$1], [$2]) $1], [$2])
AC_CONFIG_FILES([opal/mca/memory/patcher/Makefile]) AC_CONFIG_FILES([opal/mca/memory/patcher/Makefile])

Просмотреть файл

@ -125,12 +125,7 @@ static void *_intercept_mmap(void *start, size_t length, int prot, int flags, in
} }
if (!original_mmap) { if (!original_mmap) {
#ifdef HAVE___MMAP
/* the darwin syscall returns an int not a long so call the underlying __mmap function */
result = __mmap (start, length, prot, flags, fd, offset);
#else
result = (void*)(intptr_t) memory_patcher_syscall(SYS_mmap, start, length, prot, flags, fd, offset); result = (void*)(intptr_t) memory_patcher_syscall(SYS_mmap, start, length, prot, flags, fd, offset);
#endif
} else { } else {
result = original_mmap (start, length, prot, flags, fd, offset); result = original_mmap (start, length, prot, flags, fd, offset);
} }