From ea08eeccae9297f7aabd2ef7f0c2517ac4549acc Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Tue, 20 Feb 2024 01:18:26 +0000
Subject: [PATCH] write in 30M
---
kernel/kernel/ptrace.c | 32 +++++++++-----------------------
1 files changed, 9 insertions(+), 23 deletions(-)
diff --git a/kernel/kernel/ptrace.c b/kernel/kernel/ptrace.c
index fb5d1a1..aab480e 100644
--- a/kernel/kernel/ptrace.c
+++ b/kernel/kernel/ptrace.c
@@ -196,14 +196,7 @@
spin_lock_irq(&task->sighand->siglock);
if (task_is_traced(task) && !looks_like_a_spurious_pid(task) &&
!__fatal_signal_pending(task)) {
- unsigned long flags;
-
- raw_spin_lock_irqsave(&task->pi_lock, flags);
- if (task->state & __TASK_TRACED)
- task->state = __TASK_TRACED;
- else
- task->saved_state = __TASK_TRACED;
- raw_spin_unlock_irqrestore(&task->pi_lock, flags);
+ task->state = __TASK_TRACED;
ret = true;
}
spin_unlock_irq(&task->sighand->siglock);
@@ -213,8 +206,8 @@
static void ptrace_unfreeze_traced(struct task_struct *task)
{
- unsigned long flags;
- bool frozen = true;
+ if (task->state != __TASK_TRACED)
+ return;
WARN_ON(!task->ptrace || task->parent != current);
@@ -223,19 +216,12 @@
* Recheck state under the lock to close this race.
*/
spin_lock_irq(&task->sighand->siglock);
-
- raw_spin_lock_irqsave(&task->pi_lock, flags);
- if (task->state == __TASK_TRACED)
- task->state = TASK_TRACED;
- else if (task->saved_state == __TASK_TRACED)
- task->saved_state = TASK_TRACED;
- else
- frozen = false;
- raw_spin_unlock_irqrestore(&task->pi_lock, flags);
-
- if (frozen && __fatal_signal_pending(task))
- wake_up_state(task, __TASK_TRACED);
-
+ if (task->state == __TASK_TRACED) {
+ if (__fatal_signal_pending(task))
+ wake_up_state(task, __TASK_TRACED);
+ else
+ task->state = TASK_TRACED;
+ }
spin_unlock_irq(&task->sighand->siglock);
}
--
Gitblit v1.6.2