Skip to content

Commit

Permalink
package/procps-ng: fix pidfd_open checking
Browse files Browse the repository at this point in the history
  • Loading branch information
vancepym authored and jacmet committed Dec 5, 2024
1 parent 80f25d4 commit fee18cc
Show file tree
Hide file tree
Showing 4 changed files with 179 additions and 0 deletions.
99 changes: 99 additions & 0 deletions package/procps-ng/0003-build-sys-Fix-pidfd_open-checking.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
From f37d178d5c25c547835d054fbb1eda32c25034b3 Mon Sep 17 00:00:00 2001
From: Craig Small <[email protected]>
Date: Mon, 30 Sep 2024 17:26:01 +1000
Subject: [PATCH] build-sys: Fix pidfd_open checking

The previous build setup would check for pidfd_open using
AC_CHECK_FUNC and would be incorrectly reported as true.

Also, if pidfd_open() and __NR_pidfd_open were not present,
pidwait would silently not be built.

So, changes:
compile a small programin using pidfd_open to test it properly
conditionally try to find NR_pidfd_open if the function fails
complain if neither are present
have --disable-pidwait configure option so you are explicit in
not wanting and knowing you wont get pidwait

References:
#352
commit d9c3e3676d86094abaa239b3218f57bf49d70b4f
commit 17f94796a9b3c4f1ff28829107a82107dcb362b4

Signed-off-by: Craig Small <[email protected]>

Upstream: https://gitlab.com/procps-ng/procps/-/commit/2507bc475782ff5e0541d37c780dff1e293c9553

Signed-off-by: Scott Fan <[email protected]>
[Scott: backported to version 4.0.4]
---
configure.ac | 45 ++++++++++++++++++++++++++++++---------------
1 file changed, 30 insertions(+), 15 deletions(-)

diff --git a/configure.ac b/configure.ac
index fec27e3f..0719fcd1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -170,21 +170,6 @@ AC_TRY_COMPILE([#include <errno.h>],
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))

-AC_CHECK_FUNC([pidfd_open], [enable_pidwait=yes], [
- AC_MSG_CHECKING([for __NR_pidfd_open])
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([
-#include <sys/syscall.h>
-#ifndef __NR_pidfd_open
-#error __NR_pidfd_open not defined
-#endif
- ])], [enable_pidwait=yes], [enable_pidwait=no])
- AC_MSG_RESULT([$enable_pidwait])
-])
-if test "$enable_pidwait" = yes; then
- AC_DEFINE([ENABLE_PIDWAIT], [1], [Enable pidwait])
-fi
-AM_CONDITIONAL([BUILD_PIDWAIT], [test x$enable_pidwait = xyes])
-
dnl watch8bit must be before the AC_ARG_WITH set as it sets up ncurses
AC_SUBST([WITH_WATCH8BIT])
AC_ARG_ENABLE([watch8bit],
@@ -321,6 +306,36 @@ AC_ARG_ENABLE([pidof],
)
AM_CONDITIONAL(BUILD_PIDOF, test "x$enable_pidof" = xyes)

+# If pidwait is enabled, we need either pidfd_open() or __NR_pidfd_open need to be defined
+# Cannot use AC_CHECK_FUNC as it (incorrectly) passes with pidfd_open missing
+AC_ARG_ENABLE([pidwait],
+ AS_HELP_STRING([--disable-pidwait], [do not build pidwait]),
+ [], [
+ enable_pidwait=yes
+ AC_DEFINE(ENABLE_PIDWAIT, 1, [enable pidwait])
+ ]
+)
+AM_CONDITIONAL(BUILD_PIDWAIT, test "x$enable_pidwait" = xyes)
+AC_MSG_CHECKING([for pidfd_open()])
+AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ [pidfd_open(1,1)]]])],
+ have_pidfd_open=yes; AC_MSG_RESULT([yes]) ,
+ have_pidfd_open=no; AC_MSG_RESULT([no])
+ )
+
+AS_IF([[test "x$enable_pidwait" = xyes -a "x$have_pidfd_open" = xno]],
+ AC_MSG_CHECKING([for __NR_pidfd_open])
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+#include <sys/syscall.h>
+#ifndef __NR_pidfd_open
+#error __NR_pidfd_open not defined
+#endif
+ ])],
+ AC_MSG_RESULT([yes]),
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([Neither pidfd_open or __NR_pidfd_open found. Disable pidwait with configure option --disable-pidwait])
+ )
+ ,[])
+
AC_ARG_ENABLE([kill],
AS_HELP_STRING([--disable-kill], [do not build kill]),
[], [enable_kill=yes]
--
2.43.0

Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
From 1e2d53e1d86cb75e8f39b42b9a5c409e5d3261ed Mon Sep 17 00:00:00 2001
From: oli-ben <[email protected]>
Date: Wed, 27 Nov 2024 20:17:11 +0000
Subject: [PATCH] build-sys: Fix define of HAVE_PIDFD_OPEN

Fix cross-compilation issues when using GCC-12.3
* configure fails to detect that the sysroot does support the pidfd_open
syscall wrapper
* configure fails to define HAVE_PIDFD_OPEN which is used in pgrep.c,
so it fails building, because __NR_pidfd_open is then undefined

Upstream: https://gitlab.com/procps-ng/procps/-/commit/587efb47df7ddbfda4e6abdd1e7792a2531a238f

Signed-off-by: Scott Fan <[email protected]>
[Scott: backported to version 4.0.4]
---
configure.ac | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index 0719fcd1..6242a8f8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -317,8 +317,8 @@ AC_ARG_ENABLE([pidwait],
)
AM_CONDITIONAL(BUILD_PIDWAIT, test "x$enable_pidwait" = xyes)
AC_MSG_CHECKING([for pidfd_open()])
-AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ [pidfd_open(1,1)]]])],
- have_pidfd_open=yes; AC_MSG_RESULT([yes]) ,
+AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[pidfd_open(1,1)]])],
+ have_pidfd_open=yes; AC_DEFINE(HAVE_PIDFD_OPEN, 1, [pidfd_open is defined]) AC_MSG_RESULT([yes]),
have_pidfd_open=no; AC_MSG_RESULT([no])
)

