hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/kernel/ptrace.c
....@@ -196,14 +196,7 @@
196196 spin_lock_irq(&task->sighand->siglock);
197197 if (task_is_traced(task) && !looks_like_a_spurious_pid(task) &&
198198 !__fatal_signal_pending(task)) {
199
- unsigned long flags;
200
-
201
- raw_spin_lock_irqsave(&task->pi_lock, flags);
202
- if (task->state & __TASK_TRACED)
203
- task->state = __TASK_TRACED;
204
- else
205
- task->saved_state = __TASK_TRACED;
206
- raw_spin_unlock_irqrestore(&task->pi_lock, flags);
199
+ task->state = __TASK_TRACED;
207200 ret = true;
208201 }
209202 spin_unlock_irq(&task->sighand->siglock);
....@@ -213,8 +206,8 @@
213206
214207 static void ptrace_unfreeze_traced(struct task_struct *task)
215208 {
216
- unsigned long flags;
217
- bool frozen = true;
209
+ if (task->state != __TASK_TRACED)
210
+ return;
218211
219212 WARN_ON(!task->ptrace || task->parent != current);
220213
....@@ -223,19 +216,12 @@
223216 * Recheck state under the lock to close this race.
224217 */
225218 spin_lock_irq(&task->sighand->siglock);
226
-
227
- raw_spin_lock_irqsave(&task->pi_lock, flags);
228
- if (task->state == __TASK_TRACED)
229
- task->state = TASK_TRACED;
230
- else if (task->saved_state == __TASK_TRACED)
231
- task->saved_state = TASK_TRACED;
232
- else
233
- frozen = false;
234
- raw_spin_unlock_irqrestore(&task->pi_lock, flags);
235
-
236
- if (frozen && __fatal_signal_pending(task))
237
- wake_up_state(task, __TASK_TRACED);
238
-
219
+ if (task->state == __TASK_TRACED) {
220
+ if (__fatal_signal_pending(task))
221
+ wake_up_state(task, __TASK_TRACED);
222
+ else
223
+ task->state = TASK_TRACED;
224
+ }
239225 spin_unlock_irq(&task->sighand->siglock);
240226 }
241227