Skip to content

Commit

Permalink
arm64: Expose ESR_EL1 information to user when SIGSEGV/SIGBUS
Browse files Browse the repository at this point in the history
This information is useful for instruction emulators to detect
read/write and access size without having to decode the faulting
instruction. The current patch exports it via sigcontext (struct
esr_context) and is only valid for SIGSEGV and SIGBUS.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
  • Loading branch information
ctmarinas committed May 9, 2014
1 parent 0e0276d commit 15af194
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 0 deletions.
7 changes: 7 additions & 0 deletions arch/arm64/include/uapi/asm/sigcontext.h
Expand Up @@ -53,5 +53,12 @@ struct fpsimd_context {
__uint128_t vregs[32];
};

/* ESR_EL1 context */
#define ESR_MAGIC 0x45535201

struct esr_context {
struct _aarch64_ctx head;
u64 esr;
};

#endif /* _UAPI__ASM_SIGCONTEXT_H */
10 changes: 10 additions & 0 deletions arch/arm64/kernel/signal.c
Expand Up @@ -194,6 +194,16 @@ static int setup_sigframe(struct rt_sigframe __user *sf,
aux += sizeof(*fpsimd_ctx);
}

/* fault information, if valid */
if (current->thread.fault_code) {
struct esr_context *esr_ctx =
container_of(aux, struct esr_context, head);
__put_user_error(ESR_MAGIC, &esr_ctx->head.magic, err);
__put_user_error(sizeof(*esr_ctx), &esr_ctx->head.size, err);
__put_user_error(current->thread.fault_code, &esr_ctx->esr, err);
aux += sizeof(*esr_ctx);
}

/* set the "end" magic */
end = aux;
__put_user_error(0, &end->magic, err);
Expand Down

0 comments on commit 15af194

Please sign in to comment.