aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/probes/kprobes/test-arm.c17
-rw-r--r--arch/arm/probes/kprobes/test-core.c9
-rw-r--r--arch/arm/probes/kprobes/test-thumb.c12
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 fdeb300b0fc8..9b3b1b4a0939 100644
--- a/arch/arm/probes/kprobes/test-arm.c
+++ b/arch/arm/probes/kprobes/test-arm.c
@@ -12,6 +12,7 @@
12#include <linux/module.h> 12#include <linux/module.h>
13#include <asm/system_info.h> 13#include <asm/system_info.h>
14#include <asm/opcodes.h> 14#include <asm/opcodes.h>
15#include <asm/probes.h>
15 16
16#include "test-core.h" 17#include "test-core.h"
17 18
@@ -478,6 +479,7 @@ void kprobe_arm_test_cases(void)
478 TEST_RPR( "strh r",0, VAL1,", [r",1, 48,", -r",2, 24,"]") 479 TEST_RPR( "strh r",0, VAL1,", [r",1, 48,", -r",2, 24,"]")
479 TEST_RPR( "streqh r",14,VAL2,", [r",11,0, ", r",12, 48,"]") 480 TEST_RPR( "streqh r",14,VAL2,", [r",11,0, ", r",12, 48,"]")
480 TEST_UNSUPPORTED( "streqh r14, [r13, r12]") 481 TEST_UNSUPPORTED( "streqh r14, [r13, r12]")
482 TEST_UNSUPPORTED( "streqh r14, [r12, r13]")
481 TEST_RPR( "strh r",1, VAL1,", [r",2, 24,", r",3, 48,"]!") 483 TEST_RPR( "strh r",1, VAL1,", [r",2, 24,", r",3, 48,"]!")
482 TEST_RPR( "strneh r",12,VAL2,", [r",11,48,", -r",10,24,"]!") 484 TEST_RPR( "strneh r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
483 TEST_RPR( "strh r",2, VAL1,", [r",3, 24,"], r",4, 48,"") 485 TEST_RPR( "strh r",2, VAL1,", [r",3, 24,"], r",4, 48,"")
@@ -502,6 +504,9 @@ void kprobe_arm_test_cases(void)
502 TEST_RP( "strplh r",12,VAL2,", [r",11,24,", #-4]!") 504 TEST_RP( "strplh r",12,VAL2,", [r",11,24,", #-4]!")
503 TEST_RP( "strh r",2, VAL1,", [r",3, 24,"], #48") 505 TEST_RP( "strh r",2, VAL1,", [r",3, 24,"], #48")
504 TEST_RP( "strh r",10,VAL2,", [r",9, 64,"], #-48") 506 TEST_RP( "strh r",10,VAL2,", [r",9, 64,"], #-48")
507 TEST_RP( "strh r",3, VAL1,", [r",13,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!")
508 TEST_UNSUPPORTED("strh r3, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")
509 TEST_RP( "strh r",4, VAL1,", [r",14,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!")
505 TEST_UNSUPPORTED(__inst_arm(0xe1efc3b0) " @ strh r12, [pc, #48]!") 510 TEST_UNSUPPORTED(__inst_arm(0xe1efc3b0) " @ strh r12, [pc, #48]!")
506 TEST_UNSUPPORTED(__inst_arm(0xe0c9f3b0) " @ strh pc, [r9], #48") 511 TEST_UNSUPPORTED(__inst_arm(0xe0c9f3b0) " @ strh pc, [r9], #48")
507 512
@@ -568,6 +573,7 @@ void kprobe_arm_test_cases(void)
568 TEST_RPR( "strd r",0, VAL1,", [r",1, 48,", -r",2,24,"]") 573 TEST_RPR( "strd r",0, VAL1,", [r",1, 48,", -r",2,24,"]")
569 TEST_RPR( "strccd r",8, VAL2,", [r",11,0, ", r",12,48,"]") 574 TEST_RPR( "strccd r",8, VAL2,", [r",11,0, ", r",12,48,"]")
570 TEST_UNSUPPORTED( "strccd r8, [r13, r12]") 575 TEST_UNSUPPORTED( "strccd r8, [r13, r12]")
576 TEST_UNSUPPORTED( "strccd r8, [r12, r13]")
571 TEST_RPR( "strd r",4, VAL1,", [r",2, 24,", r",3, 48,"]!") 577 TEST_RPR( "strd r",4, VAL1,", [r",2, 24,", r",3, 48,"]!")
572 TEST_RPR( "strcsd r",12,VAL2,", [r",11,48,", -r",10,24,"]!") 578 TEST_RPR( "strcsd r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
573 TEST_RPR( "strd r",2, VAL1,", [r",5, 24,"], r",4,48,"") 579 TEST_RPR( "strd r",2, VAL1,", [r",5, 24,"], r",4,48,"")
@@ -591,6 +597,9 @@ void kprobe_arm_test_cases(void)
591 TEST_RP( "strvcd r",12,VAL2,", [r",11,24,", #-16]!") 597 TEST_RP( "strvcd r",12,VAL2,", [r",11,24,", #-16]!")
592 TEST_RP( "strd r",2, VAL1,", [r",4, 24,"], #48") 598 TEST_RP( "strd r",2, VAL1,", [r",4, 24,"], #48")
593 TEST_RP( "strd r",10,VAL2,", [r",9, 64,"], #-48") 599 TEST_RP( "strd r",10,VAL2,", [r",9, 64,"], #-48")
600 TEST_RP( "strd r",6, VAL1,", [r",13,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!")
601 TEST_UNSUPPORTED("strd r6, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")
602 TEST_RP( "strd r",4, VAL1,", [r",12,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!")
594 TEST_UNSUPPORTED(__inst_arm(0xe1efc3f0) " @ strd r12, [pc, #48]!") 603 TEST_UNSUPPORTED(__inst_arm(0xe1efc3f0) " @ strd r12, [pc, #48]!")
595 604
596 TEST_P( "ldrd r0, [r",0, 24,", #-8]") 605 TEST_P( "ldrd r0, [r",0, 24,", #-8]")
@@ -639,16 +648,20 @@ void kprobe_arm_test_cases(void)
639 TEST_RP( "str"byte" r",12,VAL2,", [r",11,24,", #-4]!") \ 648 TEST_RP( "str"byte" r",12,VAL2,", [r",11,24,", #-4]!") \
640 TEST_RP( "str"byte" r",2, VAL1,", [r",3, 24,"], #48") \ 649 TEST_RP( "str"byte" r",2, VAL1,", [r",3, 24,"], #48") \
641 TEST_RP( "str"byte" r",10,VAL2,", [r",9, 64,"], #-48") \ 650 TEST_RP( "str"byte" r",10,VAL2,", [r",9, 64,"], #-48") \
651 TEST_RP( "str"byte" r",3, VAL1,", [r",13,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!") \
652 TEST_UNSUPPORTED("str"byte" r3, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!") \
653 TEST_RP( "str"byte" r",4, VAL1,", [r",10,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!") \
642 TEST_RPR("str"byte" r",0, VAL1,", [r",1, 48,", -r",2, 24,"]") \ 654 TEST_RPR("str"byte" r",0, VAL1,", [r",1, 48,", -r",2, 24,"]") \
643 TEST_RPR("str"byte" r",14,VAL2,", [r",11,0, ", r",12, 48,"]") \ 655 TEST_RPR("str"byte" r",14,VAL2,", [r",11,0, ", r",12, 48,"]") \
644 TEST_UNSUPPORTED("str"byte" r14, [r13, r12]") \ 656 TEST_UNSUPPORTED("str"byte" r14, [r13, r12]") \
657 TEST_UNSUPPORTED("str"byte" r14, [r12, r13]") \
645 TEST_RPR("str"byte" r",1, VAL1,", [r",2, 24,", r",3, 48,"]!") \ 658 TEST_RPR("str"byte" r",1, VAL1,", [r",2, 24,", r",3, 48,"]!") \
646 TEST_RPR("str"byte" r",12,VAL2,", [r",11,48,", -r",10,24,"]!") \ 659 TEST_RPR("str"byte" r",12,VAL2,", [r",11,48,", -r",10,24,"]!") \
647 TEST_RPR("str"byte" r",2, VAL1,", [r",3, 24,"], r",4, 48,"") \ 660 TEST_RPR("str"byte" r",2, VAL1,", [r",3, 24,"], r",4, 48,"") \
648 TEST_RPR("str"byte" r",10,VAL2,", [r",9, 48,"], -r",11,24,"") \ 661 TEST_RPR("str"byte" r",10,VAL2,", [r",9, 48,"], -r",11,24,"") \
649 TEST_RPR("str"byte" r",0, VAL1,", [r",1, 24,", r",2, 32,", asl #1]")\ 662 TEST_RPR("str"byte" r",0, VAL1,", [r",1, 24,", r",2, 32,", asl #1]")\
650 TEST_RPR("str"byte" r",14,VAL2,", [r",11,0, ", r",12, 32,", lsr #2]")\ 663 TEST_RPR("str"byte" r",14,VAL2,", [r",11,0, ", r",12, 32,", lsr #2]")\
651 TEST_UNSUPPORTED("str"byte" r14, [r13, r12, lsr #2]")\ 664 TEST_UNSUPPORTED("str"byte" r14, [r13, r12, lsr #2]") \
652 TEST_RPR("str"byte" r",1, VAL1,", [r",2, 24,", r",3, 32,", asr #3]!")\ 665 TEST_RPR("str"byte" r",1, VAL1,", [r",2, 24,", r",3, 32,", asr #3]!")\
653 TEST_RPR("str"byte" r",12,VAL2,", [r",11,24,", r",10, 4,", ror #31]!")\ 666 TEST_RPR("str"byte" r",12,VAL2,", [r",11,24,", r",10, 4,", ror #31]!")\
654 TEST_P( "ldr"byte" r0, [r",0, 24,", #-2]") \ 667 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 7ab633d51954..7c5ddd5a6afd 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)
1196 regs->uregs[arg->reg] = 1196 regs->uregs[arg->reg] =
1197 (unsigned long)current_stack + arg->val; 1197 (unsigned long)current_stack + arg->val;
1198 memory_needs_checking = true; 1198 memory_needs_checking = true;
1199 /*
1200 * Test memory at an address below SP is in danger of
1201 * being altered by an interrupt occurring and pushing
1202 * data onto the stack. Disable interrupts to stop this.
1203 */
1204 if (arg->reg == 13)
1205 regs->ARM_cpsr |= PSR_I_BIT;
1199 break; 1206 break;
1200 } 1207 }
1201 case ARG_TYPE_MEM: { 1208 case ARG_TYPE_MEM: {
@@ -1272,6 +1279,8 @@ test_after_pre_handler(struct kprobe *p, struct pt_regs *regs)
1272 1279
1273 /* Undo any changes done to SP by the test case */ 1280 /* Undo any changes done to SP by the test case */
1274 regs->ARM_sp = (unsigned long)current_stack; 1281 regs->ARM_sp = (unsigned long)current_stack;
1282 /* Enable interrupts in case setup_test_context disabled them */
1283 regs->ARM_cpsr &= ~PSR_I_BIT;
1275 1284
1276 container_of(p, struct test_probe, kprobe)->hit = test_instance; 1285 container_of(p, struct test_probe, kprobe)->hit = test_instance;
1277 return 0; 1286 return 0;
diff --git a/arch/arm/probes/kprobes/test-thumb.c b/arch/arm/probes/kprobes/test-thumb.c
index 6c6e9a9bb675..e8cf193db1ea 100644
--- a/arch/arm/probes/kprobes/test-thumb.c
+++ b/arch/arm/probes/kprobes/test-thumb.c
@@ -11,6 +11,7 @@
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/module.h> 12#include <linux/module.h>
13#include <asm/opcodes.h> 13#include <asm/opcodes.h>
14#include <asm/probes.h>
14 15
15#include "test-core.h" 16#include "test-core.h"
16 17
@@ -416,6 +417,9 @@ void kprobe_thumb32_test_cases(void)
416 TEST_RR( "strd r",14,VAL2,", r",12,VAL1,", [sp, #16]!") 417 TEST_RR( "strd r",14,VAL2,", r",12,VAL1,", [sp, #16]!")
417 TEST_RRP("strd r",1, VAL1,", r",0, VAL2,", [r",7, 24,"], #16") 418 TEST_RRP("strd r",1, VAL1,", r",0, VAL2,", [r",7, 24,"], #16")
418 TEST_RR( "strd r",7, VAL2,", r",8, VAL1,", [sp], #-16") 419 TEST_RR( "strd r",7, VAL2,", r",8, VAL1,", [sp], #-16")
420 TEST_RRP("strd r",6, VAL1,", r",7, VAL2,", [r",13, TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!")
421 TEST_UNSUPPORTED("strd r6, r7, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!")
422 TEST_RRP("strd r",4, VAL1,", r",5, VAL2,", [r",14, TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!")
419 TEST_UNSUPPORTED(__inst_thumb32(0xe9efec04) " @ strd r14, r12, [pc, #16]!") 423 TEST_UNSUPPORTED(__inst_thumb32(0xe9efec04) " @ strd r14, r12, [pc, #16]!")
420 TEST_UNSUPPORTED(__inst_thumb32(0xe8efec04) " @ strd r14, r12, [pc], #16") 424 TEST_UNSUPPORTED(__inst_thumb32(0xe8efec04) " @ strd r14, r12, [pc], #16")
421 425
@@ -821,14 +825,22 @@ CONDITION_INSTRUCTIONS(22,
821 TEST_RP( "str"size" r",14,VAL2,", [r",1, 256, ", #-128]!") \ 825 TEST_RP( "str"size" r",14,VAL2,", [r",1, 256, ", #-128]!") \
822 TEST_RPR("str"size".w r",0, VAL1,", [r",1, 0,", r",2, 4,"]") \ 826 TEST_RPR("str"size".w r",0, VAL1,", [r",1, 0,", r",2, 4,"]") \
823 TEST_RPR("str"size" r",14,VAL2,", [r",10,0,", r",11,4,", lsl #1]") \ 827 TEST_RPR("str"size" r",14,VAL2,", [r",10,0,", r",11,4,", lsl #1]") \
828 TEST_UNSUPPORTED("str"size" r0, [r13, r1]") \
824 TEST_R( "str"size".w r",7, VAL1,", [sp, #24]") \ 829 TEST_R( "str"size".w r",7, VAL1,", [sp, #24]") \
825 TEST_RP( "str"size".w r",0, VAL2,", [r",0,0, "]") \ 830 TEST_RP( "str"size".w r",0, VAL2,", [r",0,0, "]") \
831 TEST_RP( "str"size" r",6, VAL1,", [r",13, TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!") \
832 TEST_UNSUPPORTED("str"size" r6, [r13, #-"__stringify(MAX_STACK_SIZE)"-8]!") \
833 TEST_RP( "str"size" r",4, VAL2,", [r",12, TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"-8]!") \
826 TEST_UNSUPPORTED("str"size"t r0, [r1, #4]") 834 TEST_UNSUPPORTED("str"size"t r0, [r1, #4]")
827 835
828 SINGLE_STORE("b") 836 SINGLE_STORE("b")
829 SINGLE_STORE("h") 837 SINGLE_STORE("h")
830 SINGLE_STORE("") 838 SINGLE_STORE("")
831 839
840 TEST_UNSUPPORTED(__inst_thumb32(0xf801000d) " @ strb r0, [r1, r13]")
841 TEST_UNSUPPORTED(__inst_thumb32(0xf821000d) " @ strh r0, [r1, r13]")
842 TEST_UNSUPPORTED(__inst_thumb32(0xf841000d) " @ str r0, [r1, r13]")
843
832 TEST("str sp, [sp]") 844 TEST("str sp, [sp]")
833 TEST_UNSUPPORTED(__inst_thumb32(0xf8cfe000) " @ str r14, [pc]") 845 TEST_UNSUPPORTED(__inst_thumb32(0xf8cfe000) " @ str r14, [pc]")
834 TEST_UNSUPPORTED(__inst_thumb32(0xf8cef000) " @ str pc, [r14]") 846 TEST_UNSUPPORTED(__inst_thumb32(0xf8cef000) " @ str pc, [r14]")