This is a note to let you know that I've just added the patch titled

    ptrace/x86: Introduce set_task_blockstep() helper

to the 3.4-stable tree which can be found at:
    
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     ptrace-x86-introduce-set_task_blockstep-helper.patch
and it can be found in the queue-3.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.


>From 6d0d3f3aca8f6ec0cd91d062abab0196905a9352 Mon Sep 17 00:00:00 2001
From: Oleg Nesterov <[email protected]>
Date: Fri, 3 Aug 2012 17:31:46 +0200
Subject: ptrace/x86: Introduce set_task_blockstep() helper

From: Oleg Nesterov <[email protected]>

commit 848e8f5f0ad3169560c516fff6471be65f76e69f upstream.

No functional changes, preparation for the next fix and for uprobes
single-step fixes.

Move the code playing with TIF_BLOCKSTEP/DEBUGCTLMSR_BTF into the
new helper, set_task_blockstep().

Signed-off-by: Oleg Nesterov <[email protected]>
Acked-by: Srikar Dronamraju <[email protected]>
Signed-off-by: Ben Hutchings <[email protected]>
Cc: Rui Xiang <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 arch/x86/kernel/step.c |   41 +++++++++++++++++++++--------------------
 1 file changed, 21 insertions(+), 20 deletions(-)

--- a/arch/x86/kernel/step.c
+++ b/arch/x86/kernel/step.c
@@ -157,6 +157,21 @@ static int enable_single_step(struct tas
        return 1;
 }
 
+static void set_task_blockstep(struct task_struct *task, bool on)
+{
+       unsigned long debugctl;
+
+       debugctl = get_debugctlmsr();
+       if (on) {
+               debugctl |= DEBUGCTLMSR_BTF;
+               set_tsk_thread_flag(task, TIF_BLOCKSTEP);
+       } else {
+               debugctl &= ~DEBUGCTLMSR_BTF;
+               clear_tsk_thread_flag(task, TIF_BLOCKSTEP);
+       }
+       update_debugctlmsr(debugctl);
+}
+
 /*
  * Enable single or block step.
  */
@@ -169,19 +184,10 @@ static void enable_step(struct task_stru
         * So no one should try to use debugger block stepping in a program
         * that uses user-mode single stepping itself.
         */
-       if (enable_single_step(child) && block) {
-               unsigned long debugctl = get_debugctlmsr();
-
-               debugctl |= DEBUGCTLMSR_BTF;
-               update_debugctlmsr(debugctl);
-               set_tsk_thread_flag(child, TIF_BLOCKSTEP);
-       } else if (test_tsk_thread_flag(child, TIF_BLOCKSTEP)) {
-               unsigned long debugctl = get_debugctlmsr();
-
-               debugctl &= ~DEBUGCTLMSR_BTF;
-               update_debugctlmsr(debugctl);
-               clear_tsk_thread_flag(child, TIF_BLOCKSTEP);
-       }
+       if (enable_single_step(child) && block)
+               set_task_blockstep(child, true);
+       else if (test_tsk_thread_flag(child, TIF_BLOCKSTEP))
+               set_task_blockstep(child, false);
 }
 
 void user_enable_single_step(struct task_struct *child)
@@ -199,13 +205,8 @@ void user_disable_single_step(struct tas
        /*
         * Make sure block stepping (BTF) is disabled.
         */
-       if (test_tsk_thread_flag(child, TIF_BLOCKSTEP)) {
-               unsigned long debugctl = get_debugctlmsr();
-
-               debugctl &= ~DEBUGCTLMSR_BTF;
-               update_debugctlmsr(debugctl);
-               clear_tsk_thread_flag(child, TIF_BLOCKSTEP);
-       }
+       if (test_tsk_thread_flag(child, TIF_BLOCKSTEP))
+               set_task_blockstep(child, false);
 
        /* Always clear TIF_SINGLESTEP... */
        clear_tsk_thread_flag(child, TIF_SINGLESTEP);


Patches currently in stable-queue which might be from [email protected] are

queue-3.4/list-introduce-list_next_entry-and-list_prev_entry.patch
queue-3.4/ptrace-x86-partly-fix-set_task_blockstep-update_debugctlmsr-logic.patch
queue-3.4/ptrace-x86-introduce-set_task_blockstep-helper.patch
queue-3.4/x86-get_unmapped_area-access-mmap_legacy_base-through-mm_struct-member.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to