kprobes.c 31.4 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/*
 *  Kernel Probes (KProbes)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 * Copyright (C) IBM Corporation, 2002, 2004
 *
 * 2002-Oct	Created by Vamsi Krishna S <vamsi_krishna@in.ibm.com> Kernel
 *		Probes initial implementation ( includes contributions from
 *		Rusty Russell).
 * 2004-July	Suparna Bhattacharya <suparna@in.ibm.com> added jumper probes
 *		interface to access function arguments.
25 26
 * 2004-Oct	Jim Keniston <jkenisto@us.ibm.com> and Prasanna S Panchamukhi
 *		<prasanna@in.ibm.com> adapted for x86_64 from i386.
L
Linus Torvalds 已提交
27 28
 * 2005-Mar	Roland McGrath <roland@redhat.com>
 *		Fixed to handle %rip-relative addressing mode correctly.
29 30 31 32 33 34 35
 * 2005-May	Hien Nguyen <hien@us.ibm.com>, Jim Keniston
 *		<jkenisto@us.ibm.com> and Prasanna S Panchamukhi
 *		<prasanna@in.ibm.com> added function-return probes.
 * 2005-May	Rusty Lynch <rusty.lynch@intel.com>
 * 		Added function return probes functionality
 * 2006-Feb	Masami Hiramatsu <hiramatu@sdl.hitachi.co.jp> added
 * 		kprobe-booster and kretprobe-booster for i386.
36 37
 * 2007-Dec	Masami Hiramatsu <mhiramat@redhat.com> added kprobe-booster
 * 		and kretprobe-booster for x86-64
38 39 40
 * 2007-Dec	Masami Hiramatsu <mhiramat@redhat.com>, Arjan van de Ven
 * 		<arjan@infradead.org> and Jim Keniston <jkenisto@us.ibm.com>
 * 		unified x86 kprobes code.
L
Linus Torvalds 已提交
41 42 43 44 45 46
 */

#include <linux/kprobes.h>
#include <linux/ptrace.h>
#include <linux/string.h>
#include <linux/slab.h>
47
#include <linux/hardirq.h>
L
Linus Torvalds 已提交
48
#include <linux/preempt.h>
49
#include <linux/module.h>
50
#include <linux/kdebug.h>
51

52 53
#include <asm/cacheflush.h>
#include <asm/desc.h>
L
Linus Torvalds 已提交
54
#include <asm/pgtable.h>
55
#include <asm/uaccess.h>
56
#include <asm/alternative.h>
L
Linus Torvalds 已提交
57 58 59

void jprobe_return_end(void);

60 61
DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL;
DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
L
Linus Torvalds 已提交
62

63
#ifdef CONFIG_X86_64
64
#define stack_addr(regs) ((unsigned long *)regs->sp)
65 66 67 68 69 70 71 72 73 74 75
#else
/*
 * "&regs->sp" looks wrong, but it's correct for x86_32.  x86_32 CPUs
 * don't save the ss and esp registers if the CPU is already in kernel
 * mode when it traps.  So for kprobes, regs->sp and regs->ss are not
 * the [nonexistent] saved stack pointer and ss register, but rather
 * the top 8 bytes of the pre-int3 stack.  So &regs->sp happens to
 * point to the top of the pre-int3 stack.
 */
#define stack_addr(regs) ((unsigned long *)&regs->sp)
#endif
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154

