diff mbox series

arm64/mm: Identify user instruction aborts

Message ID 1557029712-3237-1-git-send-email-anshuman.khandual@arm.com (mailing list archive)
State New, archived
Headers show
Series arm64/mm: Identify user instruction aborts | expand

Commit Message

Anshuman Khandual May 5, 2019, 4:15 a.m. UTC
We don't currently set the FAULT_FLAG_INSTRUCTION mm flag for EL0
instruction aborts. This has no functional impact, as we don't override
arch_vma_access_permitted(), and the default implementation always returns
true. However, it would be helpful to provide the flag so that it can be
consumed by tracepoints such as dax_pmd_fault.

This patch sets the FAULT_FLAG_INSTRUCTION flag for EL0 instruction aborts.

Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
---
 arch/arm64/mm/fault.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Catalin Marinas June 4, 2019, 1:58 p.m. UTC | #1
On Sun, May 05, 2019 at 09:45:12AM +0530, Anshuman Khandual wrote:
> We don't currently set the FAULT_FLAG_INSTRUCTION mm flag for EL0
> instruction aborts. This has no functional impact, as we don't override
> arch_vma_access_permitted(), and the default implementation always returns
> true. However, it would be helpful to provide the flag so that it can be
> consumed by tracepoints such as dax_pmd_fault.
> 
> This patch sets the FAULT_FLAG_INSTRUCTION flag for EL0 instruction aborts.
> 
> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Will Deacon <will.deacon@arm.com>
> Cc: Mark Rutland <mark.rutland@arm.com>

Queued for 5.3. Thanks.
diff mbox series

Patch

diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 1a7e92a..b641449 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -463,6 +463,7 @@  static int __kprobes do_page_fault(unsigned long addr, unsigned int esr,
 
 	if (is_el0_instruction_abort(esr)) {
 		vm_flags = VM_EXEC;
+		mm_flags |= FAULT_FLAG_INSTRUCTION;
 	} else if ((esr & ESR_ELx_WNR) && !(esr & ESR_ELx_CM)) {
 		vm_flags = VM_WRITE;
 		mm_flags |= FAULT_FLAG_WRITE;