| .. | .. |
|---|
| 447 | 447 | return 0; |
|---|
| 448 | 448 | } |
|---|
| 449 | 449 | |
|---|
| 450 | | -/* Return true(!0) if the kprobe is disarmed. Note: p must be on hash list */ |
|---|
| 451 | | -static inline int kprobe_disarmed(struct kprobe *p) |
|---|
| 450 | +/* Return true if the kprobe is disarmed. Note: p must be on hash list */ |
|---|
| 451 | +bool kprobe_disarmed(struct kprobe *p) |
|---|
| 452 | 452 | { |
|---|
| 453 | 453 | struct optimized_kprobe *op; |
|---|
| 454 | 454 | |
|---|
| .. | .. |
|---|
| 652 | 652 | mutex_unlock(&kprobe_mutex); |
|---|
| 653 | 653 | } |
|---|
| 654 | 654 | |
|---|
| 655 | | -static bool optprobe_queued_unopt(struct optimized_kprobe *op) |
|---|
| 655 | +bool optprobe_queued_unopt(struct optimized_kprobe *op) |
|---|
| 656 | 656 | { |
|---|
| 657 | 657 | struct optimized_kprobe *_op; |
|---|
| 658 | 658 | |
|---|
| .. | .. |
|---|
| 1628 | 1628 | return 0; |
|---|
| 1629 | 1629 | } |
|---|
| 1630 | 1630 | |
|---|
| 1631 | +static bool is_cfi_preamble_symbol(unsigned long addr) |
|---|
| 1632 | +{ |
|---|
| 1633 | + char symbuf[KSYM_NAME_LEN]; |
|---|
| 1634 | + |
|---|
| 1635 | + if (lookup_symbol_name(addr, symbuf)) |
|---|
| 1636 | + return false; |
|---|
| 1637 | + |
|---|
| 1638 | + return str_has_prefix("__cfi_", symbuf) || |
|---|
| 1639 | + str_has_prefix("__pfx_", symbuf); |
|---|
| 1640 | +} |
|---|
| 1641 | + |
|---|
| 1631 | 1642 | static int check_kprobe_address_safe(struct kprobe *p, |
|---|
| 1632 | 1643 | struct module **probed_mod) |
|---|
| 1633 | 1644 | { |
|---|
| .. | .. |
|---|
| 1646 | 1657 | within_kprobe_blacklist((unsigned long) p->addr) || |
|---|
| 1647 | 1658 | jump_label_text_reserved(p->addr, p->addr) || |
|---|
| 1648 | 1659 | static_call_text_reserved(p->addr, p->addr) || |
|---|
| 1649 | | - find_bug((unsigned long)p->addr)) { |
|---|
| 1660 | + find_bug((unsigned long)p->addr) || |
|---|
| 1661 | + is_cfi_preamble_symbol((unsigned long)p->addr)) { |
|---|
| 1650 | 1662 | ret = -EINVAL; |
|---|
| 1651 | 1663 | goto out; |
|---|
| 1652 | 1664 | } |
|---|