]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/blob - rt-patches/0262-ptrace-don-t-open-IRQs-in-ptrace_freeze_traced-too-e.patch
Fix memguard and related syscalls
[hercules2020/nv-tegra/linux-4.4.git] / rt-patches / 0262-ptrace-don-t-open-IRQs-in-ptrace_freeze_traced-too-e.patch
1 From 24a4176c16eb260d7caf5e18bbff4db3c9ba1914 Mon Sep 17 00:00:00 2001
2 From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
3 Date: Wed, 13 Jan 2016 14:09:05 +0100
4 Subject: [PATCH 262/366] ptrace: don't open IRQs in ptrace_freeze_traced() too
5  early
6
7 In the non-RT case the spin_lock_irq() here disables interrupts as well
8 as raw_spin_lock_irq(). So in the unlock case the interrupts are enabled
9 too early.
10
11 Reported-by: kernel test robot <ying.huang@linux.intel.com>
12 Cc: stable-rt@vger.kernel.org
13 Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
14 ---
15  kernel/ptrace.c | 6 ++++--
16  1 file changed, 4 insertions(+), 2 deletions(-)
17
18 diff --git a/kernel/ptrace.c b/kernel/ptrace.c
19 index b852051..1004af7 100644
20 --- a/kernel/ptrace.c
21 +++ b/kernel/ptrace.c
22 @@ -129,12 +129,14 @@ static bool ptrace_freeze_traced(struct task_struct *task)
23  
24         spin_lock_irq(&task->sighand->siglock);
25         if (task_is_traced(task) && !__fatal_signal_pending(task)) {
26 -               raw_spin_lock_irq(&task->pi_lock);
27 +               unsigned long flags;
28 +
29 +               raw_spin_lock_irqsave(&task->pi_lock, flags);
30                 if (task->state & __TASK_TRACED)
31                         task->state = __TASK_TRACED;
32                 else
33                         task->saved_state = __TASK_TRACED;
34 -               raw_spin_unlock_irq(&task->pi_lock);
35 +               raw_spin_unlock_irqrestore(&task->pi_lock, flags);
36                 ret = true;
37         }
38         spin_unlock_irq(&task->sighand->siglock);
39 -- 
40 1.9.1
41