.. | .. |
---|
9 | 9 | int fixup_exception(struct pt_regs *regs) |
---|
10 | 10 | { |
---|
11 | 11 | const struct exception_table_entry *fixup; |
---|
| 12 | + unsigned long addr; |
---|
12 | 13 | |
---|
13 | | - fixup = search_exception_tables(instruction_pointer(regs)); |
---|
| 14 | + addr = instruction_pointer(regs); |
---|
| 15 | + |
---|
| 16 | + /* Search the BPF tables first, these are formatted differently */ |
---|
| 17 | + fixup = search_bpf_extables(addr); |
---|
14 | 18 | if (fixup) |
---|
15 | | - regs->pc = (unsigned long)&fixup->fixup + fixup->fixup; |
---|
| 19 | + return arm64_bpf_fixup_exception(fixup, regs); |
---|
16 | 20 | |
---|
17 | | - return fixup != NULL; |
---|
| 21 | + fixup = search_exception_tables(addr); |
---|
| 22 | + if (!fixup) |
---|
| 23 | + return 0; |
---|
| 24 | + |
---|
| 25 | + regs->pc = (unsigned long)&fixup->fixup + fixup->fixup; |
---|
| 26 | + return 1; |
---|
18 | 27 | } |
---|