Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1452335
| Path | csiph.com!aioe.org!bofh.it!news.nic.it!robomod |
|---|---|
| From | Daniel Thompson <daniel.thompson@linaro.org> |
| Newsgroups | linux.kernel |
| Subject | Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support |
| Date | Fri, 29 Jul 2016 11:10:01 +0200 |
| Message-ID | <s0bXP-2EU-7@gated-at.bofh.it> (permalink) |
| References | <rX2el-3Bs-1@gated-at.bofh.it> <rXpaW-1tK-33@gated-at.bofh.it> <rXpXk-23K-13@gated-at.bofh.it> <rXr33-2Nx-1@gated-at.bofh.it> <rXFIJ-4tz-3@gated-at.bofh.it> <rXL1M-7Ib-9@gated-at.bofh.it> <rYRHP-7ix-1@gated-at.bofh.it> <rYWxP-25U-1@gated-at.bofh.it> <rZvFf-7n2-5@gated-at.bofh.it> <rZFlg-5mX-17@gated-at.bofh.it> <rZUNj-7Ak-1@gated-at.bofh.it> |
| Dkim-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=NfbO1mY6i4P/LE40kEnNGM8h05THBnIkDRcnA4bYaXg=; b=k0iRhKD0Pd1f4cIKOHZQ2OzdNbyzihYmX3kPOfxo+qddEdwPH7j7cqrEasw7ioItBd KOl0Ntn6TW75A6p9P5YleJKjuBuvSZznOF6iwgygytLcVI7y+Xj2BhA3yYrPaI0TPhIQ OPWhEyd4YZ9nZaY67L0DyF3sPhSvCRJMdp0Qg= |
| X-Google-Dkim-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=NfbO1mY6i4P/LE40kEnNGM8h05THBnIkDRcnA4bYaXg=; b=Ca/nkmW91T9BYWu8a7hglYoCQ8U/1C3CnqugQy8Js18U+v2uEU2agV1/rVCWX+8+Op StV1DaD/q9c1ohX783jd/PBKfCpYlMQl+NgnymFg2g2APnadF48foS1fEZKP9XEpiYRj vfVtkGWUc/vgXMGhddcwNiK9dFDMYv10c4FJpBPC2WKELEnGsV9YYLxUgnXqr5Nac0i4 CYfiegTNZKCFYPRfdteWcCnpfdx+eeXOOAS00FnRIMbIQ99r+ANwuM+WJ5M0in+sSkqZ Izq/TISJtwtJEZkmscNK2gur1ERO4Cs4zurEFjPtrF5ePYmzfQlM08mDameU0cTM7eeM X7xA== |
| X-Gm-Message-State | AEkoouv4YMmwc8GCOkLjp1AcqUYBfPaJqF/zxlVrobG5HtTkB+m3dtqTQjuQOiB4jbzz2goH |
| X-Received | by 10.194.110.229 with SMTP id id5mr41318973wjb.23.1469782865720; Fri, 29 Jul 2016 02:01:05 -0700 (PDT) |
| User-Agent | Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 |
| MIME-Version | 1.0 |
| Content-Type | text/plain; charset=windows-1252; format=flowed |
| Content-Transfer-Encoding | 7bit |
| Sender | robomod@news.nic.it |
| List-ID | <linux-kernel.vger.kernel.org> |
| X-Mailing-List | linux-kernel@vger.kernel.org |
| Approved | robomod@news.nic.it |
| Lines | 94 |
| Organization | linux.* mail to news gateway |
| X-Original-Cc | Mark Rutland <mark.rutland@arm.com>, Yang Shi <yang.shi@linaro.org>, Zi Shen Lim <zlim.lnx@gmail.com>, Will Deacon <will.deacon@arm.com>, Andrey Ryabinin <ryabinin.a.a@gmail.com>, yalin wang <yalin.wang2010@gmail.com>, Li Bin <huawei.libin@huawei.com>, Jisheng Zhang <jszhang@marvell.com>, John Blackwood <john.blackwood@ccur.com>, Pratyush Anand <panand@redhat.com>, Huang Shijie <shijie.huang@arm.com>, Dave P Martin <Dave.Martin@arm.com>, Petr Mladek <pmladek@suse.com>, Vladimir Murzin <Vladimir.Murzin@arm.com>, Steve Capper <steve.capper@linaro.org>, Suzuki K Poulose <suzuki.poulose@arm.com>, Marc Zyngier <marc.zyngier@arm.com>, Mark Brown <broonie@kernel.org>, Sandeepa Prabhu <sandeepa.s.prabhu@gmail.com>, William Cohen <wcohen@redhat.com>, Alex Bennée <alex.bennee@linaro.org>, Adam Buchbinder <adam.buchbinder@gmail.com>, linux-arm-kernel@lists.infradead.org, Ard Biesheuvel <ard.biesheuvel@linaro.org>, linux-kernel@vger.kernel.org, James Morse <james.morse@arm.com>, Masami Hiramatsu <mhiramat@kernel.org>, Andrew Morton <akpm@linux-foundation.org>, Robin Murphy <robin.murphy@arm.com>, Jens Wiklander <jens.wiklander@linaro.org>, Christoffer Dall <christoffer.dall@linaro.org> |
| X-Original-Date | Fri, 29 Jul 2016 10:01:02 +0100 |
| X-Original-Message-ID | <360d582b-5401-7126-ef40-bd78369c0a34@linaro.org> |
| X-Original-References | <578FA238.3050206@arm.com> <5790F960.5050007@linaro.org> <57910528.7070902@arm.com> <57911590.50305@linaro.org> <20160722101617.GA17821@e104818-lin.cambridge.arm.com> <57924104.1080202@linaro.org> <20160725171350.GE2423@e104818-lin.cambridge.arm.com> <57969234.1070201@linaro.org> <22b277ba-6812-a0dd-9e8e-c29bdb3aa672@linaro.org> <57993211.1040600@linaro.org> <20160728144053.GA26510@e104818-lin.cambridge.arm.com> |
| X-Original-Sender | linux-kernel-owner@vger.kernel.org |
| Xref | csiph.com linux.kernel:1452335 |
Show key headers only | View raw
On 28/07/16 15:40, Catalin Marinas wrote:
> On Wed, Jul 27, 2016 at 06:13:37PM -0400, David Long wrote:
>> On 07/27/2016 07:50 AM, Daniel Thompson wrote:
>>> On 25/07/16 23:27, David Long wrote:
>>>> On 07/25/2016 01:13 PM, Catalin Marinas wrote:
>>>>> The problem is that the original design was done on x86 for its PCS and
>>>>> it doesn't always fit other architectures. So we could either ignore the
>>>>> problem, hoping that no probed function requires argument passing on
>>>>> stack or we copy all the valid data on the kernel stack:
>>>>>
>>>>> diff --git a/arch/arm64/include/asm/kprobes.h
>>>>> b/arch/arm64/include/asm/kprobes.h
>>>>> index 61b49150dfa3..157fd0d0aa08 100644
>>>>> --- a/arch/arm64/include/asm/kprobes.h
>>>>> +++ b/arch/arm64/include/asm/kprobes.h
>>>>> @@ -22,7 +22,7 @@
>>>>>
>>>>> #define __ARCH_WANT_KPROBES_INSN_SLOT
>>>>> #define MAX_INSN_SIZE 1
>>>>> -#define MAX_STACK_SIZE 128
>>>>> +#define MAX_STACK_SIZE THREAD_SIZE
>>>>>
>>>>> #define flush_insn_slot(p) do { } while (0)
>>>>> #define kretprobe_blacklist_size 0
>>>>
>>>> I doubt the ARM PCS is unusual. At any rate I'm certain there are other
>>>> architectures that pass aggregate parameters on the stack. I suspect
>>>> other RISC(-ish) architectures have similar PCS issues and I think this
>>>> is at least a big part of where this simple copy with a 64/128 limit
>>>> comes from, or at least why it continues to exist. That said, I'm not
>>>> enthusiastic about researching that assertion in detail as it could be
>>>> time consuming.
>>>
>>> Given Mark shared a test program I *was* curious enough to take a look
>>> at this.
>>>
>>> The only architecture I can find that behaves like arm64 with the
>>> implicit pass-by-reference described by Catalin/Mark is sparc64.
>>>
>>> In contrast alpha, arm (32-bit), hppa64, mips64 and powerpc64 all use a
>>> hybrid approach where the first fragments of the structure are passed in
>>> registers and the remainder on the stack.
>>
>> That's interesting. It also looks like sparc64 does not copy any stack for
>> jprobes. I guess that approach at least makes it clear what will and won't
>> work.
>
> I suggest we do the same for arm64 - avoid the copying entirely as it's
> not safe anyway. We don't know how much to copy, nor can we be sure it
> is safe (see Dave's DMA to the stack example). This would need to be
> documented in the kprobes.txt file and MAX_STACK_SIZE removed from the
> arm64 kprobes support.
>
> There is also the case that Daniel was talking about - passing more than
> 8 arguments. I don't think it's worth handling this
Its actually quite hard to document the (architecture specific) "no big
structures" *and* the "8 argument" limits. It ends up as something like:
Structures/unions >16 bytes must not be passed by value and the
size of all arguments, after padding each to an 8 byte boundary, must
be less than 64 bytes.
We cannot avoid tackling big structures through documentation but when
we impose additional limits like "only 8 arguments" we are swapping an
architecture neutral "gotcha" that affects almost all jprobes uses (and
can be inferred from the documentation) with an architecture specific one!
> but we should at
> least add a warning and skip the probe:
>
> diff --git a/arch/arm64/kernel/probes/kprobes.c b/arch/arm64/kernel/probes/kprobes.c
> index bf9768588288..84e02606ec3d 100644
> --- a/arch/arm64/kernel/probes/kprobes.c
> +++ b/arch/arm64/kernel/probes/kprobes.c
> @@ -491,6 +491,10 @@ int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
> struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
> long stack_ptr = kernel_stack_pointer(regs);
>
> + /* do not allow arguments passed on the stack */
> + if (WARN_ON_ONCE(regs->sp != regs->regs[29]))
> + return 0;
> +
I don't really understand this test.
If we could reliably assume that the frame record was at the lowest
address within a stack frame then we could exploit that to store the
stacked arguments without risking overwriting volatile variables on the
stack.
Daniel.
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support David Long <dave.long@linaro.org> - 2016-07-26 00:30 +0200
Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support Daniel Thompson <daniel.thompson@linaro.org> - 2016-07-27 14:00 +0200
Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support David Long <dave.long@linaro.org> - 2016-07-28 00:20 +0200
Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support Catalin Marinas <catalin.marinas@arm.com> - 2016-07-28 16:50 +0200
Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support Daniel Thompson <daniel.thompson@linaro.org> - 2016-07-29 11:10 +0200
Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support David Long <dave.long@linaro.org> - 2016-08-04 07:00 +0200
Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support Daniel Thompson <daniel.thompson@linaro.org> - 2016-08-08 13:20 +0200
Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support David Long <dave.long@linaro.org> - 2016-08-08 16:30 +0200
Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support Masami Hiramatsu <mhiramat@kernel.org> - 2016-08-09 01:00 +0200
Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support Catalin Marinas <catalin.marinas@arm.com> - 2016-08-09 19:30 +0200
Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support David Long <dave.long@linaro.org> - 2016-08-10 22:50 +0200
Re: [PATCH v15 04/10] arm64: Kprobes with single stepping support Masami Hiramatsu <mhiramat@kernel.org> - 2016-08-09 00:20 +0200
csiph-web