# HG changeset patch # User Andrew John Hughes # Date 1395068298 0 # Node ID e21f201c2d68fc2dc33a844de74bd6dbe1125e6a # Parent d9cd6461e22c2df411a3f4573bb98ca080bdacf6 PR1677: Update PaX support to detect running PaX kernel and use newer tools 2014-02-19 Andrew John Hughes PR1677: Update PaX support to detect running PaX kernel and use newer tools * NEWS: Updated. * acinclude.m4: (IT_HAS_PAX): New macro to detect whether the running kernel uses PaX. (IT_WITH_PAX): Rewritten to search for PaX tools - currently paxmark.sh, paxctl-ng, chpax and paxctl - and fail if a tool isn't found and a PaX kernel is being used. diff -r d9cd6461e22c -r e21f201c2d68 ChangeLog --- a/ChangeLog Thu Jan 30 14:33:10 2014 +0000 +++ b/ChangeLog Mon Mar 17 14:58:18 2014 +0000 @@ -1,3 +1,16 @@ +2014-02-19 Andrew John Hughes + + PR1677: Update PaX support to detect running PaX + kernel and use newer tools + * NEWS: Updated. + * acinclude.m4: + (IT_HAS_PAX): New macro to detect whether the running + kernel uses PaX. + (IT_WITH_PAX): Rewritten to search for PaX tools - + currently paxmark.sh, paxctl-ng, chpax and paxctl - + and fail if a tool isn't found and a PaX kernel is + being used. + 2014-01-28 Andrew John Hughes * configure.ac: Bump to 2.4.6pre01. diff -r d9cd6461e22c -r e21f201c2d68 NEWS --- a/NEWS Thu Jan 30 14:33:10 2014 +0000 +++ b/NEWS Mon Mar 17 14:58:18 2014 +0000 @@ -14,6 +14,9 @@ New in release 2.4.6 (2014-04-XX): +* Bug fixes + - PR1677: Update PaX support to detect running PaX kernel and use newer tools + New in release 2.4.5 (2014-01-29): * Backports diff -r d9cd6461e22c -r e21f201c2d68 acinclude.m4 --- a/acinclude.m4 Thu Jan 30 14:33:10 2014 +0000 +++ b/acinclude.m4 Mon Mar 17 14:58:18 2014 +0000 @@ -2299,45 +2299,79 @@ AC_SUBST([enable_downloading]) ]) +AC_DEFUN_ONCE([IT_HAS_PAX], +[ + AC_MSG_CHECKING([if a PaX kernel is in use]) + if cat /proc/self/status | grep '^PaX' >&AS_MESSAGE_LOG_FD 2>&1; then + pax_active=yes; + else + pax_active=no; + fi + AC_MSG_RESULT([${pax_active}]) + AM_CONDITIONAL([USING_PAX], test x"${pax_active}" = "xyes") +]) + AC_DEFUN_ONCE([IT_WITH_PAX], [ - AC_MSG_CHECKING([for pax utility to use]) + AC_REQUIRE([IT_HAS_PAX]) + PAX_DEFAULT=/usr/sbin/paxmark.sh + AC_MSG_CHECKING([if a PaX utility was specified]) AC_ARG_WITH([pax], [AS_HELP_STRING(--with-pax=COMMAND,the command used for pax marking)], [ - PAX_COMMAND=${withval} + if test "x${withval}" = "xyes"; then + PAX_COMMAND=no + else + PAX_COMMAND="${withval}" + fi ], [ - PAX_COMMAND="not specified" + PAX_COMMAND=no ]) - case "x${PAX_COMMAND}" in - xchpax) - case "${host_cpu}" in - i?86) - PAX_COMMAND_ARGS="-msp" - ;; - *) - PAX_COMMAND_ARGS="-m" - ;; - esac - ;; - xpaxctl) - case "${host_cpu}" in - i?86) - PAX_COMMAND_ARGS="-msp" - ;; - *) - PAX_COMMAND_ARGS="-m" - ;; - esac - ;; - *) - PAX_COMMAND="not specified" - PAX_COMMAND_ARGS="not specified" - ;; - esac + AC_MSG_RESULT(${PAX_COMMAND}) + if test "x${PAX_COMMAND}" == "xno"; then + PAX_COMMAND=${PAX_DEFAULT} + fi + AC_MSG_CHECKING([if $PAX_COMMAND is a valid executable file]) + if test -x "${PAX_COMMAND}" && test -f "${PAX_COMMAND}"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PAX_COMMAND="" + AC_PATH_PROG(PAX_COMMAND, "paxmark.sh") + if test -z "${PAX_COMMAND}"; then + AC_PATH_PROG(PAX_COMMAND, "paxctl-ng") + fi + if test -z "${PAX_COMMAND}"; then + AC_PATH_PROG(PAX_COMMAND, "chpax") + fi + if test -z "${PAX_COMMAND}"; then + AC_PATH_PROG(PAX_COMMAND, "paxctl") + fi + if test -z "${PAX_COMMAND}"; then + if test "x${pax_active}" = "xyes"; then + AC_MSG_ERROR("No PaX utility found and running on a PaX kernel.") + else + AC_MSG_WARN("No PaX utility found.") + fi + fi + fi + if test -z "${PAX_COMMAND}"; then + PAX_COMMAND="not specified" + PAX_COMMAND_ARGS="not specified" + else + AC_MSG_CHECKING([which options to pass to ${PAX_COMMAND}]) + case "${host_cpu}" in + i?86) + PAX_COMMAND_ARGS="-msp" + ;; + *) + PAX_COMMAND_ARGS="-m" + ;; + esac + AC_MSG_RESULT(${PAX_COMMAND_ARGS}) + fi AM_CONDITIONAL(WITH_PAX, test "x${PAX_COMMAND}" != "xnot specified") - AC_MSG_RESULT(${PAX_COMMAND}) AC_SUBST(PAX_COMMAND) AC_SUBST(PAX_COMMAND_ARGS) ])