Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1500906
| From | Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 4.8 18/37] arm64: fix dump_backtrace/unwind_frame with NULL tsk |
| Date | 2016-10-14 14:30 +0200 |
| Message-ID | <ss9MC-1cq-41@gated-at.bofh.it> (permalink) |
| References | <ss9MB-1cq-5@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
4.8-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Rutland <mark.rutland@arm.com>
commit b5e7307d9d5a340d2c9fabbe1cee137d4c682c71 upstream.
In some places, dump_backtrace() is called with a NULL tsk parameter,
e.g. in bug_handler() in arch/arm64, or indirectly via show_stack() in
core code. The expectation is that this is treated as if current were
passed instead of NULL. Similar is true of unwind_frame().
Commit a80a0eb70c358f8c ("arm64: make irq_stack_ptr more robust") didn't
take this into account. In dump_backtrace() it compares tsk against
current *before* we check if tsk is NULL, and in unwind_frame() we never
set tsk if it is NULL.
Due to this, we won't initialise irq_stack_ptr in either function. In
dump_backtrace() this results in calling dump_mem() for memory
immediately above the IRQ stack range, rather than for the relevant
range on the task stack. In unwind_frame we'll reject unwinding frames
on the IRQ stack.
In either case this results in incomplete or misleading backtrace
information, but is not otherwise problematic. The initial percpu areas
(including the IRQ stacks) are allocated in the linear map, and dump_mem
uses __get_user(), so we shouldn't access anything with side-effects,
and will handle holes safely.
This patch fixes the issue by having both functions handle the NULL tsk
case before doing anything else with tsk.
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Fixes: a80a0eb70c358f8c ("arm64: make irq_stack_ptr more robust")
Acked-by: James Morse <james.morse@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Yang Shi <yang.shi@linaro.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/arm64/kernel/stacktrace.c | 5 ++++-
arch/arm64/kernel/traps.c | 10 +++++-----
2 files changed, 9 insertions(+), 6 deletions(-)
--- a/arch/arm64/kernel/stacktrace.c
+++ b/arch/arm64/kernel/stacktrace.c
@@ -43,6 +43,9 @@ int notrace unwind_frame(struct task_str
unsigned long fp = frame->fp;
unsigned long irq_stack_ptr;
+ if (!tsk)
+ tsk = current;
+
/*
* Switching between stacks is valid when tracing current and in
* non-preemptible context.
@@ -67,7 +70,7 @@ int notrace unwind_frame(struct task_str
frame->pc = READ_ONCE_NOCHECK(*(unsigned long *)(fp + 8));
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
- if (tsk && tsk->ret_stack &&
+ if (tsk->ret_stack &&
(frame->pc == (unsigned long)return_to_handler)) {
/*
* This is a case where function graph tracer has
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -142,6 +142,11 @@ static void dump_backtrace(struct pt_reg
unsigned long irq_stack_ptr;
int skip;
+ pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk);
+
+ if (!tsk)
+ tsk = current;
+
/*
* Switching between stacks is valid when tracing current and in
* non-preemptible context.
@@ -151,11 +156,6 @@ static void dump_backtrace(struct pt_reg
else
irq_stack_ptr = 0;
- pr_debug("%s(regs = %p tsk = %p)\n", __func__, regs, tsk);
-
- if (!tsk)
- tsk = current;
-
if (tsk == current) {
frame.fp = (unsigned long)__builtin_frame_address(0);
frame.sp = current_stack_pointer;
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 4.8 00/37] 4.8.2-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:30 +0200
[PATCH 4.8 27/37] x86/mm/pkeys: Do not skip PKRU register if debug registers are not used Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:30 +0200
[PATCH 4.8 19/37] x86/boot: Fix kdump, cleanup aborted E820_PRAM max_pfn manipulation Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:30 +0200
[PATCH 4.8 24/37] x86/platform/intel-mid: Keep SRAM powered on at boot Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:30 +0200
[PATCH 4.8 17/37] KVM: PPC: BookE: Fix a sanity check Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:30 +0200
[PATCH 4.8 20/37] x86/irq: Prevent force migration of irqs which are not in the vector domain Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:30 +0200
[PATCH 4.8 01/37] usb: storage: fix runtime pm issue in usb_stor_probe2 Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:30 +0200
[PATCH 4.8 18/37] arm64: fix dump_backtrace/unwind_frame with NULL tsk Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:30 +0200
[PATCH 4.8 16/37] KVM: arm/arm64: vgic: Dont flush/sync without a working vgic Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:30 +0200
[PATCH 4.8 08/37] mfd: rtsx_usb: Avoid setting ucr->current_sg.status Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 37/37] tpm_crb: fix crb_req_canceled behavior Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 26/37] arch/x86: Handle non enumerated CPU after physical hotplug Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 02/37] timekeeping: Fix __ktime_get_fast_ns() regression Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 34/37] Bluetooth: Add a new 04ca:3011 QCA_ROME device Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 22/37] x86/cpu: Rename Merrifield2 to Moorefield Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 05/37] ALSA: ali5451: Fix out-of-bound position reporting Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 36/37] tpm: fix a race condition in tpm2_unseal_trusted() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 30/37] ARM: dts: mvebu: armada-390: add missing compatibility string and bracket Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 07/37] ALSA: usb-line6: use the same declaration as definition in header for MIDI manufacturer ID Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 28/37] x86/dumpstack: Fix x86_32 kernel_stack_pointer() previous stack access Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 12/37] xen/x86: Update topology map for PV VCPUs Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 35/37] ima: use file_dentry() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 06/37] ALSA: usb-audio: Extend DragonFly dB scale quirk to cover other variants Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 04/37] phy: sun4i-usb: Use spinlock to guard phyctl register access Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 09/37] mfd: atmel-hlcdc: Do not sleep in atomic context Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 03/37] usb: dwc3: fix Clear Stall EP command failure Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 23/37] x86/platform/intel-mid: Add Intel Penwell to ID table Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 33/37] ARM: cpuidle: Fix error return code Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
[PATCH 4.8 21/37] x86/pkeys: Make protection keys an "eager" feature Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-14 14:40 +0200
Re: [PATCH 4.8 00/37] 4.8.2-stable review Shuah Khan <shuah.kh@samsung.com> - 2016-10-14 21:00 +0200
Re: [PATCH 4.8 00/37] 4.8.2-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-15 14:10 +0200
Re: [PATCH 4.8 00/37] 4.8.2-stable review Guenter Roeck <linux@roeck-us.net> - 2016-10-14 21:20 +0200
Re: [PATCH 4.8 00/37] 4.8.2-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-15 14:10 +0200
Re: [PATCH 4.8 00/37] 4.8.2-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-10-15 13:40 +0200
Re: [PATCH 4.8 00/37] 4.8.2-stable review Kevin Hilman <khilman@baylibre.com> - 2016-10-17 18:50 +0200
csiph-web