linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: dave.long@linaro.org (David Long)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v11 1/9] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature
Date: Fri, 18 Mar 2016 09:06:06 -0400	[thread overview]
Message-ID: <56EBFD3E.5070600@linaro.org> (raw)
In-Reply-To: <56E3094E.5010906@arm.com>

On 03/11/2016 01:07 PM, James Morse wrote:
> Hi David,
>
> On 09/03/16 05:32, David Long wrote:
>> From: "David A. Long" <dave.long@linaro.org>
>>
>> Add HAVE_REGS_AND_STACK_ACCESS_API feature for arm64.
>>
>> Signed-off-by: David A. Long <dave.long@linaro.org>
>
>> diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
>> index ff7f132..efebf0f 100644
>> --- a/arch/arm64/kernel/ptrace.c
>> +++ b/arch/arm64/kernel/ptrace.c
>
> [ ... SNIP ... ]
>
>> +/**
>> + * regs_within_kernel_stack() - check the address in the stack
>> + * @regs:      pt_regs which contains kernel stack pointer.
>> + * @addr:      address which is checked.
>> + *
>> + * regs_within_kernel_stack() checks @addr is within the kernel stack page(s).
>> + * If @addr is within the kernel stack, it returns true. If not, returns false.
>> + */
>> +bool regs_within_kernel_stack(struct pt_regs *regs, unsigned long addr)
>> +{
>> +	return ((addr & ~(THREAD_SIZE - 1))  ==
>> +		(kernel_stack_pointer(regs) & ~(THREAD_SIZE - 1)));
>
> I'm not sure where this is called from, but if kernel_stack_pointer(regs) could
> ever point into an irq_stack you will get the wrong result.
>
> arch/arm64/include/asm/irq.h has 'on_irq_stack(sp, cpu)' which should help,
> although you will need to check the bounds of the irq_stack separately.
>
>
> The horrible details...
>
>  From arch/arm64/kernel/irq.c:20
>> /* irq stack only needs to be 16 byte aligned - not IRQ_STACK_SIZE aligned. */
>> DEFINE_PER_CPU(unsigned long [IRQ_STACK_SIZE/sizeof(long)], irq_stack)
>> __aligned(16);
>
> This was because per-cpu variables can be at-most page aligned.
> 6cdf9c7ca687 ("arm64: Store struct thread_info in sp_el0") changed
> current_thread_info() to work on these weirdly aligned irq_stacks.
>
>
> Thanks,
>
> James
>
>

It looks like this is ultimately used (currently) only by the 
arch-independent kprobes tracing code.  But it does seem like this will 
be recording the wrong data when stack contents are being traced from 
interrupt routine probes.  I will put a fix in for the next spin.

Thanks,
-dl

  reply	other threads:[~2016-03-18 13:06 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-09  5:32 [PATCH v11 0/9] arm64: Add kernel probes (kprobes) support David Long
2016-03-09  5:32 ` [PATCH v11 1/9] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature David Long
2016-03-11 18:07   ` James Morse
2016-03-18 13:06     ` David Long [this message]
2016-03-15 11:04   ` Marc Zyngier
2016-03-21  7:08     ` David Long
2016-03-09  5:32 ` [PATCH v11 2/9] arm64: Add more test functions to insn.c David Long
2016-03-09  5:32 ` [PATCH v11 3/9] arm64: add copy_to/from_user to kprobes blacklist David Long
2016-03-15 18:47   ` James Morse
2016-03-16  5:43     ` Pratyush Anand
2016-03-16 10:27       ` James Morse
2016-03-17  7:57         ` Pratyush Anand
2016-03-18 13:29           ` Pratyush Anand
2016-03-18 14:02             ` James Morse
2016-03-18 14:43               ` Pratyush Anand
2016-03-18 18:12                 ` James Morse
2016-03-21  5:17                   ` Pratyush Anand
2016-03-21 14:52             ` Will Deacon
2016-03-22 16:51               ` Pratyush Anand
2016-03-17 12:04   ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-09  5:32 ` [PATCH v11 4/9] arm64: add conditional instruction simulation support David Long
2016-03-13 12:09   ` Marc Zyngier
2016-03-14  4:04     ` Pratyush Anand
2016-03-14  7:38       ` Marc Zyngier
2016-03-21  8:35         ` David Long
2016-03-09  5:32 ` [PATCH v11 5/9] arm64: Kprobes with single stepping support David Long
2016-04-20  1:29   ` Li Bin
2016-03-09  5:32 ` [PATCH v11 6/9] arm64: kprobes instruction simulation support David Long
2016-03-12  3:56   ` Marc Zyngier
2016-03-21  9:39     ` David Long
2016-03-09  5:32 ` [PATCH v11 7/9] arm64: Add trampoline code for kretprobes David Long
2016-03-13 13:52   ` Marc Zyngier
2016-03-21 13:30     ` David Long
2016-03-09  5:32 ` [PATCH v11 8/9] arm64: Add kernel return probes support (kretprobes) David Long
2016-03-17 12:22   ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-17 12:58     ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-21 13:33       ` David Long
2016-03-09  5:32 ` [PATCH v11 9/9] kprobes: Add arm64 case in kprobe example module David Long

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56EBFD3E.5070600@linaro.org \
    --to=dave.long@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).