All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Morse <james.morse@arm.com>
To: David Long <dave.long@linaro.org>
Cc: "Catalin Marinas" <catalin.marinas@arm.com>,
	"Will Deacon" <will.deacon@arm.com>,
	"Sandeepa Prabhu" <sandeepa.s.prabhu@gmail.com>,
	"William Cohen" <wcohen@redhat.com>,
	"Pratyush Anand" <panand@redhat.com>,
	"Steve Capper" <steve.capper@linaro.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	"Marc Zyngier" <marc.zyngier@arm.com>,
	"Dave P Martin" <Dave.Martin@arm.com>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Robin Murphy" <Robin.Murphy@arm.com>,
	"Ard Biesheuvel" <ard.biesheuvel@linaro.org>,
	"Jens Wiklander" <jens.wiklander@linaro.org>,
	"Christoffer Dall" <christoffer.dall@linaro.org>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Yang Shi" <yang.shi@linaro.org>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Viresh Kumar" <viresh.kumar@linaro.org>,
	"Suzuki K. Poulose" <suzuki.poulose@arm.com>,
	"Kees Cook" <keescook@chromium.org>,
	"Zi Shen Lim" <zlim.lnx@gmail.com>,
	"John Blackwood" <john.blackwood@ccur.com>,
	"Feng Kan" <fkan@apm.com>,
	"Balamurugan Shanmugam" <bshanmugam@apm.com>,
	"Vladimir Murzin" <Vladimir.Murzin@arm.com>,
	"Mark Salyzyn" <salyzyn@android.com>,
	"Petr Mladek" <pmladek@suse.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Mark Brown" <broonie@kernel.org>
Subject: Re: [PATCH v11 1/9] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature
Date: Fri, 11 Mar 2016 18:07:10 +0000	[thread overview]
Message-ID: <56E3094E.5010906@arm.com> (raw)
In-Reply-To: <1457501543-24197-2-git-send-email-dave.long@linaro.org>

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

WARNING: multiple messages have this Message-ID (diff)
From: james.morse@arm.com (James Morse)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v11 1/9] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature
Date: Fri, 11 Mar 2016 18:07:10 +0000	[thread overview]
Message-ID: <56E3094E.5010906@arm.com> (raw)
In-Reply-To: <1457501543-24197-2-git-send-email-dave.long@linaro.org>

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

  reply	other threads:[~2016-03-11 18:08 UTC|newest]

Thread overview: 76+ 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 ` David Long
2016-03-09  5:32 ` [PATCH v11 1/9] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature David Long
2016-03-09  5:32   ` David Long
2016-03-11 18:07   ` James Morse [this message]
2016-03-11 18:07     ` James Morse
2016-03-18 13:06     ` David Long
2016-03-18 13:06       ` David Long
2016-03-15 11:04   ` Marc Zyngier
2016-03-15 11:04     ` Marc Zyngier
2016-03-21  7:08     ` David Long
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   ` David Long
2016-03-09  5:32 ` [PATCH v11 3/9] arm64: add copy_to/from_user to kprobes blacklist David Long
2016-03-09  5:32   ` David Long
2016-03-15 18:47   ` James Morse
2016-03-15 18:47     ` James Morse
2016-03-16  5:43     ` Pratyush Anand
2016-03-16  5:43       ` Pratyush Anand
2016-03-16 10:27       ` James Morse
2016-03-16 10:27         ` James Morse
2016-03-17  7:57         ` Pratyush Anand
2016-03-17  7:57           ` Pratyush Anand
2016-03-18 13:29           ` Pratyush Anand
2016-03-18 13:29             ` Pratyush Anand
2016-03-18 14:02             ` James Morse
2016-03-18 14:02               ` James Morse
2016-03-18 14:43               ` Pratyush Anand
2016-03-18 14:43                 ` Pratyush Anand
2016-03-18 18:12                 ` James Morse
2016-03-18 18:12                   ` James Morse
2016-03-21  5:17                   ` Pratyush Anand
2016-03-21  5:17                     ` Pratyush Anand
2016-03-21 14:52             ` Will Deacon
2016-03-21 14:52               ` Will Deacon
2016-03-22 16:51               ` Pratyush Anand
2016-03-22 16:51                 ` Pratyush Anand
2016-03-17 12:04   ` 平松雅巳 / HIRAMATU,MASAMI
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-09  5:32   ` David Long
2016-03-13 12:09   ` Marc Zyngier
2016-03-13 12:09     ` Marc Zyngier
2016-03-14  4:04     ` Pratyush Anand
2016-03-14  4:04       ` Pratyush Anand
2016-03-14  7:38       ` Marc Zyngier
2016-03-14  7:38         ` Marc Zyngier
2016-03-21  8:35         ` David Long
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-03-09  5:32   ` David Long
2016-04-20  1:29   ` Li Bin
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-09  5:32   ` David Long
2016-03-12  3:56   ` Marc Zyngier
2016-03-12  3:56     ` Marc Zyngier
2016-03-21  9:39     ` David Long
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-09  5:32   ` David Long
2016-03-13 13:52   ` Marc Zyngier
2016-03-13 13:52     ` Marc Zyngier
2016-03-21 13:30     ` David Long
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-09  5:32   ` David Long
2016-03-17 12:22   ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-17 12:22     ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-17 12:58     ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-17 12:58       ` 平松雅巳 / HIRAMATU,MASAMI
2016-03-21 13:33       ` David Long
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
2016-03-09  5:32   ` 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=56E3094E.5010906@arm.com \
    --to=james.morse@arm.com \
    --cc=Dave.Martin@arm.com \
    --cc=Robin.Murphy@arm.com \
    --cc=Vladimir.Murzin@arm.com \
    --cc=akpm@linux-foundation.org \
    --cc=alex.bennee@linaro.org \
    --cc=ard.biesheuvel@linaro.org \
    --cc=broonie@kernel.org \
    --cc=bshanmugam@apm.com \
    --cc=catalin.marinas@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=dave.long@linaro.org \
    --cc=fkan@apm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jens.wiklander@linaro.org \
    --cc=john.blackwood@ccur.com \
    --cc=keescook@chromium.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=panand@redhat.com \
    --cc=pmladek@suse.com \
    --cc=salyzyn@android.com \
    --cc=sandeepa.s.prabhu@gmail.com \
    --cc=steve.capper@linaro.org \
    --cc=suzuki.poulose@arm.com \
    --cc=viresh.kumar@linaro.org \
    --cc=wcohen@redhat.com \
    --cc=will.deacon@arm.com \
    --cc=yang.shi@linaro.org \
    --cc=zlim.lnx@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.