Files
kernel-eswin-eic7700/include/linux
Oleg Nesterov b02ef20a9f uprobes/x86: Fix the wrong ->si_addr when xol triggers a trap
If the probed insn triggers a trap, ->si_addr = regs->ip is technically
correct, but this is not what the signal handler wants; we need to pass
the address of the probed insn, not the address of xol slot.

Add the new arch-agnostic helper, uprobe_get_trap_addr(), and change
fill_trap_info() and math_error() to use it. !CONFIG_UPROBES case in
uprobes.h uses a macro to avoid include hell and ensure that it can be
compiled even if an architecture doesn't define instruction_pointer().

Test-case:

	#include <signal.h>
	#include <stdio.h>
	#include <unistd.h>

	extern void probe_div(void);

	void sigh(int sig, siginfo_t *info, void *c)
	{
		int passed = (info->si_addr == probe_div);
		printf(passed ? "PASS\n" : "FAIL\n");
		_exit(!passed);
	}

	int main(void)
	{
		struct sigaction sa = {
			.sa_sigaction	= sigh,
			.sa_flags	= SA_SIGINFO,
		};

		sigaction(SIGFPE, &sa, NULL);

		asm (
			"xor %ecx,%ecx\n"
			".globl probe_div; probe_div:\n"
			"idiv %ecx\n"
		);

		return 0;
	}

it fails if probe_div() is probed.

Note: show_unhandled_signals users should probably use this helper too,
but we need to cleanup them first.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Reviewed-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
2014-05-14 13:57:28 +02:00
..
2014-03-28 20:42:01 +01:00
2014-02-15 10:58:17 +00:00
2014-03-28 16:29:35 -04:00
2014-04-18 16:40:08 -07:00
2013-12-23 18:34:58 -08:00
2014-01-24 22:39:54 +01:00
2013-11-15 09:32:21 +09:00
2014-03-11 11:52:47 +01:00
2014-04-03 16:20:58 -07:00
2014-04-01 17:08:43 +02:00
2014-02-13 10:08:52 +05:30
2014-01-16 10:23:02 +10:30
2014-04-01 23:19:14 -04:00
2014-03-10 11:44:42 -04:00
2014-03-11 22:52:43 -04:00
2014-03-10 17:26:19 -07:00
2014-02-20 14:54:28 +01:00
2014-03-04 07:55:47 -08:00
2014-01-16 11:15:50 +01:00
2014-04-07 16:36:07 -07:00
2013-12-29 16:34:25 -05:00
2014-03-07 11:41:32 -05:00
2014-02-19 17:22:44 +01:00
2014-04-17 12:30:40 -07:00
2014-03-13 12:11:00 +10:30
2014-01-25 08:55:09 +01:00
2014-04-03 16:20:50 -07:00
2014-02-13 20:21:59 -08:00
2013-12-11 15:52:34 +01:00
2014-02-28 15:36:37 -08:00
2013-12-26 13:29:35 -05:00
2014-04-01 23:19:08 -04:00
2014-03-04 13:51:06 -05:00
2014-01-27 21:02:39 -08:00
2014-04-01 23:19:10 -04:00
2014-03-17 15:14:16 -04:00
2014-03-17 15:15:21 -04:00
2014-01-25 03:14:05 -05:00
2014-04-07 10:59:19 -07:00
2014-01-13 14:29:49 -08:00
2014-04-03 16:21:04 -07:00
2014-03-19 15:11:19 -06:00
2014-03-19 22:24:08 -04:00
2014-02-17 15:01:52 -08:00
2014-03-09 19:53:45 +01:00
2014-01-28 13:20:09 -08:00
2014-04-01 17:08:43 +02:00
2013-12-19 19:09:38 -05:00
2014-01-27 21:02:39 -08:00
2014-02-15 11:55:28 -08:00
2014-02-17 15:01:37 -08:00
2014-04-07 16:35:53 -07:00
2014-01-30 16:56:55 -08:00