--
2.43.0

Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
From 81ded587d2484b6f470f2d5c837c5591491377ce Mon Sep 17 00:00:00 2001
From: Craig Small <[email protected]>
Date: Thu, 28 Nov 2024 07:20:42 +1100
Subject: [PATCH] pgrep: Include sys/syscall.h if making pidwait

sys/syscall.h would only be included if pidwait was made
and we found pidfd_open() The previous commit fixed the
finding part, but in fact we want sys/syscall.h either
way because syscall() is defined there too.

Most of the time the header is included by other headers
but adding it explicitly means if that header is removed or
changed it still works.

Signed-off-by: Craig Small <[email protected]>

Upstream: https://gitlab.com/procps-ng/procps/-/commit/5acbb5dc1587d688de646d739a97251eb893bbb0

Signed-off-by: Scott Fan <[email protected]>
[Scott: backported to version 4.0.4]
---
src/pgrep.c | 2 --
1 file changed, 2 deletions(-)

diff --git a/src/pgrep.c b/src/pgrep.c
index d8e57dff..a2607532 100644
--- a/src/pgrep.c
+++ b/src/pgrep.c
@@ -44,9 +44,7 @@

#ifdef ENABLE_PIDWAIT
#include <sys/epoll.h>
-#ifndef HAVE_PIDFD_OPEN
#include <sys/syscall.h>
-#endif /* !HAVE_PIDFD_OPEN */
#endif

/* EXIT_SUCCESS is 0 */
--
2.43.0

2 changes: 2 additions & 0 deletions package/procps-ng/procps-ng.mk
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ PROCPS_NG_CONF_OPTS = LIBS=$(TARGET_NLS_LIBS)

# Applying 0001-build-sys-Add-systemd-elogind-to-w.patch touches Makefile.am
# Applying 0002-fix-ncurses-h-include.patch touches configure.ac
# Applying 0003-build-sys-Fix-pidfd_open-checking.patch touches configure.ac
# Applying 0004-build-sys-Fix-define-of-HAVE_PIDFD_OPEN.patch touches configure.ac
PROCPS_NG_AUTORECONF = YES

ifeq ($(BR2_PACKAGE_SYSTEMD),y)
Expand Down

0 comments on commit fee18cc

Please sign in to comment.