Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm

Pull ARM fixes from Russell King:

- avoid invoking overflow handler for uaccess watchpoints

- fix incorrect clock_gettime64 availability

- fix EFI crash in create_mapping_late()

* tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm:
ARM: 8988/1: mmu: fix crash in EFI calls due to p4d typo in create_mapping_late()
ARM: 8987/1: VDSO: Fix incorrect clock_gettime64
ARM: 8986/1: hw_breakpoint: Don't invoke overflow handler on uaccess watchpoints

+24 -6
+22 -5
arch/arm/kernel/hw_breakpoint.c
··· 683 683 arch_install_hw_breakpoint(bp); 684 684 } 685 685 686 + static int watchpoint_fault_on_uaccess(struct pt_regs *regs, 687 + struct arch_hw_breakpoint *info) 688 + { 689 + return !user_mode(regs) && info->ctrl.privilege == ARM_BREAKPOINT_USER; 690 + } 691 + 686 692 static void watchpoint_handler(unsigned long addr, unsigned int fsr, 687 693 struct pt_regs *regs) 688 694 { ··· 748 742 } 749 743 750 744 pr_debug("watchpoint fired: address = 0x%x\n", info->trigger); 745 + 746 + /* 747 + * If we triggered a user watchpoint from a uaccess routine, 748 + * then handle the stepping ourselves since userspace really 749 + * can't help us with this. 750 + */ 751 + if (watchpoint_fault_on_uaccess(regs, info)) 752 + goto step; 753 + 751 754 perf_bp_event(wp, regs); 752 755 753 756 /* 754 - * If no overflow handler is present, insert a temporary 755 - * mismatch breakpoint so we can single-step over the 756 - * watchpoint trigger. 757 + * Defer stepping to the overflow handler if one is installed. 758 + * Otherwise, insert a temporary mismatch breakpoint so that 759 + * we can single-step over the watchpoint trigger. 757 760 */ 758 - if (is_default_overflow_handler(wp)) 759 - enable_single_step(wp, instruction_pointer(regs)); 761 + if (!is_default_overflow_handler(wp)) 762 + goto unlock; 760 763 764 + step: 765 + enable_single_step(wp, instruction_pointer(regs)); 761 766 unlock: 762 767 rcu_read_unlock(); 763 768 }
+1
arch/arm/kernel/vdso.c
··· 184 184 if (!cntvct_ok) { 185 185 vdso_nullpatch_one(&einfo, "__vdso_gettimeofday"); 186 186 vdso_nullpatch_one(&einfo, "__vdso_clock_gettime"); 187 + vdso_nullpatch_one(&einfo, "__vdso_clock_gettime64"); 187 188 } 188 189 } 189 190
+1 -1
arch/arm/mm/mmu.c
··· 966 966 pud_t *pud; 967 967 968 968 p4d = p4d_alloc(mm, pgd_offset(mm, md->virtual), md->virtual); 969 - if (!WARN_ON(!p4d)) 969 + if (WARN_ON(!p4d)) 970 970 return; 971 971 pud = pud_alloc(mm, p4d, md->virtual); 972 972 if (WARN_ON(!pud))