Am 27.03.2017 um 20:55 schrieb none: > Le 2017-03-27 17:30, Richard Weinberger a écrit : >> On Mon, Mar 27, 2017 at 4:45 PM, none <ytrezq@xxxxxxxxxx> wrote: >>> Hello, >>> >>> There’s three way to perform an invalid memory access : >>> >>> The attempt to execute/jump at an invalid address. >>> The attempt to read at an invalid address. >>> The attempt to write at an invalid address. >>> >>> Determining the execute case with rt_sigaction is easy : the last value of >>> eip match the value of the address which caused the segfault. >>> >>> But how to know if the SIGSEGV occurred by a read or by a write attempt ? In >>> the same time shouldn’t that information belong in the mmu ? >> >> Did you look at the machine specific context of SIGSEGV? >> It will give you access to the error code and the trap number. > > Sorry but so, in the case of x86_64, which is the struct member I need to look at ? ucontext_t *c = context; // context is the 3rd parameter to your SIGSEGV handler when SA_SIGINFO is set mcontext_t m = c->uc_mcontext; m.gregs[REG_ERR] and m.gregs[REG_TRAPNO] are what you want. HTH, //richard -- To unsubscribe from this list: send the line "unsubscribe linux-x86_64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html