[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1440460739-19522-1-git-send-email-dianders@chromium.org>
Date: Mon, 24 Aug 2015 16:58:59 -0700
From: Douglas Anderson <dianders@...omium.org>
To: Kees Cook <keescook@...omium.org>, Nicolas Pitre <nico@...aro.org>
Cc: Aapo Vienamo <avienamo@...dia.com>,
Douglas Anderson <dianders@...omium.org>,
linux@....linux.org.uk, rabin@....in, tixy@...aro.org,
wangnan0@...wei.com, linux-arm-kernel@...ts.infradead.org,
linux-kernel@...r.kernel.org
Subject: [PATCH] ARM: probes: Don't stop the machine if we're in the debugger
If we're in kgdb then the machine is already stopped. Trying to stop
it again will cause us to try to sleep, which is not allowed while in
kgdb. To avoid this problem, only stop the machine when we're not in
kgdb.
Reported-by: Aapo Vienamo <avienamo@...dia.com>
Suggested-by: Kees Cook <keescook@...omium.org>
Signed-off-by: Douglas Anderson <dianders@...omium.org>
---
arch/arm/kernel/patch.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/arch/arm/kernel/patch.c b/arch/arm/kernel/patch.c
index 69bda1a..abf30ec 100644
--- a/arch/arm/kernel/patch.c
+++ b/arch/arm/kernel/patch.c
@@ -1,5 +1,6 @@
#include <linux/kernel.h>
#include <linux/spinlock.h>
+#include <linux/kgdb.h>
#include <linux/kprobes.h>
#include <linux/mm.h>
#include <linux/stop_machine.h>
@@ -124,6 +125,9 @@ void __kprobes patch_text(void *addr, unsigned int insn)
.insn = insn,
};
- stop_machine(patch_text_stop_machine, &patch, NULL);
+ /* Stop machine before patching; but not if in the debugger */
+ if (unlikely(in_dbg_master()))
+ patch_text_stop_machine(&patch);
+ else
+ stop_machine(patch_text_stop_machine, &patch, NULL);
}
--
2.5.0.457.gab17608
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists