public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Wang Nan <wangnan0@huawei.com>
To: "Jon Medhurst (Tixy)" <tixy@linaro.org>
Cc: <masami.hiramatsu.pt@hitachi.com>, <lizefan@huawei.com>,
	<linux@arm.linux.org.uk>, <linux-kernel@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v3] ARM: kprobes: Add test cases for stack consuming instructions
Date: Wed, 10 Dec 2014 16:23:37 +0800	[thread overview]
Message-ID: <54880309.3010100@huawei.com> (raw)
In-Reply-To: <1418145071.3641.60.camel@linaro.org>

Hi Tixy,

I experienced another FAIL during test:

[11567.220477] Miscellaneous instructions
[11567.265397] ---------------------------------------------------------
[11567.342626] mrs	r0, cpsr	@ e10f0000
[11568.612656] FAIL: registers differ
[11568.653414] FAIL: Test mrs	r0, cpsr
[11568.695210] FAIL: Scenario 5
[11568.729709] initial_regs:
[11568.761083] r0  21522152 | r1  21522052 | r2  21522352 | r3  21522252
[11568.838301] r4  21522552 | r5  21522452 | r6  21522752 | r7  21522652
[11568.915526] r8  21522952 | r9  21522852 | r10 21522b52 | r11 21522a52
[11568.992748] r12 21522d52 | sp  ed343cf0 | lr  21522f52 | pc  bf11f590
[11569.069969] cpsr 58050013
[11569.101336] expected_regs:
[11569.133750] r0  58050013 | r1  21522052 | r2  21522352 | r3  21522252
[11569.210975] r4  21522552 | r5  21522452 | r6  21522752 | r7  21522652
[11569.288197] r8  21522952 | r9  21522852 | r10 21522b52 | r11 21522a52
[11569.365417] r12 21522d52 | sp  ed343cf0 | lr  21522f52 | pc  bf11f594
[11569.442634] cpsr 58050013
[11569.474010] result_regs:
[11569.504337] r0  58050113 | r1  21522052 | r2  21522352 | r3  21522252     <--- see R0 in this line
[11569.581556] r4  21522552 | r5  21522452 | r6  21522752 | r7  21522652
[11569.658776] r8  21522952 | r9  21522852 | r10 21522b52 | r11 21522a52
[11569.736000] r12 21522d52 | sp  ed343cf0 | lr  21522f52 | pc  bf11f594
[11569.813222] cpsr 58050013
[11569.844593] mrspl	r7, cpsr	@ 510f7000
[11571.842652] mrs	r14, cpsr	@ e10fe000

The failure is raise when testing in "mrs r0, cpsr". The added bit is PSR_A_BIT, which
should be ignored.

So looks like this is also a problem in your test framework. If you don't have
enough time, you can give me some hints to deal with it.

On 2014/12/10 1:11, Jon Medhurst (Tixy) wrote:
> These have extra 'checker' functions associated with them so lets make
> sure those get covered by testing. As they may create uninitialised
> space on the stack we also update the test code to ensure such space is
> consistent between test runs. This is done by disabling interrupts in
> setup_test_context().
> 
> Signed-off-by: Jon Medhurst <tixy@linaro.org>
> ---
> 
> Sorry for the extra noise, sent this new version to correct whitespace
> and spelling errors in previous one.
> 
>  arch/arm/probes/kprobes/test-arm.c   | 17 +++++++++++++++--
>  arch/arm/probes/kprobes/test-core.c  |  9 +++++++++
>  arch/arm/probes/kprobes/test-thumb.c | 12 ++++++++++++
>  3 files changed, 36 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/probes/kprobes/test-arm.c b/arch/arm/probes/kprobes/test-arm.c
> index fdeb300..9b3b1b4 100644
> --- a/arch/arm/probes/kprobes/test-arm.c
> +++ b/arch/arm/probes/kprobes/test-arm.c
> @@ -12,6 +12,7 @@
>  #include <linux/module.h>
>  #include <asm/system_info.h>
>  #include <asm/opcodes.h>
> +#include <asm/probes.h>
>  
>  #include "test-core.h"
>  
> @@ -478,6 +479,7 @@ void kprobe_arm_test_cases(void)
>  	TEST_RPR(  "strh	r",0, VAL1,", [r",1, 48,", -r",2, 24,"]")
>  	TEST_RPR(  "streqh	r",14,VAL2,", [r",11,0, ", r",12, 48,"]")
>  	TEST_UNSUPPORTED(  "streqh	r14, [r13, r12]")
> +	TEST_UNSUPPORTED(  "streqh	r14, [r12, r13]")
>  	TEST_RPR(  "strh	r",1, VAL1,", [r",2, 24,", r",3,  48,"]!")
>  	TEST_RPR(  "strneh	r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
>  	TEST_RPR(  "strh	r",2, VAL1,", [r",3, 24,"], r",4, 48,"")
> @@ -502,6 +504,9 @@ void kprobe_arm_test_cases(void)
>  	TEST_RP(   "strplh	r",12,VAL2,", [r",11,24,", #-4]!")
>  	TEST_RP(   "strh	r",2, VAL1,", [r",3, 24,"], #48")
>  	TEST_RP(   "strh	r",10,VAL2,", [r",9, 64,"], #-48")
> +	TEST_RP(   "strh	r",3, VAL1,", [r",13,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!")
> +	TEST_UNSUPPORTED("strh r3, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")
> +	TEST_RP(   "strh	r",4, VAL1,", [r",14,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!")
>  	TEST_UNSUPPORTED(__inst_arm(0xe1efc3b0) "	@ strh r12, [pc, #48]!")
>  	TEST_UNSUPPORTED(__inst_arm(0xe0c9f3b0) "	@ strh pc, [r9], #48")
>  
> @@ -568,6 +573,7 @@ void kprobe_arm_test_cases(void)
>  	TEST_RPR(  "strd	r",0, VAL1,", [r",1, 48,", -r",2,24,"]")
>  	TEST_RPR(  "strccd	r",8, VAL2,", [r",11,0, ", r",12,48,"]")
>  	TEST_UNSUPPORTED(  "strccd r8, [r13, r12]")
> +	TEST_UNSUPPORTED(  "strccd r8, [r12, r13]")
>  	TEST_RPR(  "strd	r",4, VAL1,", [r",2, 24,", r",3, 48,"]!")
>  	TEST_RPR(  "strcsd	r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
>  	TEST_RPR(  "strd	r",2, VAL1,", [r",5, 24,"], r",4,48,"")
> @@ -591,6 +597,9 @@ void kprobe_arm_test_cases(void)
>  	TEST_RP(   "strvcd	r",12,VAL2,", [r",11,24,", #-16]!")
>  	TEST_RP(   "strd	r",2, VAL1,", [r",4, 24,"], #48")
>  	TEST_RP(   "strd	r",10,VAL2,", [r",9, 64,"], #-48")
> +	TEST_RP(   "strd	r",6, VAL1,", [r",13,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!")
> +	TEST_UNSUPPORTED("strd r6, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")
> +	TEST_RP(   "strd	r",4, VAL1,", [r",12,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!")
>  	TEST_UNSUPPORTED(__inst_arm(0xe1efc3f0) "	@ strd r12, [pc, #48]!")
>  
>  	TEST_P(	   "ldrd	r0, [r",0, 24,", #-8]")
> @@ -639,16 +648,20 @@ void kprobe_arm_test_cases(void)
>  	TEST_RP( "str"byte"	r",12,VAL2,", [r",11,24,", #-4]!")		\
>  	TEST_RP( "str"byte"	r",2, VAL1,", [r",3, 24,"], #48")		\
>  	TEST_RP( "str"byte"	r",10,VAL2,", [r",9, 64,"], #-48")		\
> +	TEST_RP( "str"byte"	r",3, VAL1,", [r",13,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!") \
> +	TEST_UNSUPPORTED("str"byte" r3, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")				\
> +	TEST_RP( "str"byte"	r",4, VAL1,", [r",10,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!") \
>  	TEST_RPR("str"byte"	r",0, VAL1,", [r",1, 48,", -r",2, 24,"]")	\
>  	TEST_RPR("str"byte"	r",14,VAL2,", [r",11,0, ", r",12, 48,"]")	\
> -	TEST_UNSUPPORTED("str"byte" r14, [r13, r12]")	\
> +	TEST_UNSUPPORTED("str"byte" r14, [r13, r12]")				\
> +	TEST_UNSUPPORTED("str"byte" r14, [r12, r13]")				\
>  	TEST_RPR("str"byte"	r",1, VAL1,", [r",2, 24,", r",3,  48,"]!")	\
>  	TEST_RPR("str"byte"	r",12,VAL2,", [r",11,48,", -r",10,24,"]!")	\
>  	TEST_RPR("str"byte"	r",2, VAL1,", [r",3, 24,"], r",4, 48,"")	\
>  	TEST_RPR("str"byte"	r",10,VAL2,", [r",9, 48,"], -r",11,24,"")	\
>  	TEST_RPR("str"byte"	r",0, VAL1,", [r",1, 24,", r",2,  32,", asl #1]")\
>  	TEST_RPR("str"byte"	r",14,VAL2,", [r",11,0, ", r",12, 32,", lsr #2]")\
> -	TEST_UNSUPPORTED("str"byte"	r14, [r13, r12, lsr #2]")\
> +	TEST_UNSUPPORTED("str"byte"	r14, [r13, r12, lsr #2]")		\
>  	TEST_RPR("str"byte"	r",1, VAL1,", [r",2, 24,", r",3,  32,", asr #3]!")\
>  	TEST_RPR("str"byte"	r",12,VAL2,", [r",11,24,", r",10, 4,", ror #31]!")\
>  	TEST_P(  "ldr"byte"	r0, [r",0,  24,", #-2]")			\
> diff --git a/arch/arm/probes/kprobes/test-core.c b/arch/arm/probes/kprobes/test-core.c
> index 7ab633d..7c5ddd5 100644
> --- a/arch/arm/probes/kprobes/test-core.c
> +++ b/arch/arm/probes/kprobes/test-core.c
> @@ -1196,6 +1196,13 @@ static void setup_test_context(struct pt_regs *regs)
>  			regs->uregs[arg->reg] =
>  				(unsigned long)current_stack + arg->val;
>  			memory_needs_checking = true;
> +			/*
> +			 * Test memory at an address below SP is in danger of
> +			 * being altered by an interrupt occurring and pushing
> +			 * data onto the stack. Disable interrupts to stop this.
> +			 */
> +			if (arg->reg == 13)
> +				regs->ARM_cpsr |= PSR_I_BIT;
>  			break;
>  		}
>  		case ARG_TYPE_MEM: {
> @@ -1272,6 +1279,8 @@ test_after_pre_handler(struct kprobe *p, struct pt_regs *regs)
>  
>  	/* Undo any changes done to SP by the test case */
>  	regs->ARM_sp = (unsigned long)current_stack;
> +	/* Enable interrupts in case setup_test_context disabled them */
> +	regs->ARM_cpsr &= ~PSR_I_BIT;
>  
>  	container_of(p, struct test_probe, kprobe)->hit = test_instance;
>  	return 0;
> diff --git a/arch/arm/probes/kprobes/test-thumb.c b/arch/arm/probes/kprobes/test-thumb.c
> index 6c6e9a9..e8cf193 100644
> --- a/arch/arm/probes/kprobes/test-thumb.c
> +++ b/arch/arm/probes/kprobes/test-thumb.c
> @@ -11,6 +11,7 @@
>  #include <linux/kernel.h>
>  #include <linux/module.h>
>  #include <asm/opcodes.h>
> +#include <asm/probes.h>
>  
>  #include "test-core.h"
>  
> @@ -416,6 +417,9 @@ void kprobe_thumb32_test_cases(void)
>  	TEST_RR( "strd	r",14,VAL2,", r",12,VAL1,", [sp, #16]!")
>  	TEST_RRP("strd	r",1, VAL1,", r",0, VAL2,", [r",7, 24,"], #16")
>  	TEST_RR( "strd	r",7, VAL2,", r",8, VAL1,", [sp], #-16")
> +	TEST_RRP("strd	r",6, VAL1,", r",7, VAL2,", [r",13, TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!")
> +	TEST_UNSUPPORTED("strd r6, r7, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")
> +	TEST_RRP("strd	r",4, VAL1,", r",5, VAL2,", [r",14, TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!")
>  	TEST_UNSUPPORTED(__inst_thumb32(0xe9efec04) "	@ strd	r14, r12, [pc, #16]!")
>  	TEST_UNSUPPORTED(__inst_thumb32(0xe8efec04) "	@ strd	r14, r12, [pc], #16")
>  
> @@ -821,14 +825,22 @@ CONDITION_INSTRUCTIONS(22,
>  	TEST_RP( "str"size"	r",14,VAL2,", [r",1, 256,  ", #-128]!")		\
>  	TEST_RPR("str"size".w	r",0, VAL1,", [r",1, 0,", r",2, 4,"]")		\
>  	TEST_RPR("str"size"	r",14,VAL2,", [r",10,0,", r",11,4,", lsl #1]")	\
> +	TEST_UNSUPPORTED("str"size"	r0, [r13, r1]")				\
>  	TEST_R(  "str"size".w	r",7, VAL1,", [sp, #24]")			\
>  	TEST_RP( "str"size".w	r",0, VAL2,", [r",0,0, "]")			\
> +	TEST_RP( "str"size"	r",6, VAL1,", [r",13, TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!") \
> +	TEST_UNSUPPORTED("str"size"	r6, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")			\
> +	TEST_RP( "str"size"	r",4, VAL2,", [r",12, TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!") \
>  	TEST_UNSUPPORTED("str"size"t	r0, [r1, #4]")
>  
>  	SINGLE_STORE("b")
>  	SINGLE_STORE("h")
>  	SINGLE_STORE("")
>  
> +	TEST_UNSUPPORTED(__inst_thumb32(0xf801000d) "	@ strb	r0, [r1, r13]")
> +	TEST_UNSUPPORTED(__inst_thumb32(0xf821000d) "	@ strh	r0, [r1, r13]")
> +	TEST_UNSUPPORTED(__inst_thumb32(0xf841000d) "	@ str	r0, [r1, r13]")
> +
>  	TEST("str	sp, [sp]")
>  	TEST_UNSUPPORTED(__inst_thumb32(0xf8cfe000) "	@ str	r14, [pc]")
>  	TEST_UNSUPPORTED(__inst_thumb32(0xf8cef000) "	@ str	pc, [r14]")
> 



  reply	other threads:[~2014-12-10  8:24 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-08 14:09 [RESEND][PATCH v15 0/7] ARM: kprobes: OPTPROBES and other improvements Wang Nan
2014-12-08 14:09 ` [RESEND][PATCH v15 1/7] ARM: probes: move all probe code to dedicate directory Wang Nan
2014-12-08 14:09 ` [RESEND][PATCH v15 2/7] ARM: kprobes: introduces checker Wang Nan
2014-12-08 14:09 ` [RESEND][PATCH v15 3/7] ARM: kprobes: collects stack consumption for store instructions Wang Nan
2014-12-08 14:09 ` [RESEND][PATCH v15 4/7] ARM: kprobes: disallow probing stack consuming instructions Wang Nan
2014-12-08 14:09 ` [RESEND][PATCH v15 5/7] ARM: kprobes: Add test cases for " Wang Nan
2014-12-09 16:43   ` [PATCH v2] " Jon Medhurst (Tixy)
2014-12-09 17:11     ` [PATCH v3] " Jon Medhurst (Tixy)
2014-12-10  8:23       ` Wang Nan [this message]
2014-12-10 12:34         ` Jon Medhurst (Tixy)
2014-12-10 13:18           ` Wang Nan
2014-12-10 13:49             ` Jon Medhurst (Tixy)
2014-12-11  9:56             ` Wang Nan
2014-12-08 14:09 ` [RESEND][PATCH v15 6/7] kprobes: Pass the original kprobe for preparing optimized kprobe Wang Nan
2014-12-10 13:23   ` Jon Medhurst (Tixy)
2014-12-08 14:09 ` [RESEND][PATCH v15 7/7] ARM: kprobes: enable OPTPROBES for ARM 32 Wang Nan
2014-12-09  6:47   ` Masami Hiramatsu
2014-12-09  9:14     ` Jon Medhurst (Tixy)
2014-12-09 10:25       ` Masami Hiramatsu
2014-12-09 10:12     ` Wang Nan

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=54880309.3010100@huawei.com \
    --to=wangnan0@huawei.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=lizefan@huawei.com \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=tixy@linaro.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