traps.c (df7686101956929dcea410971656e34926773b88) | traps.c (26a04d84bc5311d7785b229b353f327e866ab61a) |
---|---|
1/* 2 * Based on arch/arm/kernel/traps.c 3 * 4 * Copyright (C) 1995-2009 Russell King 5 * Copyright (C) 2012 ARM Ltd. 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 955 unchanged lines hidden (view full) --- 964 } 965 966 /* If thread survives, skip over the BUG instruction and continue: */ 967 arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE); 968 return DBG_HOOK_HANDLED; 969} 970 971static struct break_hook bug_break_hook = { | 1/* 2 * Based on arch/arm/kernel/traps.c 3 * 4 * Copyright (C) 1995-2009 Russell King 5 * Copyright (C) 2012 ARM Ltd. 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 955 unchanged lines hidden (view full) --- 964 } 965 966 /* If thread survives, skip over the BUG instruction and continue: */ 967 arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE); 968 return DBG_HOOK_HANDLED; 969} 970 971static struct break_hook bug_break_hook = { |
972 .esr_val = 0xf2000000 | BUG_BRK_IMM, 973 .esr_mask = 0xffffffff, | |
974 .fn = bug_handler, | 972 .fn = bug_handler, |
973 .imm = BUG_BRK_IMM, |
|
975}; 976 977#ifdef CONFIG_KASAN_SW_TAGS 978 979#define KASAN_ESR_RECOVER 0x20 980#define KASAN_ESR_WRITE 0x10 981#define KASAN_ESR_SIZE_MASK 0x0f 982#define KASAN_ESR_SIZE(esr) (1 << ((esr) & KASAN_ESR_SIZE_MASK)) --- 28 unchanged lines hidden (view full) --- 1011 if (!recover) 1012 die("Oops - KASAN", regs, 0); 1013 1014 /* If thread survives, skip over the brk instruction and continue: */ 1015 arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE); 1016 return DBG_HOOK_HANDLED; 1017} 1018 | 974}; 975 976#ifdef CONFIG_KASAN_SW_TAGS 977 978#define KASAN_ESR_RECOVER 0x20 979#define KASAN_ESR_WRITE 0x10 980#define KASAN_ESR_SIZE_MASK 0x0f 981#define KASAN_ESR_SIZE(esr) (1 << ((esr) & KASAN_ESR_SIZE_MASK)) --- 28 unchanged lines hidden (view full) --- 1010 if (!recover) 1011 die("Oops - KASAN", regs, 0); 1012 1013 /* If thread survives, skip over the brk instruction and continue: */ 1014 arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE); 1015 return DBG_HOOK_HANDLED; 1016} 1017 |
1019#define KASAN_ESR_VAL (0xf2000000 | KASAN_BRK_IMM) 1020#define KASAN_ESR_MASK 0xffffff00 1021 | |
1022static struct break_hook kasan_break_hook = { | 1018static struct break_hook kasan_break_hook = { |
1023 .esr_val = KASAN_ESR_VAL, 1024 .esr_mask = KASAN_ESR_MASK, 1025 .fn = kasan_handler, | 1019 .fn = kasan_handler, 1020 .imm = KASAN_BRK_IMM, 1021 .mask = KASAN_BRK_MASK, |
1026}; 1027#endif 1028 1029/* 1030 * Initial handler for AArch64 BRK exceptions 1031 * This handler only used until debug_traps_init(). 1032 */ 1033int __init early_brk64(unsigned long addr, unsigned int esr, 1034 struct pt_regs *regs) 1035{ 1036#ifdef CONFIG_KASAN_SW_TAGS | 1022}; 1023#endif 1024 1025/* 1026 * Initial handler for AArch64 BRK exceptions 1027 * This handler only used until debug_traps_init(). 1028 */ 1029int __init early_brk64(unsigned long addr, unsigned int esr, 1030 struct pt_regs *regs) 1031{ 1032#ifdef CONFIG_KASAN_SW_TAGS |
1037 if ((esr & KASAN_ESR_MASK) == KASAN_ESR_VAL) | 1033 unsigned int comment = esr & BRK64_ESR_MASK; 1034 1035 if ((comment & ~KASAN_BRK_MASK) == KASAN_BRK_IMM) |
1038 return kasan_handler(regs, esr) != DBG_HOOK_HANDLED; 1039#endif 1040 return bug_handler(regs, esr) != DBG_HOOK_HANDLED; 1041} 1042 1043/* This registration must happen early, before debug_traps_init(). */ 1044void __init trap_init(void) 1045{ | 1036 return kasan_handler(regs, esr) != DBG_HOOK_HANDLED; 1037#endif 1038 return bug_handler(regs, esr) != DBG_HOOK_HANDLED; 1039} 1040 1041/* This registration must happen early, before debug_traps_init(). */ 1042void __init trap_init(void) 1043{ |
1046 register_break_hook(&bug_break_hook); | 1044 register_kernel_break_hook(&bug_break_hook); |
1047#ifdef CONFIG_KASAN_SW_TAGS | 1045#ifdef CONFIG_KASAN_SW_TAGS |
1048 register_break_hook(&kasan_break_hook); | 1046 register_kernel_break_hook(&kasan_break_hook); |
1049#endif 1050} | 1047#endif 1048} |