#define W(row, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf)\
	(((b0##UL << 0x0)|(b1##UL << 0x1)|(b2##UL << 0x2)|(b3##UL << 0x3) |   \
	  (b4##UL << 0x4)|(b5##UL << 0x5)|(b6##UL << 0x6)|(b7##UL << 0x7) |   \
	  (b8##UL << 0x8)|(b9##UL << 0x9)|(ba##UL << 0xa)|(bb##UL << 0xb) |   \
	  (bc##UL << 0xc)|(bd##UL << 0xd)|(be##UL << 0xe)|(bf##UL << 0xf))    \
	 << (row % 32))
	/*
	 * Undefined/reserved opcodes, conditional jump, Opcode Extension
	 * Groups, and some special opcodes can not boost.
	 */
static const u32 twobyte_is_boostable[256 / 32] = {
	/*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f          */
	/*      ----------------------------------------------          */
	W(0x00, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0) | /* 00 */
	W(0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) , /* 10 */
	W(0x20, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) | /* 20 */
	W(0x30, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) , /* 30 */
	W(0x40, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 40 */
	W(0x50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) , /* 50 */
	W(0x60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1) | /* 60 */
	W(0x70, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1) , /* 70 */
	W(0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) | /* 80 */
	W(0x90, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* 90 */
	W(0xa0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1) | /* a0 */
	W(0xb0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1) , /* b0 */
	W(0xc0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1) | /* c0 */
	W(0xd0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1) , /* d0 */
	W(0xe0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1) | /* e0 */
	W(0xf0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0)   /* f0 */
	/*      -----------------------------------------------         */
	/*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f          */
};
static const u32 onebyte_has_modrm[256 / 32] = {
	/*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f          */
	/*      -----------------------------------------------         */
	W(0x00, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0) | /* 00 */
	W(0x10, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0) , /* 10 */
	W(0x20, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0) | /* 20 */
	W(0x30, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0) , /* 30 */
	W(0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) | /* 40 */
	W(0x50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) , /* 50 */
	W(0x60, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0) | /* 60 */
	W(0x70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) , /* 70 */
	W(0x80, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 80 */
	W(0x90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) , /* 90 */
	W(0xa0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) | /* a0 */
	W(0xb0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) , /* b0 */
	W(0xc0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0) | /* c0 */
	W(0xd0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1) , /* d0 */
	W(0xe0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) | /* e0 */
	W(0xf0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1)   /* f0 */
	/*      -----------------------------------------------         */
	/*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f          */
};
static const u32 twobyte_has_modrm[256 / 32] = {
	/*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f          */
	/*      -----------------------------------------------         */
	W(0x00, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1) | /* 0f */
	W(0x10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0) , /* 1f */
	W(0x20, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1) | /* 2f */
	W(0x30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) , /* 3f */
	W(0x40, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 4f */
	W(0x50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* 5f */
	W(0x60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 6f */
	W(0x70, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1) , /* 7f */
	W(0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) | /* 8f */
	W(0x90, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* 9f */
	W(0xa0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1) | /* af */
	W(0xb0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1) , /* bf */
	W(0xc0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0) | /* cf */
	W(0xd0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* df */
	W(0xe0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* ef */
	W(0xf0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)   /* ff */
	/*      -----------------------------------------------         */
	/*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f          */
};
#undef W

155 156 157 158 159 160 161
struct kretprobe_blackpoint kretprobe_blacklist[] = {
	{"__switch_to", }, /* This function switches only current task, but
			      doesn't switch kernel stack.*/
	{NULL, NULL}	/* Terminator */
};
const int kretprobe_blacklist_size = ARRAY_SIZE(kretprobe_blacklist);

162
/* Insert a jump instruction at address 'from', which jumps to address 'to'.*/
H
Harvey Harrison 已提交
163
static void __kprobes set_jmp_op(void *from, void *to)
164 165 166 167 168 169 170 171 172 173
{
	struct __arch_jmp_op {
		char op;
		s32 raddr;
	} __attribute__((packed)) * jop;
	jop = (struct __arch_jmp_op *)from;
	jop->raddr = (s32)((long)(to) - ((long)(from) + 5));
	jop->op = RELATIVEJUMP_INSTRUCTION;
}

174 175 176 177 178 179 180 181 182 183 184 185 186
/*
 * Check for the REX prefix which can only exist on X86_64
 * X86_32 always returns 0
 */
static int __kprobes is_REX_prefix(kprobe_opcode_t *insn)
{
#ifdef CONFIG_X86_64
	if ((*insn & 0xf0) == 0x40)
		return 1;
#endif
	return 0;
}

187
/*
188 189
 * Returns non-zero if opcode is boostable.
 * RIP relative instructions are adjusted at copying time in 64 bits mode
190
 */
H
Harvey Harrison 已提交
191
static int __kprobes can_boost(kprobe_opcode_t *opcodes)
192 193 194 195
{
	kprobe_opcode_t opcode;
	kprobe_opcode_t *orig_opcodes = opcodes;

196
	if (search_exception_tables((unsigned long)opcodes))
197 198
		return 0;	/* Page fault may occur on this address. */

199 200 201 202 203 204 205 206 207
retry:
	if (opcodes - orig_opcodes > MAX_INSN_SIZE - 1)
		return 0;
	opcode = *(opcodes++);

	/* 2nd-byte opcode */
	if (opcode == 0x0f) {
		if (opcodes - orig_opcodes > MAX_INSN_SIZE - 1)
			return 0;
208 209
		return test_bit(*opcodes,
				(unsigned long *)twobyte_is_boostable);
210 211 212
	}

	switch (opcode & 0xf0) {
213
#ifdef CONFIG_X86_64
214 215
	case 0x40:
		goto retry; /* REX prefix is boostable */
216
#endif
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
	case 0x60:
		if (0x63 < opcode && opcode < 0x67)
			goto retry; /* prefixes */
		/* can't boost Address-size override and bound */
		return (opcode != 0x62 && opcode != 0x67);
	case 0x70:
		return 0; /* can't boost conditional jump */
	case 0xc0:
		/* can't boost software-interruptions */
		return (0xc1 < opcode && opcode < 0xcc) || opcode == 0xcf;
	case 0xd0:
		/* can boost AA* and XLAT */
		return (opcode == 0xd4 || opcode == 0xd5 || opcode == 0xd7);
	case 0xe0:
		/* can boost in/out and absolute jmps */
		return ((opcode & 0x04) || opcode == 0xea);
	case 0xf0:
		if ((opcode & 0x0c) == 0 && opcode != 0xf1)
			goto retry; /* lock/rep(ne) prefix */
		/* clear and set flags are boostable */
		return (opcode == 0xf5 || (0xf7 < opcode && opcode < 0xfe));
	default:
		/* segment override prefixes are boostable */
		if (opcode == 0x26 || opcode == 0x36 || opcode == 0x3e)
			goto retry; /* prefixes */
		/* CS override prefix and call are not boostable */
		return (opcode != 0x2e && opcode != 0x9a);
	}
}

L
Linus Torvalds 已提交
247
/*
248
 * Returns non-zero if opcode modifies the interrupt flag.
L
Linus Torvalds 已提交
249
 */
250
static int __kprobes is_IF_modifier(kprobe_opcode_t *insn)
L
Linus Torvalds 已提交
251 252 253 254 255 256 257 258
{
	switch (*insn) {
	case 0xfa:		/* cli */
	case 0xfb:		/* sti */
	case 0xcf:		/* iret/iretd */
	case 0x9d:		/* popf/popfd */
		return 1;
	}
259

260
	/*
261
	 * on X86_64, 0x40-0x4f are REX prefixes so we need to look
262 263
	 * at the next byte instead.. but of course not recurse infinitely
	 */
264
	if (is_REX_prefix(insn))
265
		return is_IF_modifier(++insn);
266

L
Linus Torvalds 已提交
267 268 269 270
	return 0;
}

/*
271 272
 * Adjust the displacement if the instruction uses the %rip-relative
 * addressing mode.
273
 * If it does, Return the address of the 32-bit displacement word.
L
Linus Torvalds 已提交
274
 * If not, return null.
275
 * Only applicable to 64-bit x86.
L
Linus Torvalds 已提交
276
 */
277
static void __kprobes fix_riprel(struct kprobe *p)
L
Linus Torvalds 已提交
278
{
279
#ifdef CONFIG_X86_64
280 281
	u8 *insn = p->ainsn.insn;
	s64 disp;
L
Linus Torvalds 已提交
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304
	int need_modrm;

	/* Skip legacy instruction prefixes.  */
	while (1) {
		switch (*insn) {
		case 0x66:
		case 0x67:
		case 0x2e:
		case 0x3e:
		case 0x26:
		case 0x64:
		case 0x65:
		case 0x36:
		case 0xf0:
		case 0xf3:
		case 0xf2:
			++insn;
			continue;
		}
		break;
	}

	/* Skip REX instruction prefix.  */
305
	if (is_REX_prefix(insn))
L
Linus Torvalds 已提交
306 307
		++insn;

308 309
	if (*insn == 0x0f) {
		/* Two-byte opcode.  */
L
Linus Torvalds 已提交
310
		++insn;
311 312
		need_modrm = test_bit(*insn,
				      (unsigned long *)twobyte_has_modrm);
313 314
	} else
		/* One-byte opcode.  */
315 316
		need_modrm = test_bit(*insn,
				      (unsigned long *)onebyte_has_modrm);
L
Linus Torvalds 已提交
317 318 319

	if (need_modrm) {
		u8 modrm = *++insn;
320 321
		if ((modrm & 0xc7) == 0x05) {
			/* %rip+disp32 addressing mode */
L
Linus Torvalds 已提交
322
			/* Displacement follows ModRM byte.  */
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340
			++insn;
			/*
			 * The copied instruction uses the %rip-relative
			 * addressing mode.  Adjust the displacement for the
			 * difference between the original location of this
			 * instruction and the location of the copy that will
			 * actually be run.  The tricky bit here is making sure
			 * that the sign extension happens correctly in this
			 * calculation, since we need a signed 32-bit result to
			 * be sign-extended to 64 bits when it's added to the
			 * %rip value and yield the same 64-bit result that the
			 * sign-extension of the original signed 32-bit
			 * displacement would have given.
			 */
			disp = (u8 *) p->addr + *((s32 *) insn) -
			       (u8 *) p->ainsn.insn;
			BUG_ON((s64) (s32) disp != disp); /* Sanity check.  */
			*(s32 *)insn = (s32) disp;
L
Linus Torvalds 已提交
341 342
		}
	}
343
#endif
344
}
L
Linus Torvalds 已提交
345

346
static void __kprobes arch_copy_kprobe(struct kprobe *p)
L
Linus Torvalds 已提交
347
{
348
	memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
349

350
	fix_riprel(p);
351

352
	if (can_boost(p->addr))
353
		p->ainsn.boostable = 0;
354
	else
355
		p->ainsn.boostable = -1;
356

357
	p->opcode = *p->addr;
L
Linus Torvalds 已提交
358 359
}

360 361 362 363 364 365 366 367 368 369
int __kprobes arch_prepare_kprobe(struct kprobe *p)
{
	/* insn: must be on special executable page on x86. */
	p->ainsn.insn = get_insn_slot();
	if (!p->ainsn.insn)
		return -ENOMEM;
	arch_copy_kprobe(p);
	return 0;
}

370
void __kprobes arch_arm_kprobe(struct kprobe *p)
L
Linus Torvalds 已提交
371
{
372
	text_poke(p->addr, ((unsigned char []){BREAKPOINT_INSTRUCTION}), 1);
L
Linus Torvalds 已提交
373 374
}

375
void __kprobes arch_disarm_kprobe(struct kprobe *p)
L
Linus Torvalds 已提交
376
{
377
	text_poke(p->addr, &p->opcode, 1);
378 379
}

380
void __kprobes arch_remove_kprobe(struct kprobe *p)
381
{
382 383 384 385
	if (p->ainsn.insn) {
		free_insn_slot(p->ainsn.insn, (p->ainsn.boostable == 1));
		p->ainsn.insn = NULL;
	}
L
Linus Torvalds 已提交
386 387
}

388
static void __kprobes save_previous_kprobe(struct kprobe_ctlblk *kcb)
389
{
390 391
	kcb->prev_kprobe.kp = kprobe_running();
	kcb->prev_kprobe.status = kcb->kprobe_status;
392 393
	kcb->prev_kprobe.old_flags = kcb->kprobe_old_flags;
	kcb->prev_kprobe.saved_flags = kcb->kprobe_saved_flags;
394 395
}

396
static void __kprobes restore_previous_kprobe(struct kprobe_ctlblk *kcb)
397
{
398 399
	__get_cpu_var(current_kprobe) = kcb->prev_kprobe.kp;
	kcb->kprobe_status = kcb->prev_kprobe.status;
400 401
	kcb->kprobe_old_flags = kcb->prev_kprobe.old_flags;
	kcb->kprobe_saved_flags = kcb->prev_kprobe.saved_flags;
402 403
}

404
static void __kprobes set_current_kprobe(struct kprobe *p, struct pt_regs *regs,
405
				struct kprobe_ctlblk *kcb)
406
{
407
	__get_cpu_var(current_kprobe) = p;
408
	kcb->kprobe_saved_flags = kcb->kprobe_old_flags
409
		= (regs->flags & (X86_EFLAGS_TF | X86_EFLAGS_IF));
410
	if (is_IF_modifier(p->ainsn.insn))
411
		kcb->kprobe_saved_flags &= ~X86_EFLAGS_IF;
412 413
}

H
Harvey Harrison 已提交
414
static void __kprobes clear_btf(void)
R
Roland McGrath 已提交
415 416
{
	if (test_thread_flag(TIF_DEBUGCTLMSR))
417
		update_debugctlmsr(0);
R
Roland McGrath 已提交
418 419
}

H
Harvey Harrison 已提交
420
static void __kprobes restore_btf(void)
R
Roland McGrath 已提交
421 422
{
	if (test_thread_flag(TIF_DEBUGCTLMSR))
423
		update_debugctlmsr(current->thread.debugctlmsr);
R
Roland McGrath 已提交
424 425
}

426
static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
L
Linus Torvalds 已提交
427
{
R
Roland McGrath 已提交
428
	clear_btf();
429 430
	regs->flags |= X86_EFLAGS_TF;
	regs->flags &= ~X86_EFLAGS_IF;
H
Harvey Harrison 已提交
431
	/* single step inline if the instruction is an int3 */
L
Linus Torvalds 已提交
432
	if (p->opcode == BREAKPOINT_INSTRUCTION)
433
		regs->ip = (unsigned long)p->addr;
L
Linus Torvalds 已提交
434
	else
435
		regs->ip = (unsigned long)p->ainsn.insn;
L
Linus Torvalds 已提交
436 437
}

438
void __kprobes arch_prepare_kretprobe(struct kretprobe_instance *ri,
439
				      struct pt_regs *regs)
440
{
441
	unsigned long *sara = stack_addr(regs);
442

443
	ri->ret_addr = (kprobe_opcode_t *) *sara;
444

445 446
	/* Replace the return addr with trampoline addr */
	*sara = (unsigned long) &kretprobe_trampoline;
447
}
448 449 450 451

static void __kprobes setup_singlestep(struct kprobe *p, struct pt_regs *regs,
				       struct kprobe_ctlblk *kcb)
{
452
#if !defined(CONFIG_PREEMPT) || defined(CONFIG_FREEZER)
453 454 455 456 457 458 459 460 461 462 463 464
	if (p->ainsn.boostable == 1 && !p->post_handler) {
		/* Boost up -- we can execute copied instructions directly */
		reset_current_kprobe();
		regs->ip = (unsigned long)p->ainsn.insn;
		preempt_enable_no_resched();
		return;
	}
#endif
	prepare_singlestep(p, regs);
	kcb->kprobe_status = KPROBE_HIT_SS;
}

H
Harvey Harrison 已提交
465 466 467 468 469
/*
 * We have reentered the kprobe_handler(), since another probe was hit while
 * within the handler. We save the original kprobes variables and just single
 * step on the instruction of the new probe without calling any user handlers.
 */
470 471
static int __kprobes reenter_kprobe(struct kprobe *p, struct pt_regs *regs,
				    struct kprobe_ctlblk *kcb)
H
Harvey Harrison 已提交
472
{
473 474
	switch (kcb->kprobe_status) {
	case KPROBE_HIT_SSDONE:
475 476 477 478 479 480 481 482
#ifdef CONFIG_X86_64
		/* TODO: Provide re-entrancy from post_kprobes_handler() and
		 * avoid exception stack corruption while single-stepping on
		 * the instruction of the new probe.
		 */
		arch_disarm_kprobe(p);
		regs->ip = (unsigned long)p->addr;
		reset_current_kprobe();
483 484
		preempt_enable_no_resched();
		break;
485
#endif
486
	case KPROBE_HIT_ACTIVE:
487 488 489 490 491
		save_previous_kprobe(kcb);
		set_current_kprobe(p, regs, kcb);
		kprobes_inc_nmissed_count(p);
		prepare_singlestep(p, regs);
		kcb->kprobe_status = KPROBE_REENTER;
492 493
		break;
	case KPROBE_HIT_SS:
494
		if (p == kprobe_running()) {
495
			regs->flags &= ~X86_EFLAGS_TF;
496 497 498
			regs->flags |= kcb->kprobe_saved_flags;
			return 0;
		} else {
499 500 501 502 503 504
			/* A probe has been hit in the codepath leading up
			 * to, or just after, single-stepping of a probed
			 * instruction. This entire codepath should strictly
			 * reside in .kprobes.text section. Raise a warning
			 * to highlight this peculiar case.
			 */
505 506 507 508
		}
	default:
		/* impossible cases */
		WARN_ON(1);
509
		return 0;
510
	}
511

512
	return 1;
H
Harvey Harrison 已提交
513
}
514

515 516 517 518 519
/*
 * Interrupts are disabled on entry as trap3 is an interrupt gate and they
 * remain disabled thorough out this function.
 */
static int __kprobes kprobe_handler(struct pt_regs *regs)
L
Linus Torvalds 已提交
520
{
521
	kprobe_opcode_t *addr;
522
	struct kprobe *p;
523 524
	struct kprobe_ctlblk *kcb;

525
	addr = (kprobe_opcode_t *)(regs->ip - sizeof(kprobe_opcode_t));
526 527 528 529 530 531 532 533 534 535 536 537 538
	if (*addr != BREAKPOINT_INSTRUCTION) {
		/*
		 * The breakpoint instruction was removed right
		 * after we hit it.  Another cpu has removed
		 * either a probepoint or a debugger breakpoint
		 * at this address.  In either case, no further
		 * handling of this interrupt is appropriate.
		 * Back up over the (now missing) int3 and run
		 * the original instruction.
		 */
		regs->ip = (unsigned long)addr;
		return 1;
	}
539

540 541
	/*
	 * We don't want to be preempted for the entire
542 543 544
	 * duration of kprobe processing. We conditionally
	 * re-enable preemption at the end of this function,
	 * and also in reenter_kprobe() and setup_singlestep().
545 546
	 */
	preempt_disable();
L
Linus Torvalds 已提交
547

548
	kcb = get_kprobe_ctlblk();
549
	p = get_kprobe(addr);
550

551 552
	if (p) {
		if (kprobe_running()) {
553 554
			if (reenter_kprobe(p, regs, kcb))
				return 1;
L
Linus Torvalds 已提交
555
		} else {
556 557
			set_current_kprobe(p, regs, kcb);
			kcb->kprobe_status = KPROBE_HIT_ACTIVE;
558

L
Linus Torvalds 已提交
559
			/*
560 561 562 563 564 565
			 * If we have no pre-handler or it returned 0, we
			 * continue with normal processing.  If we have a
			 * pre-handler and it returned non-zero, it prepped
			 * for calling the break_handler below on re-entry
			 * for jprobe processing, so get out doing nothing
			 * more here.
L
Linus Torvalds 已提交
566
			 */
567 568 569
			if (!p->pre_handler || !p->pre_handler(p, regs))
				setup_singlestep(p, regs, kcb);
			return 1;
570
		}
571 572 573 574 575
	} else if (kprobe_running()) {
		p = __get_cpu_var(current_kprobe);
		if (p->break_handler && p->break_handler(p, regs)) {
			setup_singlestep(p, regs, kcb);
			return 1;
L
Linus Torvalds 已提交
576
		}
577
	} /* else: not a kprobe fault; let the kernel handle it */
L
Linus Torvalds 已提交
578

579
	preempt_enable_no_resched();
580
	return 0;
L
Linus Torvalds 已提交
581 582
}

583
/*
584 585
 * When a retprobed function returns, this code saves registers and
 * calls trampoline_handler() runs, which calls the kretprobe's handler.
586
 */
587
static void __used __kprobes kretprobe_trampoline_holder(void)
588
{
589 590
	asm volatile (
			".global kretprobe_trampoline\n"
591
			"kretprobe_trampoline: \n"
592
#ifdef CONFIG_X86_64
593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637
			/* We don't bother saving the ss register */
			"	pushq %rsp\n"
			"	pushfq\n"
			/*
			 * Skip cs, ip, orig_ax.
			 * trampoline_handler() will plug in these values
			 */
			"	subq $24, %rsp\n"
			"	pushq %rdi\n"
			"	pushq %rsi\n"
			"	pushq %rdx\n"
			"	pushq %rcx\n"
			"	pushq %rax\n"
			"	pushq %r8\n"
			"	pushq %r9\n"
			"	pushq %r10\n"
			"	pushq %r11\n"
			"	pushq %rbx\n"
			"	pushq %rbp\n"
			"	pushq %r12\n"
			"	pushq %r13\n"
			"	pushq %r14\n"
			"	pushq %r15\n"
			"	movq %rsp, %rdi\n"
			"	call trampoline_handler\n"
			/* Replace saved sp with true return address. */
			"	movq %rax, 152(%rsp)\n"
			"	popq %r15\n"
			"	popq %r14\n"
			"	popq %r13\n"
			"	popq %r12\n"
			"	popq %rbp\n"
			"	popq %rbx\n"
			"	popq %r11\n"
			"	popq %r10\n"
			"	popq %r9\n"
			"	popq %r8\n"
			"	popq %rax\n"
			"	popq %rcx\n"
			"	popq %rdx\n"
			"	popq %rsi\n"
			"	popq %rdi\n"
			/* Skip orig_ax, ip, cs */
			"	addq $24, %rsp\n"
			"	popfq\n"
638 639 640
#else
			"	pushf\n"
			/*
641
			 * Skip cs, ip, orig_ax and gs.
642 643
			 * trampoline_handler() will plug in these values
			 */
644
			"	subl $16, %esp\n"
645 646
			"	pushl %fs\n"
			"	pushl %es\n"
647
			"	pushl %ds\n"
648 649 650 651 652 653 654 655 656 657
			"	pushl %eax\n"
			"	pushl %ebp\n"
			"	pushl %edi\n"
			"	pushl %esi\n"
			"	pushl %edx\n"
			"	pushl %ecx\n"
			"	pushl %ebx\n"
			"	movl %esp, %eax\n"
			"	call trampoline_handler\n"
			/* Move flags to cs */
658 659
			"	movl 56(%esp), %edx\n"
			"	movl %edx, 52(%esp)\n"
660
			/* Replace saved flags with true return address. */
661
			"	movl %eax, 56(%esp)\n"
662 663 664 665 666 667 668
			"	popl %ebx\n"
			"	popl %ecx\n"
			"	popl %edx\n"
			"	popl %esi\n"
			"	popl %edi\n"
			"	popl %ebp\n"
			"	popl %eax\n"
669 670
			/* Skip ds, es, fs, gs, orig_ax and ip */
			"	addl $24, %esp\n"
671 672
			"	popf\n"
#endif
673
			"	ret\n");
674
}
675 676

/*
677
 * Called from kretprobe_trampoline
678
 */
679
static __used __kprobes void *trampoline_handler(struct pt_regs *regs)
680
{
B
bibo,mao 已提交
681
	struct kretprobe_instance *ri = NULL;
682
	struct hlist_head *head, empty_rp;
B
bibo,mao 已提交
683
	struct hlist_node *node, *tmp;
684
	unsigned long flags, orig_ret_address = 0;
685
	unsigned long trampoline_address = (unsigned long)&kretprobe_trampoline;
686

687
	INIT_HLIST_HEAD(&empty_rp);
688
	kretprobe_hash_lock(current, &head, &flags);
689
	/* fixup registers */
690
#ifdef CONFIG_X86_64
691
	regs->cs = __KERNEL_CS;
692 693
#else
	regs->cs = __KERNEL_CS | get_kernel_rpl();
694
	regs->gs = 0;
695
#endif
696
	regs->ip = trampoline_address;
697
	regs->orig_ax = ~0UL;
698

699 700
	/*
	 * It is possible to have multiple instances associated with a given
701
	 * task either because multiple functions in the call path have
702
	 * return probes installed on them, and/or more than one
703 704 705
	 * return probe was registered for a target function.
	 *
	 * We can handle this because:
706
	 *     - instances are always pushed into the head of the list
707
	 *     - when multiple return probes are registered for the same
708 709 710
	 *	 function, the (chronologically) first instance's ret_addr
	 *	 will be the real return address, and all the rest will
	 *	 point to kretprobe_trampoline.
711 712
	 */
	hlist_for_each_entry_safe(ri, node, tmp, head, hlist) {
B
bibo,mao 已提交
713
		if (ri->task != current)
714
			/* another task is sharing our hash bucket */
B
bibo,mao 已提交
715
			continue;
716

717 718 719
		if (ri->rp && ri->rp->handler) {
			__get_cpu_var(current_kprobe) = &ri->rp->kp;
			get_kprobe_ctlblk()->kprobe_status = KPROBE_HIT_ACTIVE;
720
			ri->rp->handler(ri, regs);
721 722
			__get_cpu_var(current_kprobe) = NULL;
		}
723 724

		orig_ret_address = (unsigned long)ri->ret_addr;
725
		recycle_rp_inst(ri, &empty_rp);
726 727 728 729 730 731 732 733

		if (orig_ret_address != trampoline_address)
			/*
			 * This is the real return address. Any other
			 * instances associated with this task are for
			 * other calls deeper on the call stack
			 */
			break;
734
	}
735

736
	kretprobe_assert(ri, orig_ret_address, trampoline_address);
737

738
	kretprobe_hash_unlock(current, &flags);
739

740 741 742 743
	hlist_for_each_entry_safe(ri, node, tmp, &empty_rp, hlist) {
		hlist_del(&ri->hlist);
		kfree(ri);
	}
744
	return (void *)orig_ret_address;
745 746
}

L
Linus Torvalds 已提交
747 748 749 750 751 752 753 754 755 756 757 758
/*
 * Called after single-stepping.  p->addr is the address of the
 * instruction whose first byte has been replaced by the "int 3"
 * instruction.  To avoid the SMP problems that can occur when we
 * temporarily put back the original opcode to single-step, we
 * single-stepped a copy of the instruction.  The address of this
 * copy is p->ainsn.insn.
 *
 * This function prepares to return from the post-single-step
 * interrupt.  We have to fix up the stack as follows:
 *
 * 0) Except in the case of absolute or indirect jump or call instructions,
759
 * the new ip is relative to the copied instruction.  We need to make
L
Linus Torvalds 已提交
760 761 762
 * it relative to the original instruction.
 *
 * 1) If the single-stepped instruction was pushfl, then the TF and IF
763
 * flags are set in the just-pushed flags, and may need to be cleared.
L
Linus Torvalds 已提交
764 765 766 767
 *
 * 2) If the single-stepped instruction was a call, the return address
 * that is atop the stack is the address following the copied instruction.
 * We need to make it the address following the original instruction.
768 769 770 771 772
 *
 * If this is the first time we've single-stepped the instruction at
 * this probepoint, and the instruction is boostable, boost it: add a
 * jump instruction after the copied instruction, that jumps to the next
 * instruction after the probepoint.
L
Linus Torvalds 已提交
773
 */
774 775
static void __kprobes resume_execution(struct kprobe *p,
		struct pt_regs *regs, struct kprobe_ctlblk *kcb)
L
Linus Torvalds 已提交
776
{
777 778 779
	unsigned long *tos = stack_addr(regs);
	unsigned long copy_ip = (unsigned long)p->ainsn.insn;
	unsigned long orig_ip = (unsigned long)p->addr;
L
Linus Torvalds 已提交
780 781 782
	kprobe_opcode_t *insn = p->ainsn.insn;

	/*skip the REX prefix*/
783
	if (is_REX_prefix(insn))
L
Linus Torvalds 已提交
784 785
		insn++;

786
	regs->flags &= ~X86_EFLAGS_TF;
L
Linus Torvalds 已提交
787
	switch (*insn) {
M
Masami Hiramatsu 已提交
788
	case 0x9c:	/* pushfl */
789
		*tos &= ~(X86_EFLAGS_TF | X86_EFLAGS_IF);
790
		*tos |= kcb->kprobe_old_flags;
L
Linus Torvalds 已提交
791
		break;
M
Masami Hiramatsu 已提交
792 793
	case 0xc2:	/* iret/ret/lret */
	case 0xc3:
794
	case 0xca:
M
Masami Hiramatsu 已提交
795 796 797 798
	case 0xcb:
	case 0xcf:
	case 0xea:	/* jmp absolute -- ip is correct */
		/* ip is already adjusted, no more changes required */
799
		p->ainsn.boostable = 1;
M
Masami Hiramatsu 已提交
800 801
		goto no_change;
	case 0xe8:	/* call relative - Fix return addr */
802
		*tos = orig_ip + (*tos - copy_ip);
L
Linus Torvalds 已提交
803
		break;
H
Harvey Harrison 已提交
804
#ifdef CONFIG_X86_32
805 806 807 808
	case 0x9a:	/* call absolute -- same as call absolute, indirect */
		*tos = orig_ip + (*tos - copy_ip);
		goto no_change;
#endif
L
Linus Torvalds 已提交
809
	case 0xff:
810
		if ((insn[1] & 0x30) == 0x10) {
811 812 813 814 815 816
			/*
			 * call absolute, indirect
			 * Fix return addr; ip is correct.
			 * But this is not boostable
			 */
			*tos = orig_ip + (*tos - copy_ip);
M
Masami Hiramatsu 已提交
817
			goto no_change;
818 819 820 821 822 823
		} else if (((insn[1] & 0x31) == 0x20) ||
			   ((insn[1] & 0x31) == 0x21)) {
			/*
			 * jmp near and far, absolute indirect
			 * ip is correct. And this is boostable
			 */
824
			p->ainsn.boostable = 1;
M
Masami Hiramatsu 已提交
825
			goto no_change;
L
Linus Torvalds 已提交
826 827 828 829 830
		}
	default:
		break;
	}

831
	if (p->ainsn.boostable == 0) {
832 833
		if ((regs->ip > copy_ip) &&
		    (regs->ip - copy_ip) + 5 < MAX_INSN_SIZE) {
834 835 836 837 838
			/*
			 * These instructions can be executed directly if it
			 * jumps back to correct address.
			 */
			set_jmp_op((void *)regs->ip,
839
				   (void *)orig_ip + (regs->ip - copy_ip));
840 841 842 843 844 845
			p->ainsn.boostable = 1;
		} else {
			p->ainsn.boostable = -1;
		}
	}

846
	regs->ip += orig_ip - copy_ip;
847

M
Masami Hiramatsu 已提交
848
no_change:
R
Roland McGrath 已提交
849
	restore_btf();
L
Linus Torvalds 已提交
850 851
}

852 853 854 855 856
/*
 * Interrupts are disabled on entry as trap1 is an interrupt gate and they
 * remain disabled thoroughout this function.
 */
static int __kprobes post_kprobe_handler(struct pt_regs *regs)
L
Linus Torvalds 已提交
857
{
858 859 860 861
	struct kprobe *cur = kprobe_running();
	struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();

	if (!cur)
L
Linus Torvalds 已提交
862 863
		return 0;

864 865 866
	resume_execution(cur, regs, kcb);
	regs->flags |= kcb->kprobe_saved_flags;

867 868 869
	if ((kcb->kprobe_status != KPROBE_REENTER) && cur->post_handler) {
		kcb->kprobe_status = KPROBE_HIT_SSDONE;
		cur->post_handler(cur, regs, 0);
870
	}
L
Linus Torvalds 已提交
871

872
	/* Restore back the original saved kprobes variables and continue. */
873 874
	if (kcb->kprobe_status == KPROBE_REENTER) {
		restore_previous_kprobe(kcb);
875 876
		goto out;
	}
877
	reset_current_kprobe();
878
out:
L
Linus Torvalds 已提交
879 880 881
	preempt_enable_no_resched();

	/*
882
	 * if somebody else is singlestepping across a probe point, flags
L
Linus Torvalds 已提交
883 884 885
	 * will have TF set, in which case, continue the remaining processing
	 * of do_debug, as if this is not a probe hit.
	 */
886
	if (regs->flags & X86_EFLAGS_TF)
L
Linus Torvalds 已提交
887 888 889 890 891
		return 0;

	return 1;
}

892
int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
L
Linus Torvalds 已提交
893
{
894 895 896
	struct kprobe *cur = kprobe_running();
	struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();

897
	switch (kcb->kprobe_status) {
898 899 900 901 902
	case KPROBE_HIT_SS:
	case KPROBE_REENTER:
		/*
		 * We are here because the instruction being single
		 * stepped caused a page fault. We reset the current
903
		 * kprobe and the ip points back to the probe address
904 905 906
		 * and allow the page fault handler to continue as a
		 * normal page fault.
		 */
907
		regs->ip = (unsigned long)cur->addr;
908
		regs->flags |= kcb->kprobe_old_flags;
909 910 911 912
		if (kcb->kprobe_status == KPROBE_REENTER)
			restore_previous_kprobe(kcb);
		else
			reset_current_kprobe();
L
Linus Torvalds 已提交
913
		preempt_enable_no_resched();
914 915 916 917 918
		break;
	case KPROBE_HIT_ACTIVE:
	case KPROBE_HIT_SSDONE:
		/*
		 * We increment the nmissed count for accounting,
919
		 * we can also use npre/npostfault count for accounting
920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937
		 * these specific fault cases.
		 */
		kprobes_inc_nmissed_count(cur);

		/*
		 * We come here because instructions in the pre/post
		 * handler caused the page_fault, this could happen
		 * if handler tries to access user space by
		 * copy_from_user(), get_user() etc. Let the
		 * user-specified handler try to fix it first.
		 */
		if (cur->fault_handler && cur->fault_handler(cur, regs, trapnr))
			return 1;

		/*
		 * In case the user-specified fault handler returned
		 * zero, try to fix up.
		 */
938 939
		if (fixup_exception(regs))
			return 1;
H
Harvey Harrison 已提交
940

941
		/*
942
		 * fixup routine could not handle it,
943 944 945 946 947
		 * Let do_page_fault() fix it.
		 */
		break;
	default:
		break;
L
Linus Torvalds 已提交
948 949 950 951 952 953 954
	}
	return 0;
}

/*
 * Wrapper routine for handling exceptions.
 */
955 956
int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
				       unsigned long val, void *data)
L
Linus Torvalds 已提交
957
{
J
Jan Engelhardt 已提交
958
	struct die_args *args = data;
959 960
	int ret = NOTIFY_DONE;

961
	if (args->regs && user_mode_vm(args->regs))
962 963
		return ret;

L
Linus Torvalds 已提交
964 965 966
	switch (val) {
	case DIE_INT3:
		if (kprobe_handler(args->regs))
967
			ret = NOTIFY_STOP;
L
Linus Torvalds 已提交
968 969 970
		break;
	case DIE_DEBUG:
		if (post_kprobe_handler(args->regs))
971
			ret = NOTIFY_STOP;
L
Linus Torvalds 已提交
972 973
		break;
	case DIE_GPF:
974 975 976 977 978 979
		/*
		 * To be potentially processing a kprobe fault and to
		 * trust the result from kprobe_running(), we have
		 * be non-preemptible.
		 */
		if (!preemptible() && kprobe_running() &&
L
Linus Torvalds 已提交
980
		    kprobe_fault_handler(args->regs, args->trapnr))
981
			ret = NOTIFY_STOP;
L
Linus Torvalds 已提交
982 983 984 985
		break;
	default:
		break;
	}
986
	return ret;
L
Linus Torvalds 已提交
987 988
}

989
int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
L
Linus Torvalds 已提交
990 991 992
{
	struct jprobe *jp = container_of(p, struct jprobe, kp);
	unsigned long addr;
993
	struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
L
Linus Torvalds 已提交
994

995
	kcb->jprobe_saved_regs = *regs;
996 997 998
	kcb->jprobe_saved_sp = stack_addr(regs);
	addr = (unsigned long)(kcb->jprobe_saved_sp);

L
Linus Torvalds 已提交
999 1000 1001 1002 1003 1004 1005
	/*
	 * As Linus pointed out, gcc assumes that the callee
	 * owns the argument space and could overwrite it, e.g.
	 * tailcall optimization. So, to be absolutely safe
	 * we also save and restore enough stack bytes to cover
	 * the argument area.
	 */
1006
	memcpy(kcb->jprobes_stack, (kprobe_opcode_t *)addr,
1007
	       MIN_STACK_SIZE(addr));
1008
	regs->flags &= ~X86_EFLAGS_IF;
1009
	trace_hardirqs_off();
1010
	regs->ip = (unsigned long)(jp->entry);
L
Linus Torvalds 已提交
1011 1012 1013
	return 1;
}

1014
void __kprobes jprobe_return(void)
L
Linus Torvalds 已提交
1015
{
1016 1017
	struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();

1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028
	asm volatile (
#ifdef CONFIG_X86_64
			"       xchg   %%rbx,%%rsp	\n"
#else
			"       xchgl   %%ebx,%%esp	\n"
#endif
			"       int3			\n"
			"       .globl jprobe_return_end\n"
			"       jprobe_return_end:	\n"
			"       nop			\n"::"b"
			(kcb->jprobe_saved_sp):"memory");
L
Linus Torvalds 已提交
1029 1030
}

1031
int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
L
Linus Torvalds 已提交
1032
{
1033
	struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
1034
	u8 *addr = (u8 *) (regs->ip - 1);
L
Linus Torvalds 已提交
1035 1036
	struct jprobe *jp = container_of(p, struct jprobe, kp);

1037 1038
	if ((addr > (u8 *) jprobe_return) &&
	    (addr < (u8 *) jprobe_return_end)) {
1039
		if (stack_addr(regs) != kcb->jprobe_saved_sp) {
M
Masami Hiramatsu 已提交
1040
			struct pt_regs *saved_regs = &kcb->jprobe_saved_regs;
1041 1042
			printk(KERN_ERR
			       "current sp %p does not match saved sp %p\n",
1043
			       stack_addr(regs), kcb->jprobe_saved_sp);
1044
			printk(KERN_ERR "Saved registers for jprobe %p\n", jp);
L
Linus Torvalds 已提交
1045
			show_registers(saved_regs);
1046
			printk(KERN_ERR "Current registers\n");
L
Linus Torvalds 已提交
1047 1048 1049
			show_registers(regs);
			BUG();
		}
1050
		*regs = kcb->jprobe_saved_regs;
1051 1052 1053
		memcpy((kprobe_opcode_t *)(kcb->jprobe_saved_sp),
		       kcb->jprobes_stack,
		       MIN_STACK_SIZE(kcb->jprobe_saved_sp));
1054
		preempt_enable_no_resched();
L
Linus Torvalds 已提交
1055 1056 1057 1058
		return 1;
	}
	return 0;
}
1059

1060
int __init arch_init_kprobes(void)
1061
{
1062
	return 0;
1063
}
1064 1065 1066 1067 1068

int __kprobes arch_trampoline_kprobe(struct kprobe *p)
{
	return 0;
}