Revert pidfd patch which breaks systemd-journal

Signed-off-by: Justin M. Forbes <jforbes@fedoraproject.org>
This commit is contained in:
Justin M. Forbes 2024-08-22 07:54:47 -06:00
parent 1719f01813
commit 542e8250bf
No known key found for this signature in database
GPG Key ID: B8FA7924A4B1C140

View File

@ -64,6 +64,7 @@
init/main.c | 3 +
kernel/Makefile | 1 +
kernel/bpf/syscall.c | 23 +
kernel/fork.c | 25 +-
kernel/module/main.c | 13 +
kernel/module/signing.c | 9 +-
kernel/panic.c | 13 +
@ -78,7 +79,7 @@
security/lockdown/Kconfig | 13 +
security/lockdown/lockdown.c | 1 +
security/security.c | 12 +
80 files changed, 2685 insertions(+), 258 deletions(-)
81 files changed, 2688 insertions(+), 280 deletions(-)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 09126bb8cc9f..ee2984e46c06 100644
@ -2340,10 +2341,10 @@ index a14f6013e316..6c20453fdf76 100644
error_proc:
diff --git a/fs/erofs/super.c b/fs/erofs/super.c
index 32ce5b35e1df..eb0d6e5822fd 100644
index 6cb5c8916174..34b899ab37bb 100644
--- a/fs/erofs/super.c
+++ b/fs/erofs/super.c
@@ -595,6 +595,9 @@ static int erofs_fc_fill_super(struct super_block *sb, struct fs_context *fc)
@@ -581,6 +581,9 @@ static int erofs_fc_fill_super(struct super_block *sb, struct fs_context *fc)
{
struct inode *inode;
struct erofs_sb_info *sbi = EROFS_SB(sb);
@ -2353,7 +2354,7 @@ index 32ce5b35e1df..eb0d6e5822fd 100644
int err;
sb->s_magic = EROFS_SUPER_MAGIC;
@@ -701,6 +704,12 @@ static int erofs_fc_fill_super(struct super_block *sb, struct fs_context *fc)
@@ -687,6 +690,12 @@ static int erofs_fc_fill_super(struct super_block *sb, struct fs_context *fc)
return err;
erofs_info(sb, "mounted with root inode @ nid %llu.", sbi->root_nid);
@ -2528,10 +2529,10 @@ index 88ecc5e9f523..bcc0377c716a 100644
+
#endif /* _LINUX_MODULE_H */
diff --git a/include/linux/panic.h b/include/linux/panic.h
index 3130e0b5116b..2b51f6eefcd6 100644
index 54d90b6c5f47..cc5def6f2b2e 100644
--- a/include/linux/panic.h
+++ b/include/linux/panic.h
@@ -73,7 +73,23 @@ static inline void set_arch_panic_timeout(int timeout, int arch_default_timeout)
@@ -74,7 +74,23 @@ static inline void set_arch_panic_timeout(int timeout, int arch_default_timeout)
#define TAINT_AUX 16
#define TAINT_RANDSTRUCT 17
#define TAINT_TEST 18
@ -3328,6 +3329,50 @@ index bf6c5f685ea2..649f2fccaddd 100644
*(int *)table->data = unpriv_enable;
}
diff --git a/kernel/fork.c b/kernel/fork.c
index 18bdc87209d0..cc760491f201 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -2053,23 +2053,10 @@ static int __pidfd_prepare(struct pid *pid, unsigned int flags, struct file **re
*/
int pidfd_prepare(struct pid *pid, unsigned int flags, struct file **ret)
{
- if (!pid)
- return -EINVAL;
-
- scoped_guard(rcu) {
- struct task_struct *tsk;
-
- if (flags & PIDFD_THREAD)
- tsk = pid_task(pid, PIDTYPE_PID);
- else
- tsk = pid_task(pid, PIDTYPE_TGID);
- if (!tsk)
- return -EINVAL;
+ bool thread = flags & PIDFD_THREAD;
- /* Don't create pidfds for kernel threads for now. */
- if (tsk->flags & PF_KTHREAD)
- return -EINVAL;
- }
+ if (!pid || !pid_has_task(pid, thread ? PIDTYPE_PID : PIDTYPE_TGID))
+ return -EINVAL;
return __pidfd_prepare(pid, flags, ret);
}
@@ -2416,12 +2403,6 @@ __latent_entropy struct task_struct *copy_process(
if (clone_flags & CLONE_PIDFD) {
int flags = (clone_flags & CLONE_THREAD) ? PIDFD_THREAD : 0;
- /* Don't create pidfds for kernel threads for now. */
- if (args->kthread) {
- retval = -EINVAL;
- goto bad_fork_free_pid;
- }
-
/* Note that no task has been attached to @pid yet. */
retval = __pidfd_prepare(pid, flags, &pidfile);
if (retval < 0)
diff --git a/kernel/module/main.c b/kernel/module/main.c
index 71396e297499..29e469418075 100644
--- a/kernel/module/main.c
@ -3404,10 +3449,10 @@ index a2ff4242e623..f0d2be1ee4f1 100644
int module_sig_check(struct load_info *info, int flags)
diff --git a/kernel/panic.c b/kernel/panic.c
index f861bedc1925..3b474ad6a6a7 100644
index 2a0449144f82..a8feef83d920 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -502,6 +502,19 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = {
@@ -508,6 +508,19 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = {
TAINT_FLAG(AUX, 'X', ' ', true),
TAINT_FLAG(RANDSTRUCT, 'T', ' ', true),
TAINT_FLAG(TEST, 'N', ' ', true),