Sync from SUSE:SLFO:Main util-linux revision 7c885752fe11ba59bb81e4003a65a02a
This commit is contained in:
parent
fbb8ad044b
commit
8d659317ac
@ -0,0 +1,32 @@
|
||||
From: Xi Ruoyao <xry111@xry111.site>
|
||||
Date: Sun, 31 Mar 2024 00:42:03 +0800
|
||||
Subject: include: Include <unistd.h> in pidfd-utils.h for syscall()
|
||||
Git-repo: https://github.com/util-linux/util-linux.git
|
||||
Git-commit: 10add327c608b11b3d70215048aade4d1797b1fd
|
||||
Patch-mainline: yes
|
||||
References: kernel 6.9
|
||||
|
||||
In Glibc, <sys/syscall.h> only contains SYS_* macros and the syscall()
|
||||
function is in <unistd.h>. So include it.
|
||||
|
||||
Signed-off-by: Xi Ruoyao <xry111@xry111.site>
|
||||
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
||||
---
|
||||
include/pidfd-utils.h | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/include/pidfd-utils.h b/include/pidfd-utils.h
|
||||
index ff0bc4c7..0ee55f3b 100644
|
||||
--- a/include/pidfd-utils.h
|
||||
+++ b/include/pidfd-utils.h
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#ifdef HAVE_SYS_SYSCALL_H
|
||||
# include <sys/syscall.h>
|
||||
+# include <unistd.h>
|
||||
|
||||
/*
|
||||
* If the kernel headers are too old to provide the syscall numbers, let's
|
||||
--
|
||||
2.45.0
|
||||
|
319
0002-lsfd-Refactor-the-pidfd-logic-into-lsfd-pidfd.c.patch
Normal file
319
0002-lsfd-Refactor-the-pidfd-logic-into-lsfd-pidfd.c.patch
Normal file
@ -0,0 +1,319 @@
|
||||
From: Xi Ruoyao <xry111@xry111.site>
|
||||
Date: Wed, 3 Apr 2024 15:29:34 +0800
|
||||
Subject: lsfd: Refactor the pidfd logic into lsfd-pidfd.c
|
||||
Git-repo: https://github.com/util-linux/util-linux.git
|
||||
Git-commit: bf6645dc1edef09ad378cc5b9eb2c93861408735
|
||||
Patch-mainline: yes
|
||||
References: kernel 6.9
|
||||
|
||||
We'll reuse these logic for pidfd support on Linux >= 6.9. This should
|
||||
be a no-functional change.
|
||||
|
||||
Besides moving the code, this change also renames anon_pidfd_data to
|
||||
pidfd_data, and removes a redundant nullity check for free (because
|
||||
free(NULL) will just do nothing per the C standard).
|
||||
|
||||
Signed-off-by: Xi Ruoyao <xry111@xry111.site>
|
||||
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
||||
---
|
||||
misc-utils/Makemodule.am | 4 +-
|
||||
misc-utils/lsfd-pidfd.c | 95 ++++++++++++++++++++++++++++++++++++++++
|
||||
misc-utils/lsfd-pidfd.h | 37 ++++++++++++++++
|
||||
misc-utils/lsfd-unkn.c | 71 +++++-------------------------
|
||||
misc-utils/meson.build | 1 +
|
||||
5 files changed, 147 insertions(+), 61 deletions(-)
|
||||
create mode 100644 misc-utils/lsfd-pidfd.c
|
||||
create mode 100644 misc-utils/lsfd-pidfd.h
|
||||
|
||||
diff --git a/misc-utils/Makemodule.am b/misc-utils/Makemodule.am
|
||||
index 9edf3d98..7622a5d7 100644
|
||||
--- a/misc-utils/Makemodule.am
|
||||
+++ b/misc-utils/Makemodule.am
|
||||
@@ -298,7 +298,9 @@ lsfd_SOURCES = \
|
||||
misc-utils/lsfd-sock.h \
|
||||
misc-utils/lsfd-sock-xinfo.c \
|
||||
misc-utils/lsfd-unkn.c \
|
||||
- misc-utils/lsfd-fifo.c
|
||||
+ misc-utils/lsfd-fifo.c \
|
||||
+ misc-utils/lsfd-pidfd.h \
|
||||
+ misc-utils/lsfd-pidfd.c
|
||||
lsfd_LDADD = $(LDADD) $(MQ_LIBS) libsmartcols.la libcommon.la
|
||||
lsfd_CFLAGS = $(AM_CFLAGS) -I$(ul_libsmartcols_incdir)
|
||||
endif
|
||||
diff --git a/misc-utils/lsfd-pidfd.c b/misc-utils/lsfd-pidfd.c
|
||||
new file mode 100644
|
||||
index 00000000..430a8028
|
||||
--- /dev/null
|
||||
+++ b/misc-utils/lsfd-pidfd.c
|
||||
@@ -0,0 +1,95 @@
|
||||
+/*
|
||||
+ * lsfd-pidfd.c - handle pidfd (from anon_inode or pidfs)
|
||||
+ *
|
||||
+ * Copyright (C) 2024 Xi Ruoyao <xry111@xry111.site>
|
||||
+ *
|
||||
+ * Refactored and moved out from lsfd-unkn.c (originally authored by
|
||||
+ * Masatake YAMATO <yamato@redhat.com>).
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it would be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License
|
||||
+ * along with this program; if not, write to the Free Software Foundation,
|
||||
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
+ */
|
||||
+
|
||||
+#include <string.h>
|
||||
+
|
||||
+#include "strutils.h"
|
||||
+#include "xalloc.h"
|
||||
+
|
||||
+#include "lsfd.h"
|
||||
+#include "lsfd-pidfd.h"
|
||||
+
|
||||
+int pidfd_handle_fdinfo(struct pidfd_data *data, const char *key,
|
||||
+ const char *value)
|
||||
+{
|
||||
+ if (strcmp(key, "Pid") == 0) {
|
||||
+ uint64_t pid;
|
||||
+ int rc = ul_strtou64(value, &pid, 10);
|
||||
+
|
||||
+ if (rc < 0)
|
||||
+ return 0; /* ignore -- parse failed */
|
||||
+
|
||||
+ data->pid = (pid_t)pid;
|
||||
+ return 1;
|
||||
+ } else if (strcmp(key, "NSpid") == 0) {
|
||||
+ data->nspid = xstrdup(value);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+char *pidfd_get_name(struct pidfd_data *data)
|
||||
+{
|
||||
+ char *str = NULL;
|
||||
+ char *comm = NULL;
|
||||
+ struct proc *proc = get_proc(data->pid);
|
||||
+
|
||||
+ if (proc)
|
||||
+ comm = proc->command;
|
||||
+
|
||||
+ xasprintf(&str, "pid=%d comm=%s nspid=%s",
|
||||
+ data->pid,
|
||||
+ comm ? comm : "",
|
||||
+ data->nspid ? data->nspid : "");
|
||||
+ return str;
|
||||
+}
|
||||
+
|
||||
+bool pidfd_fill_column(struct pidfd_data *data, int column_id, char **str)
|
||||
+{
|
||||
+ switch(column_id) {
|
||||
+ case COL_PIDFD_COMM: {
|
||||
+ struct proc *pidfd_proc = get_proc(data->pid);
|
||||
+ char *pidfd_comm = NULL;
|
||||
+
|
||||
+ if (pidfd_proc)
|
||||
+ pidfd_comm = pidfd_proc->command;
|
||||
+ if (pidfd_comm) {
|
||||
+ *str = xstrdup(pidfd_comm);
|
||||
+ return true;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+ case COL_PIDFD_NSPID:
|
||||
+ if (data->nspid) {
|
||||
+ *str = xstrdup(data->nspid);
|
||||
+ return true;
|
||||
+ }
|
||||
+ break;
|
||||
+ case COL_PIDFD_PID:
|
||||
+ xasprintf(str, "%d", (int)data->pid);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
diff --git a/misc-utils/lsfd-pidfd.h b/misc-utils/lsfd-pidfd.h
|
||||
new file mode 100644
|
||||
index 00000000..2f65d3b3
|
||||
--- /dev/null
|
||||
+++ b/misc-utils/lsfd-pidfd.h
|
||||
@@ -0,0 +1,37 @@
|
||||
+/*
|
||||
+ * lsfd-pidfd.h - handle pidfd (from anon_inode or pidfs)
|
||||
+ *
|
||||
+ * Copyright (C) 2024 Xi Ruoyao <xry111@xry111.site>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it would be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License
|
||||
+ * along with this program; if not, write to the Free Software Foundation,
|
||||
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
+ */
|
||||
+
|
||||
+#include <stdbool.h>
|
||||
+#include <sys/types.h>
|
||||
+
|
||||
+struct pidfd_data {
|
||||
+ pid_t pid;
|
||||
+ char *nspid;
|
||||
+};
|
||||
+
|
||||
+int pidfd_handle_fdinfo(struct pidfd_data *, const char *, const char *);
|
||||
+char *pidfd_get_name(struct pidfd_data *);
|
||||
+bool pidfd_fill_column(struct pidfd_data *, int, char **);
|
||||
+
|
||||
+static inline void __attribute__((nonnull(1)))
|
||||
+pidfd_free(struct pidfd_data *data)
|
||||
+{
|
||||
+ free(data->nspid);
|
||||
+}
|
||||
diff --git a/misc-utils/lsfd-unkn.c b/misc-utils/lsfd-unkn.c
|
||||
index 8f6e9084..8e257f47 100644
|
||||
--- a/misc-utils/lsfd-unkn.c
|
||||
+++ b/misc-utils/lsfd-unkn.c
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "timeutils.h"
|
||||
|
||||
#include "lsfd.h"
|
||||
+#include "lsfd-pidfd.h"
|
||||
|
||||
#define offsetofend(TYPE, MEMBER) \
|
||||
(offsetof(TYPE, MEMBER) + sizeof_member(TYPE, MEMBER))
|
||||
@@ -183,10 +184,6 @@ static int unkn_handle_fdinfo(struct file *file, const char *key, const char *va
|
||||
/*
|
||||
* pidfd
|
||||
*/
|
||||
-struct anon_pidfd_data {
|
||||
- pid_t pid;
|
||||
- char *nspid;
|
||||
-};
|
||||
|
||||
static bool anon_pidfd_probe(const char *str)
|
||||
{
|
||||
@@ -195,51 +192,28 @@ static bool anon_pidfd_probe(const char *str)
|
||||
|
||||
static char *anon_pidfd_get_name(struct unkn *unkn)
|
||||
{
|
||||
- char *str = NULL;
|
||||
- struct anon_pidfd_data *data = (struct anon_pidfd_data *)unkn->anon_data;
|
||||
+ struct pidfd_data *data = (struct pidfd_data *)unkn->anon_data;
|
||||
|
||||
- char *comm = NULL;
|
||||
- struct proc *proc = get_proc(data->pid);
|
||||
- if (proc)
|
||||
- comm = proc->command;
|
||||
-
|
||||
- xasprintf(&str, "pid=%d comm=%s nspid=%s",
|
||||
- data->pid,
|
||||
- comm? comm: "",
|
||||
- data->nspid? data->nspid: "");
|
||||
- return str;
|
||||
+ return pidfd_get_name(data);
|
||||
}
|
||||
|
||||
static void anon_pidfd_init(struct unkn *unkn)
|
||||
{
|
||||
- unkn->anon_data = xcalloc(1, sizeof(struct anon_pidfd_data));
|
||||
+ unkn->anon_data = xcalloc(1, sizeof(struct pidfd_data));
|
||||
}
|
||||
|
||||
static void anon_pidfd_free(struct unkn *unkn)
|
||||
{
|
||||
- struct anon_pidfd_data *data = (struct anon_pidfd_data *)unkn->anon_data;
|
||||
+ struct pidfd_data *data = (struct pidfd_data *)unkn->anon_data;
|
||||
|
||||
- if (data->nspid)
|
||||
- free(data->nspid);
|
||||
+ pidfd_free(data);
|
||||
free(data);
|
||||
}
|
||||
|
||||
static int anon_pidfd_handle_fdinfo(struct unkn *unkn, const char *key, const char *value)
|
||||
{
|
||||
- if (strcmp(key, "Pid") == 0) {
|
||||
- uint64_t pid;
|
||||
-
|
||||
- int rc = ul_strtou64(value, &pid, 10);
|
||||
- if (rc < 0)
|
||||
- return 0; /* ignore -- parse failed */
|
||||
- ((struct anon_pidfd_data *)unkn->anon_data)->pid = (pid_t)pid;
|
||||
- return 1;
|
||||
- } else if (strcmp(key, "NSpid") == 0) {
|
||||
- ((struct anon_pidfd_data *)unkn->anon_data)->nspid = xstrdup(value);
|
||||
- return 1;
|
||||
-
|
||||
- }
|
||||
- return 0;
|
||||
+ return pidfd_handle_fdinfo((struct pidfd_data *)unkn->anon_data,
|
||||
+ key, value);
|
||||
}
|
||||
|
||||
static bool anon_pidfd_fill_column(struct proc *proc __attribute__((__unused__)),
|
||||
@@ -249,32 +223,9 @@ static bool anon_pidfd_fill_column(struct proc *proc __attribute__((__unused__)
|
||||
size_t column_index __attribute__((__unused__)),
|
||||
char **str)
|
||||
{
|
||||
- struct anon_pidfd_data *data = (struct anon_pidfd_data *)unkn->anon_data;
|
||||
-
|
||||
- switch(column_id) {
|
||||
- case COL_PIDFD_COMM: {
|
||||
- struct proc *pidfd_proc = get_proc(data->pid);
|
||||
- char *pidfd_comm = NULL;
|
||||
- if (pidfd_proc)
|
||||
- pidfd_comm = pidfd_proc->command;
|
||||
- if (pidfd_comm) {
|
||||
- *str = xstrdup(pidfd_comm);
|
||||
- return true;
|
||||
- }
|
||||
- break;
|
||||
- }
|
||||
- case COL_PIDFD_NSPID:
|
||||
- if (data->nspid) {
|
||||
- *str = xstrdup(data->nspid);
|
||||
- return true;
|
||||
- }
|
||||
- break;
|
||||
- case COL_PIDFD_PID:
|
||||
- xasprintf(str, "%d", (int)data->pid);
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- return false;
|
||||
+ return pidfd_fill_column((struct pidfd_data *)unkn->anon_data,
|
||||
+ column_id,
|
||||
+ str);
|
||||
}
|
||||
|
||||
static const struct anon_ops anon_pidfd_ops = {
|
||||
diff --git a/misc-utils/meson.build b/misc-utils/meson.build
|
||||
index 847b1012..68ea9777 100644
|
||||
--- a/misc-utils/meson.build
|
||||
+++ b/misc-utils/meson.build
|
||||
@@ -56,6 +56,7 @@ lsfd_sources = files (
|
||||
'lsfd-sock-xinfo.c',
|
||||
'lsfd-unkn.c',
|
||||
'lsfd-fifo.c',
|
||||
+ 'lsfd-pidfd.c',
|
||||
)
|
||||
|
||||
uuidgen_sources = files(
|
||||
--
|
||||
2.45.0
|
||||
|
186
0003-lsfd-Support-pidfs.patch
Normal file
186
0003-lsfd-Support-pidfs.patch
Normal file
@ -0,0 +1,186 @@
|
||||
From: Xi Ruoyao <xry111@xry111.site>
|
||||
Date: Wed, 3 Apr 2024 15:46:57 +0800
|
||||
Subject: lsfd: Support pidfs
|
||||
Git-repo: https://github.com/util-linux/util-linux.git
|
||||
Git-commit: b1a48efd173c7f37d8df39a84eb25b4440335661
|
||||
Patch-mainline: yes
|
||||
References: kernel 6.9
|
||||
|
||||
In Linux 6.9 pidfds are moved from the anonymous inode infrastructure to
|
||||
a tiny pseudo filesystem named pidfs. Recognize it properly.
|
||||
|
||||
Fixes #2865.
|
||||
|
||||
Signed-off-by: Xi Ruoyao <xry111@xry111.site>
|
||||
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
||||
---
|
||||
misc-utils/lsfd-file.c | 96 ++++++++++++++++++++++++++++++++++++++++++
|
||||
misc-utils/lsfd.c | 3 ++
|
||||
misc-utils/lsfd.h | 7 ++-
|
||||
3 files changed, 105 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/misc-utils/lsfd-file.c b/misc-utils/lsfd-file.c
|
||||
index 9b91462d..3f330146 100644
|
||||
--- a/misc-utils/lsfd-file.c
|
||||
+++ b/misc-utils/lsfd-file.c
|
||||
@@ -45,6 +45,8 @@
|
||||
#include "procfs.h"
|
||||
|
||||
#include "lsfd.h"
|
||||
+#include "lsfd-pidfd.h"
|
||||
+#include "pidfd-utils.h"
|
||||
|
||||
static struct idcache *username_cache;
|
||||
|
||||
@@ -492,6 +494,22 @@ static unsigned long get_minor_for_mqueue(void)
|
||||
return minor(sb.st_dev);
|
||||
}
|
||||
|
||||
+static unsigned long get_minor_for_pidfs(void)
|
||||
+{
|
||||
+ int fd = pidfd_open(getpid(), 0);
|
||||
+ struct stat sb;
|
||||
+ unsigned long ret = 0;
|
||||
+
|
||||
+ if (fd < 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (fstat(fd, &sb) == 0 && (sb.st_mode & S_IFMT) == S_IFREG)
|
||||
+ ret = minor(sb.st_dev);
|
||||
+
|
||||
+ close(fd);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static void file_class_initialize(void)
|
||||
{
|
||||
unsigned long m;
|
||||
@@ -510,6 +528,10 @@ static void file_class_initialize(void)
|
||||
m = get_minor_for_mqueue();
|
||||
if (m)
|
||||
add_nodev(m, "mqueue");
|
||||
+
|
||||
+ m = get_minor_for_pidfs();
|
||||
+ if (m)
|
||||
+ add_nodev(m, "pidfs");
|
||||
}
|
||||
|
||||
static void file_class_finalize(void)
|
||||
@@ -783,3 +805,77 @@ const struct file_class mqueue_file_class = {
|
||||
.fill_column = mqueue_file_fill_column,
|
||||
.get_ipc_class = mqueue_file_get_ipc_class,
|
||||
};
|
||||
+
|
||||
+struct pidfs_file {
|
||||
+ struct file file;
|
||||
+ struct pidfd_data data;
|
||||
+};
|
||||
+
|
||||
+static void init_pidfs_file_content(struct file *file)
|
||||
+{
|
||||
+ struct pidfs_file *pidfs_file = (struct pidfs_file *)file;
|
||||
+
|
||||
+ memset(&pidfs_file->data, 0, sizeof(pidfs_file->data));
|
||||
+}
|
||||
+
|
||||
+static int pidfs_file_handle_fdinfo(struct file *file, const char *key, const char *value)
|
||||
+{
|
||||
+ struct pidfs_file *pidfs_file = (struct pidfs_file *)file;
|
||||
+
|
||||
+ return pidfd_handle_fdinfo(&pidfs_file->data, key, value);
|
||||
+}
|
||||
+
|
||||
+static void pidfs_file_free_content(struct file *file)
|
||||
+{
|
||||
+ struct pidfs_file *pidfs_file = (struct pidfs_file *)file;
|
||||
+
|
||||
+ pidfd_free(&pidfs_file->data);
|
||||
+}
|
||||
+
|
||||
+static bool pidfs_file_fill_column(struct proc *proc __attribute__((__unused__)),
|
||||
+ struct file *file,
|
||||
+ struct libscols_line *ln,
|
||||
+ int column_id,
|
||||
+ size_t column_index)
|
||||
+{
|
||||
+ struct pidfs_file *pidfs_file = (struct pidfs_file *)file;
|
||||
+ char *buf = NULL;
|
||||
+
|
||||
+ switch(column_id) {
|
||||
+ case COL_TYPE:
|
||||
+ if (scols_line_set_data(ln, column_index, "pidfd"))
|
||||
+ err(EXIT_FAILURE, _("failed to add output data"));
|
||||
+ return true;
|
||||
+ case COL_NAME:
|
||||
+ buf = pidfd_get_name(&pidfs_file->data);
|
||||
+ break;
|
||||
+ default:
|
||||
+ if (!pidfd_fill_column(&pidfs_file->data, column_id, &buf))
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ if (buf &&
|
||||
+ scols_line_refer_data(ln, column_index, buf))
|
||||
+ err(EXIT_FAILURE, _("failed to add output data"));
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+const struct file_class pidfs_file_class = {
|
||||
+ .super = &file_class,
|
||||
+ .size = sizeof(struct pidfs_file),
|
||||
+ .initialize_content = init_pidfs_file_content,
|
||||
+ .handle_fdinfo = pidfs_file_handle_fdinfo,
|
||||
+ .fill_column = pidfs_file_fill_column,
|
||||
+ .free_content = pidfs_file_free_content,
|
||||
+};
|
||||
+
|
||||
+bool is_pidfs_dev(dev_t dev)
|
||||
+{
|
||||
+ const char *fs = get_nodev_filesystem(minor(dev));
|
||||
+
|
||||
+ if (fs && (strcmp (fs, "pidfs") == 0))
|
||||
+ return true;
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
diff --git a/misc-utils/lsfd.c b/misc-utils/lsfd.c
|
||||
index 98820ee8..01e88d51 100644
|
||||
--- a/misc-utils/lsfd.c
|
||||
+++ b/misc-utils/lsfd.c
|
||||
@@ -683,6 +683,9 @@ static const struct file_class *stat2class(struct stat *sb)
|
||||
if (is_mqueue_dev(dev))
|
||||
return &mqueue_file_class;
|
||||
|
||||
+ if (is_pidfs_dev(dev))
|
||||
+ return &pidfs_file_class;
|
||||
+
|
||||
return &file_class;
|
||||
default:
|
||||
break;
|
||||
diff --git a/misc-utils/lsfd.h b/misc-utils/lsfd.h
|
||||
index e646758c..f0f17d5b 100644
|
||||
--- a/misc-utils/lsfd.h
|
||||
+++ b/misc-utils/lsfd.h
|
||||
@@ -228,7 +228,7 @@ struct file_class {
|
||||
};
|
||||
|
||||
extern const struct file_class file_class, cdev_class, bdev_class, sock_class, unkn_class, fifo_class,
|
||||
- nsfs_file_class, mqueue_file_class;
|
||||
+ nsfs_file_class, mqueue_file_class, pidfs_file_class;
|
||||
|
||||
/*
|
||||
* IPC
|
||||
@@ -307,4 +307,9 @@ bool is_mqueue_dev(dev_t dev);
|
||||
*/
|
||||
bool is_multiplexed_by_eventpoll(int fd, struct list_head *eventpolls);
|
||||
|
||||
+/*
|
||||
+ * Pidfs
|
||||
+ */
|
||||
+bool is_pidfs_dev(dev_t dev);
|
||||
+
|
||||
#endif /* UTIL_LINUX_LSFD_H */
|
||||
--
|
||||
2.45.0
|
||||
|
142
0004-lsfd-test-Adapt-test-cases-for-pidfs.patch
Normal file
142
0004-lsfd-test-Adapt-test-cases-for-pidfs.patch
Normal file
@ -0,0 +1,142 @@
|
||||
From: Xi Ruoyao <xry111@xry111.site>
|
||||
Date: Thu, 28 Mar 2024 04:01:02 +0800
|
||||
Subject: lsfd: test: Adapt test cases for pidfs
|
||||
Git-repo: https://github.com/util-linux/util-linux.git
|
||||
Git-commit: 04db2ba9008e9635286b1aafc8ecd9533a0a91bf
|
||||
Patch-mainline: yes
|
||||
References: kernel 6.9
|
||||
|
||||
On Linux >= 6.9, pidfds are from pidfs instead of anonymous inode.
|
||||
Thus:
|
||||
|
||||
STTYPE is REG on Linux >= 6.9, UNKN on Linux < 6.9.
|
||||
|
||||
KNAME is pidfd:[inode number] on Linux >= 6.9, anon_inode:[pidfd] on
|
||||
Linux < 6.9.
|
||||
|
||||
And ainode_class test cannot work on Linux >= 6.9, just skip this sub
|
||||
test if STTYPE is REG.
|
||||
|
||||
Signed-off-by: Xi Ruoyao <xry111@xry111.site>
|
||||
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
||||
---
|
||||
tests/expected/lsfd/column-name-pidfd | 2 +-
|
||||
tests/expected/lsfd/column-type-pidfd | 2 +-
|
||||
tests/expected/lsfd/mkfds-pidfd | 2 +-
|
||||
tests/ts/lsfd/column-ainodeclass | 8 ++++++++
|
||||
tests/ts/lsfd/column-name | 7 +++++++
|
||||
tests/ts/lsfd/column-type | 7 +++++++
|
||||
tests/ts/lsfd/mkfds-pidfd | 4 ++++
|
||||
7 files changed, 29 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/tests/expected/lsfd/column-name-pidfd b/tests/expected/lsfd/column-name-pidfd
|
||||
index 10e3c5e7..68787d69 100644
|
||||
--- a/tests/expected/lsfd/column-name-pidfd
|
||||
+++ b/tests/expected/lsfd/column-name-pidfd
|
||||
@@ -1,2 +1,2 @@
|
||||
-3 anon_inode:[pidfd] pid=1 comm= nspid=1
|
||||
+3 [KNAME] pid=1 comm= nspid=1
|
||||
pidfd:ASSOC,KNAME,NAME: 0
|
||||
diff --git a/tests/expected/lsfd/column-type-pidfd b/tests/expected/lsfd/column-type-pidfd
|
||||
index 6c9a9632..a4379807 100644
|
||||
--- a/tests/expected/lsfd/column-type-pidfd
|
||||
+++ b/tests/expected/lsfd/column-type-pidfd
|
||||
@@ -1,2 +1,2 @@
|
||||
-3 UNKN pidfd
|
||||
+3 [STTYPE] pidfd
|
||||
pidfd:ASSOC,STTYPE,TYPE: 0
|
||||
diff --git a/tests/expected/lsfd/mkfds-pidfd b/tests/expected/lsfd/mkfds-pidfd
|
||||
index 94846992..bce4dd42 100644
|
||||
--- a/tests/expected/lsfd/mkfds-pidfd
|
||||
+++ b/tests/expected/lsfd/mkfds-pidfd
|
||||
@@ -1,2 +1,2 @@
|
||||
-3 UNKN anon_inodefs pid=1 comm=systemd nspid=1 systemd 1
|
||||
+3 [STTYPE] [SOURCE] pid=1 comm=systemd nspid=1 systemd 1
|
||||
ASSOC,STTYPE,SOURCE,NAME,PIDFD.COMM,PIDFD.PID: 0
|
||||
diff --git a/tests/ts/lsfd/column-ainodeclass b/tests/ts/lsfd/column-ainodeclass
|
||||
index 6829494f..ab2abebd 100755
|
||||
--- a/tests/ts/lsfd/column-ainodeclass
|
||||
+++ b/tests/ts/lsfd/column-ainodeclass
|
||||
@@ -42,10 +42,18 @@ for C in pidfd inotify; do
|
||||
fi
|
||||
wait "${MKFDS_PID}"
|
||||
} > "$TS_OUTPUT" 2>&1
|
||||
+
|
||||
if [ "$C-$?" == "pidfd-$TS_EXIT_NOTSUPP" ]; then
|
||||
ts_skip_subtest "pidfd_open(2) is not available"
|
||||
continue
|
||||
fi
|
||||
+
|
||||
+ STTYPE="$(head -n1 "$TS_OUTPUT" | awk '{print $2}')"
|
||||
+ if [ "$C-$STTYPE" == "pidfd-REG" ]; then
|
||||
+ ts_skip_subtest "pidfd is from pidfs instead of anon inode"
|
||||
+ continue
|
||||
+ fi
|
||||
+
|
||||
ts_finalize_subtest
|
||||
done
|
||||
|
||||
diff --git a/tests/ts/lsfd/column-name b/tests/ts/lsfd/column-name
|
||||
index 8bf8f421..9c67de88 100755
|
||||
--- a/tests/ts/lsfd/column-name
|
||||
+++ b/tests/ts/lsfd/column-name
|
||||
@@ -64,10 +64,17 @@ for C in ro-regular-file pidfd socketpair; do
|
||||
fi
|
||||
} > "$TS_OUTPUT" 2>&1
|
||||
wait "${MKFDS_PID}"
|
||||
+
|
||||
if [ "$C-$?" == "pidfd-$TS_EXIT_NOTSUPP" ]; then
|
||||
ts_skip_subtest "pidfd_open(2) is not available"
|
||||
continue
|
||||
fi
|
||||
+
|
||||
+ case $C in
|
||||
+ pidfd)
|
||||
+ sed -i -E 's/(pidfd|anon_inode):\[[a-zA-Z]+\]/[KNAME]/' "$TS_OUTPUT"
|
||||
+ esac
|
||||
+
|
||||
ts_finalize_subtest
|
||||
done
|
||||
|
||||
diff --git a/tests/ts/lsfd/column-type b/tests/ts/lsfd/column-type
|
||||
index 77bc5c94..1b8aa8c6 100755
|
||||
--- a/tests/ts/lsfd/column-type
|
||||
+++ b/tests/ts/lsfd/column-type
|
||||
@@ -50,10 +50,17 @@ for C in ro-regular-file pidfd inotify socketpair; do
|
||||
fi
|
||||
wait "${MKFDS_PID}"
|
||||
} > "$TS_OUTPUT" 2>&1
|
||||
+
|
||||
if [ "$C-$?" == "pidfd-$TS_EXIT_NOTSUPP" ]; then
|
||||
ts_skip_subtest "pidfd_open(2) is not available"
|
||||
continue
|
||||
fi
|
||||
+
|
||||
+ case $C in
|
||||
+ pidfd)
|
||||
+ sed -i -E 's/UNKN|REG/[STTYPE]/' "$TS_OUTPUT"
|
||||
+ esac
|
||||
+
|
||||
ts_finalize_subtest
|
||||
done
|
||||
|
||||
diff --git a/tests/ts/lsfd/mkfds-pidfd b/tests/ts/lsfd/mkfds-pidfd
|
||||
index c0fae4f7..9b0ff33c 100755
|
||||
--- a/tests/ts/lsfd/mkfds-pidfd
|
||||
+++ b/tests/ts/lsfd/mkfds-pidfd
|
||||
@@ -44,8 +44,12 @@ EXPR="(PID != ${TARGET}) and (FD == 3) and (PIDFD.PID == ${TARGET})"
|
||||
fi
|
||||
wait ${MKFDS_PID}
|
||||
} > $TS_OUTPUT 2>&1
|
||||
+
|
||||
if [ "$?" == "$TS_EXIT_NOTSUPP" ]; then
|
||||
ts_skip "pidfd_open(2) is not available"
|
||||
fi
|
||||
|
||||
+sed -i -E -e 's/UNKN|REG/[STTYPE]/' -e 's/pidfs|anon_inodefs/[SOURCE]/' \
|
||||
+ $TS_OUTPUT
|
||||
+
|
||||
ts_finalize
|
||||
--
|
||||
2.45.0
|
||||
|
@ -1,3 +1,22 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Jul 16 13:25:03 UTC 2024 - Valentin Lefebvre <valentin.lefebvre@suse.com>
|
||||
|
||||
- uncomment "autoreconf --install" to use the new version of automake
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jun 10 10:44:55 UTC 2024 - Dirk Müller <dmueller@suse.com>
|
||||
|
||||
- disable libmagic in more(1) for binary detection (bsc#1225197)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu May 16 07:12:22 UTC 2024 - Jiri Slaby <jslaby@suse.cz>
|
||||
|
||||
- add support for pidfs in kernel 6.9 (bsc#1224285)
|
||||
* 0001-include-Include-unistd.h-in-pidfd-utils.h-for-syscal.patch
|
||||
* 0002-lsfd-Refactor-the-pidfd-logic-into-lsfd-pidfd.c.patch
|
||||
* 0003-lsfd-Support-pidfs.patch
|
||||
* 0004-lsfd-test-Adapt-test-cases-for-pidfs.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed May 8 14:06:51 UTC 2024 - Thorsten Kukuk <kukuk@suse.com>
|
||||
|
||||
@ -128,7 +147,7 @@ Thu Dec 7 13:22:16 UTC 2023 - Goldwyn Rodrigues <rgoldwyn@suse.com>
|
||||
-------------------------------------------------------------------
|
||||
Thu Dec 7 13:02:30 UTC 2023 - Goldwyn Rodrigues <rgoldwyn@suse.com>
|
||||
|
||||
- Update to release 2.29.3
|
||||
- Update to release 2.39.3
|
||||
* libblkid: add support for bcachefs sub-device labels
|
||||
* libblkid: detect large bcachefs superblocks
|
||||
* libblkid: validate that NTFS sector_size is a power of two
|
||||
|
@ -111,11 +111,14 @@ Patch2: Add-documentation-on-blacklisted-modules-to-mount-8-.patch
|
||||
# PATCH-FIX-SUSE util-linux-bash-completion-su-chsh-l.patch bsc1172427 -- Fix "su -s" bash completion.
|
||||
Patch3: util-linux-bash-completion-su-chsh-l.patch
|
||||
Patch5: static_lib.patch
|
||||
Patch6: 0001-include-Include-unistd.h-in-pidfd-utils.h-for-syscal.patch
|
||||
Patch7: 0002-lsfd-Refactor-the-pidfd-logic-into-lsfd-pidfd.c.patch
|
||||
Patch8: 0003-lsfd-Support-pidfs.patch
|
||||
Patch9: 0004-lsfd-test-Adapt-test-cases-for-pidfs.patch
|
||||
BuildRequires: audit-devel
|
||||
BuildRequires: bc
|
||||
BuildRequires: binutils-devel
|
||||
BuildRequires: fdupes
|
||||
BuildRequires: file-devel
|
||||
BuildRequires: gettext-devel
|
||||
BuildRequires: libcap-ng-devel
|
||||
BuildRequires: libeconf-devel-static
|
||||
@ -464,6 +467,7 @@ cp -a %{S:2} .
|
||||
%autopatch -p1
|
||||
# This test randomly fails or keeps hanging task inside build chroot (tested on 2.38).
|
||||
rm tests/ts/lsns/ioctl_ns
|
||||
AUTOPOINT=true GTKDOCIZE=true autoreconf -vfi
|
||||
|
||||
%build
|
||||
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects
|
||||
@ -479,6 +483,10 @@ function configure_and_build() {
|
||||
|
||||
# configure options depending on ulbuild and ulsubset values
|
||||
configure_options=""
|
||||
# libmagic is only used for determining in more(1) whether or not a file
|
||||
# is binary. but it has builtin code that is doing the same with a simpler
|
||||
# check and the libmagic database dependency is rather large (9MB+)
|
||||
configure_options+="--without-libmagic "
|
||||
|
||||
%if "%ulbuild" == "python"
|
||||
%define _configure ../configure
|
||||
@ -506,7 +514,6 @@ configure_options+="--with-systemd "
|
||||
%endif
|
||||
# ulsubset == systemd
|
||||
|
||||
#AUTOPOINT=true GTKDOCIZE=true autoreconf -vfi
|
||||
# All dirs needs to be specified, as %%configure does not derive them
|
||||
# from %%_prefix, and bootstrap build will fall back to /usr.
|
||||
%configure\
|
||||
@ -1034,7 +1041,7 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
|
||||
%core %{_bindir}/irqtop
|
||||
%core %{_bindir}/isosize
|
||||
|
||||
%if 0%{?suse_version} >= 1599
|
||||
%if 0%{?suse_version} >= 1600
|
||||
# last provided by wtmpdb, btmp support dropped
|
||||
%exclude %{_bindir}/last
|
||||
%exclude %{_bindir}/lastb
|
||||
@ -1042,7 +1049,6 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
|
||||
%core %{_bindir}/last
|
||||
%core %{_bindir}/lastb
|
||||
%endif
|
||||
# 0%{?suse_version} >= 1599
|
||||
|
||||
%core %{_bindir}/line
|
||||
%core %{_bindir}/look
|
||||
@ -1143,7 +1149,7 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
|
||||
%exclude %{_datadir}/bash-completion/completions/uuidd
|
||||
|
||||
# wtmpdb
|
||||
%if 0%{?suse_version} >= 1599
|
||||
%if 0%{?suse_version} >= 1600
|
||||
%exclude %{_datadir}/bash-completion/completions/last
|
||||
%exclude %{_datadir}/bash-completion/completions/lastb
|
||||
%endif
|
||||
@ -1242,14 +1248,13 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
|
||||
%core %{_mandir}/man1/ipcrm.1.gz
|
||||
%core %{_mandir}/man1/ipcs.1.gz
|
||||
|
||||
%if 0%{?suse_version} >= 1599
|
||||
%if 0%{?suse_version} >= 1600
|
||||
%exclude %{_mandir}/man1/last.1.gz
|
||||
%exclude %{_mandir}/man1/lastb.1.gz
|
||||
%else
|
||||
%core %{_mandir}/man1/last.1.gz
|
||||
%core %{_mandir}/man1/lastb.1.gz
|
||||
%endif
|
||||
# 0%{?suse_version} >= 1599
|
||||
|
||||
%core %{_mandir}/man1/line.1.gz
|
||||
%core %{_mandir}/man1/login.1.gz
|
||||
|
Loading…
Reference in New Issue
Block a user