GNU Linux-libre 4.19.245-gnu1
[releases.git] / arch / x86 / kernel / uprobes.c
1 /*
2  * User-space Probes (UProbes) for x86
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17  *
18  * Copyright (C) IBM Corporation, 2008-2011
19  * Authors:
20  *      Srikar Dronamraju
21  *      Jim Keniston
22  */
23 #include <linux/kernel.h>
24 #include <linux/sched.h>
25 #include <linux/ptrace.h>
26 #include <linux/uprobes.h>
27 #include <linux/uaccess.h>
28
29 #include <linux/kdebug.h>
30 #include <asm/processor.h>
31 #include <asm/insn.h>
32 #include <asm/mmu_context.h>
33
34 /* Post-execution fixups. */
35
36 /* Adjust IP back to vicinity of actual insn */
37 #define UPROBE_FIX_IP           0x01
38
39 /* Adjust the return address of a call insn */
40 #define UPROBE_FIX_CALL         0x02
41
42 /* Instruction will modify TF, don't change it */
43 #define UPROBE_FIX_SETF         0x04
44
45 #define UPROBE_FIX_RIP_SI       0x08
46 #define UPROBE_FIX_RIP_DI       0x10
47 #define UPROBE_FIX_RIP_BX       0x20
48 #define UPROBE_FIX_RIP_MASK     \
49         (UPROBE_FIX_RIP_SI | UPROBE_FIX_RIP_DI | UPROBE_FIX_RIP_BX)
50
51 #define UPROBE_TRAP_NR          UINT_MAX
52
53 /* Adaptations for mhiramat x86 decoder v14. */
54 #define OPCODE1(insn)           ((insn)->opcode.bytes[0])
55 #define OPCODE2(insn)           ((insn)->opcode.bytes[1])
56 #define OPCODE3(insn)           ((insn)->opcode.bytes[2])
57 #define MODRM_REG(insn)         X86_MODRM_REG((insn)->modrm.value)
58
59 #define W(row, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf)\
60         (((b0##UL << 0x0)|(b1##UL << 0x1)|(b2##UL << 0x2)|(b3##UL << 0x3) |   \
61           (b4##UL << 0x4)|(b5##UL << 0x5)|(b6##UL << 0x6)|(b7##UL << 0x7) |   \
62           (b8##UL << 0x8)|(b9##UL << 0x9)|(ba##UL << 0xa)|(bb##UL << 0xb) |   \
63           (bc##UL << 0xc)|(bd##UL << 0xd)|(be##UL << 0xe)|(bf##UL << 0xf))    \
64          << (row % 32))
65
66 /*
67  * Good-instruction tables for 32-bit apps.  This is non-const and volatile
68  * to keep gcc from statically optimizing it out, as variable_test_bit makes
69  * some versions of gcc to think only *(unsigned long*) is used.
70  *
71  * Opcodes we'll probably never support:
72  * 6c-6f - ins,outs. SEGVs if used in userspace
73  * e4-e7 - in,out imm. SEGVs if used in userspace
74  * ec-ef - in,out acc. SEGVs if used in userspace
75  * cc - int3. SIGTRAP if used in userspace
76  * ce - into. Not used in userspace - no kernel support to make it useful. SEGVs
77  *      (why we support bound (62) then? it's similar, and similarly unused...)
78  * f1 - int1. SIGTRAP if used in userspace
79  * f4 - hlt. SEGVs if used in userspace
80  * fa - cli. SEGVs if used in userspace
81  * fb - sti. SEGVs if used in userspace
82  *
83  * Opcodes which need some work to be supported:
84  * 07,17,1f - pop es/ss/ds
85  *      Normally not used in userspace, but would execute if used.
86  *      Can cause GP or stack exception if tries to load wrong segment descriptor.
87  *      We hesitate to run them under single step since kernel's handling
88  *      of userspace single-stepping (TF flag) is fragile.
89  *      We can easily refuse to support push es/cs/ss/ds (06/0e/16/1e)
90  *      on the same grounds that they are never used.
91  * cd - int N.
92  *      Used by userspace for "int 80" syscall entry. (Other "int N"
93  *      cause GP -> SEGV since their IDT gates don't allow calls from CPL 3).
94  *      Not supported since kernel's handling of userspace single-stepping
95  *      (TF flag) is fragile.
96  * cf - iret. Normally not used in userspace. Doesn't SEGV unless arguments are bad
97  */
98 #if defined(CONFIG_X86_32) || defined(CONFIG_IA32_EMULATION)
99 static volatile u32 good_insns_32[256 / 32] = {
100         /*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f         */
101         /*      ----------------------------------------------         */
102         W(0x00, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1) | /* 00 */
103         W(0x10, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0) , /* 10 */
104         W(0x20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 20 */
105         W(0x30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* 30 */
106         W(0x40, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 40 */
107         W(0x50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* 50 */
108         W(0x60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0) | /* 60 */
109         W(0x70, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* 70 */
110         W(0x80, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 80 */
111         W(0x90, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* 90 */
112         W(0xa0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* a0 */
113         W(0xb0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* b0 */
114         W(0xc0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0) | /* c0 */
115         W(0xd0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* d0 */
116         W(0xe0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0) | /* e0 */
117         W(0xf0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1)   /* f0 */
118         /*      ----------------------------------------------         */
119         /*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f         */
120 };
121 #else
122 #define good_insns_32   NULL
123 #endif
124
125 /* Good-instruction tables for 64-bit apps.
126  *
127  * Genuinely invalid opcodes:
128  * 06,07 - formerly push/pop es
129  * 0e - formerly push cs
130  * 16,17 - formerly push/pop ss
131  * 1e,1f - formerly push/pop ds
132  * 27,2f,37,3f - formerly daa/das/aaa/aas
133  * 60,61 - formerly pusha/popa
134  * 62 - formerly bound. EVEX prefix for AVX512 (not yet supported)
135  * 82 - formerly redundant encoding of Group1
136  * 9a - formerly call seg:ofs
137  * ce - formerly into
138  * d4,d5 - formerly aam/aad
139  * d6 - formerly undocumented salc
140  * ea - formerly jmp seg:ofs
141  *
142  * Opcodes we'll probably never support:
143  * 6c-6f - ins,outs. SEGVs if used in userspace
144  * e4-e7 - in,out imm. SEGVs if used in userspace
145  * ec-ef - in,out acc. SEGVs if used in userspace
146  * cc - int3. SIGTRAP if used in userspace
147  * f1 - int1. SIGTRAP if used in userspace
148  * f4 - hlt. SEGVs if used in userspace
149  * fa - cli. SEGVs if used in userspace
150  * fb - sti. SEGVs if used in userspace
151  *
152  * Opcodes which need some work to be supported:
153  * cd - int N.
154  *      Used by userspace for "int 80" syscall entry. (Other "int N"
155  *      cause GP -> SEGV since their IDT gates don't allow calls from CPL 3).
156  *      Not supported since kernel's handling of userspace single-stepping
157  *      (TF flag) is fragile.
158  * cf - iret. Normally not used in userspace. Doesn't SEGV unless arguments are bad
159  */
160 #if defined(CONFIG_X86_64)
161 static volatile u32 good_insns_64[256 / 32] = {
162         /*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f         */
163         /*      ----------------------------------------------         */
164         W(0x00, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1) | /* 00 */
165         W(0x10, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0) , /* 10 */
166         W(0x20, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0) | /* 20 */
167         W(0x30, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0) , /* 30 */
168         W(0x40, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 40 */
169         W(0x50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* 50 */
170         W(0x60, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0) | /* 60 */
171         W(0x70, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* 70 */
172         W(0x80, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 80 */
173         W(0x90, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1) , /* 90 */
174         W(0xa0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* a0 */
175         W(0xb0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* b0 */
176         W(0xc0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0) | /* c0 */
177         W(0xd0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* d0 */
178         W(0xe0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0) | /* e0 */
179         W(0xf0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1)   /* f0 */
180         /*      ----------------------------------------------         */
181         /*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f         */
182 };
183 #else
184 #define good_insns_64   NULL
185 #endif
186
187 /* Using this for both 64-bit and 32-bit apps.
188  * Opcodes we don't support:
189  * 0f 00 - SLDT/STR/LLDT/LTR/VERR/VERW/-/- group. System insns
190  * 0f 01 - SGDT/SIDT/LGDT/LIDT/SMSW/-/LMSW/INVLPG group.
191  *      Also encodes tons of other system insns if mod=11.
192  *      Some are in fact non-system: xend, xtest, rdtscp, maybe more
193  * 0f 05 - syscall
194  * 0f 06 - clts (CPL0 insn)
195  * 0f 07 - sysret
196  * 0f 08 - invd (CPL0 insn)
197  * 0f 09 - wbinvd (CPL0 insn)
198  * 0f 0b - ud2
199  * 0f 30 - wrmsr (CPL0 insn) (then why rdmsr is allowed, it's also CPL0 insn?)
200  * 0f 34 - sysenter
201  * 0f 35 - sysexit
202  * 0f 37 - getsec
203  * 0f 78 - vmread (Intel VMX. CPL0 insn)
204  * 0f 79 - vmwrite (Intel VMX. CPL0 insn)
205  *      Note: with prefixes, these two opcodes are
206  *      extrq/insertq/AVX512 convert vector ops.
207  * 0f ae - group15: [f]xsave,[f]xrstor,[v]{ld,st}mxcsr,clflush[opt],
208  *      {rd,wr}{fs,gs}base,{s,l,m}fence.
209  *      Why? They are all user-executable.
210  */
211 static volatile u32 good_2byte_insns[256 / 32] = {
212         /*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f         */
213         /*      ----------------------------------------------         */
214         W(0x00, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1) | /* 00 */
215         W(0x10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* 10 */
216         W(0x20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 20 */
217         W(0x30, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1) , /* 30 */
218         W(0x40, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 40 */
219         W(0x50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* 50 */
220         W(0x60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 60 */
221         W(0x70, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1) , /* 70 */
222         W(0x80, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* 80 */
223         W(0x90, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* 90 */
224         W(0xa0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1) | /* a0 */
225         W(0xb0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* b0 */
226         W(0xc0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* c0 */
227         W(0xd0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) , /* d0 */
228         W(0xe0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) | /* e0 */
229         W(0xf0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)   /* f0 */
230         /*      ----------------------------------------------         */
231         /*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f         */
232 };
233 #undef W
234
235 /*
236  * opcodes we may need to refine support for:
237  *
238  *  0f - 2-byte instructions: For many of these instructions, the validity
239  *  depends on the prefix and/or the reg field.  On such instructions, we
240  *  just consider the opcode combination valid if it corresponds to any
241  *  valid instruction.
242  *
243  *  8f - Group 1 - only reg = 0 is OK
244  *  c6-c7 - Group 11 - only reg = 0 is OK
245  *  d9-df - fpu insns with some illegal encodings
246  *  f2, f3 - repnz, repz prefixes.  These are also the first byte for
247  *  certain floating-point instructions, such as addsd.
248  *
249  *  fe - Group 4 - only reg = 0 or 1 is OK
250  *  ff - Group 5 - only reg = 0-6 is OK
251  *
252  * others -- Do we need to support these?
253  *
254  *  0f - (floating-point?) prefetch instructions
255  *  07, 17, 1f - pop es, pop ss, pop ds
256  *  26, 2e, 36, 3e - es:, cs:, ss:, ds: segment prefixes --
257  *      but 64 and 65 (fs: and gs:) seem to be used, so we support them
258  *  67 - addr16 prefix
259  *  ce - into
260  *  f0 - lock prefix
261  */
262
263 /*
264  * TODO:
265  * - Where necessary, examine the modrm byte and allow only valid instructions
266  * in the different Groups and fpu instructions.
267  */
268
269 static bool is_prefix_bad(struct insn *insn)
270 {
271         insn_byte_t p;
272         int i;
273
274         for_each_insn_prefix(insn, i, p) {
275                 insn_attr_t attr;
276
277                 attr = inat_get_opcode_attribute(p);
278                 switch (attr) {
279                 case INAT_MAKE_PREFIX(INAT_PFX_ES):
280                 case INAT_MAKE_PREFIX(INAT_PFX_CS):
281                 case INAT_MAKE_PREFIX(INAT_PFX_DS):
282                 case INAT_MAKE_PREFIX(INAT_PFX_SS):
283                 case INAT_MAKE_PREFIX(INAT_PFX_LOCK):
284                         return true;
285                 }
286         }
287         return false;
288 }
289
290 static int uprobe_init_insn(struct arch_uprobe *auprobe, struct insn *insn, bool x86_64)
291 {
292         u32 volatile *good_insns;
293
294         insn_init(insn, auprobe->insn, sizeof(auprobe->insn), x86_64);
295         /* has the side-effect of processing the entire instruction */
296         insn_get_length(insn);
297         if (!insn_complete(insn))
298                 return -ENOEXEC;
299
300         if (is_prefix_bad(insn))
301                 return -ENOTSUPP;
302
303         /* We should not singlestep on the exception masking instructions */
304         if (insn_masking_exception(insn))
305                 return -ENOTSUPP;
306
307         if (x86_64)
308                 good_insns = good_insns_64;
309         else
310                 good_insns = good_insns_32;
311
312         if (test_bit(OPCODE1(insn), (unsigned long *)good_insns))
313                 return 0;
314
315         if (insn->opcode.nbytes == 2) {
316                 if (test_bit(OPCODE2(insn), (unsigned long *)good_2byte_insns))
317                         return 0;
318         }
319
320         return -ENOTSUPP;
321 }
322
323 #ifdef CONFIG_X86_64
324 /*
325  * If arch_uprobe->insn doesn't use rip-relative addressing, return
326  * immediately.  Otherwise, rewrite the instruction so that it accesses
327  * its memory operand indirectly through a scratch register.  Set
328  * defparam->fixups accordingly. (The contents of the scratch register
329  * will be saved before we single-step the modified instruction,
330  * and restored afterward).
331  *
332  * We do this because a rip-relative instruction can access only a
333  * relatively small area (+/- 2 GB from the instruction), and the XOL
334  * area typically lies beyond that area.  At least for instructions
335  * that store to memory, we can't execute the original instruction
336  * and "fix things up" later, because the misdirected store could be
337  * disastrous.
338  *
339  * Some useful facts about rip-relative instructions:
340  *
341  *  - There's always a modrm byte with bit layout "00 reg 101".
342  *  - There's never a SIB byte.
343  *  - The displacement is always 4 bytes.
344  *  - REX.B=1 bit in REX prefix, which normally extends r/m field,
345  *    has no effect on rip-relative mode. It doesn't make modrm byte
346  *    with r/m=101 refer to register 1101 = R13.
347  */
348 static void riprel_analyze(struct arch_uprobe *auprobe, struct insn *insn)
349 {
350         u8 *cursor;
351         u8 reg;
352         u8 reg2;
353
354         if (!insn_rip_relative(insn))
355                 return;
356
357         /*
358          * insn_rip_relative() would have decoded rex_prefix, vex_prefix, modrm.
359          * Clear REX.b bit (extension of MODRM.rm field):
360          * we want to encode low numbered reg, not r8+.
361          */
362         if (insn->rex_prefix.nbytes) {
363                 cursor = auprobe->insn + insn_offset_rex_prefix(insn);
364                 /* REX byte has 0100wrxb layout, clearing REX.b bit */
365                 *cursor &= 0xfe;
366         }
367         /*
368          * Similar treatment for VEX3/EVEX prefix.
369          * TODO: add XOP treatment when insn decoder supports them
370          */
371         if (insn->vex_prefix.nbytes >= 3) {
372                 /*
373                  * vex2:     c5    rvvvvLpp   (has no b bit)
374                  * vex3/xop: c4/8f rxbmmmmm wvvvvLpp
375                  * evex:     62    rxbR00mm wvvvv1pp zllBVaaa
376                  * Setting VEX3.b (setting because it has inverted meaning).
377                  * Setting EVEX.x since (in non-SIB encoding) EVEX.x
378                  * is the 4th bit of MODRM.rm, and needs the same treatment.
379                  * For VEX3-encoded insns, VEX3.x value has no effect in
380                  * non-SIB encoding, the change is superfluous but harmless.
381                  */
382                 cursor = auprobe->insn + insn_offset_vex_prefix(insn) + 1;
383                 *cursor |= 0x60;
384         }
385
386         /*
387          * Convert from rip-relative addressing to register-relative addressing
388          * via a scratch register.
389          *
390          * This is tricky since there are insns with modrm byte
391          * which also use registers not encoded in modrm byte:
392          * [i]div/[i]mul: implicitly use dx:ax
393          * shift ops: implicitly use cx
394          * cmpxchg: implicitly uses ax
395          * cmpxchg8/16b: implicitly uses dx:ax and bx:cx
396          *   Encoding: 0f c7/1 modrm
397          *   The code below thinks that reg=1 (cx), chooses si as scratch.
398          * mulx: implicitly uses dx: mulx r/m,r1,r2 does r1:r2 = dx * r/m.
399          *   First appeared in Haswell (BMI2 insn). It is vex-encoded.
400          *   Example where none of bx,cx,dx can be used as scratch reg:
401          *   c4 e2 63 f6 0d disp32   mulx disp32(%rip),%ebx,%ecx
402          * [v]pcmpistri: implicitly uses cx, xmm0
403          * [v]pcmpistrm: implicitly uses xmm0
404          * [v]pcmpestri: implicitly uses ax, dx, cx, xmm0
405          * [v]pcmpestrm: implicitly uses ax, dx, xmm0
406          *   Evil SSE4.2 string comparison ops from hell.
407          * maskmovq/[v]maskmovdqu: implicitly uses (ds:rdi) as destination.
408          *   Encoding: 0f f7 modrm, 66 0f f7 modrm, vex-encoded: c5 f9 f7 modrm.
409          *   Store op1, byte-masked by op2 msb's in each byte, to (ds:rdi).
410          *   AMD says it has no 3-operand form (vex.vvvv must be 1111)
411          *   and that it can have only register operands, not mem
412          *   (its modrm byte must have mode=11).
413          *   If these restrictions will ever be lifted,
414          *   we'll need code to prevent selection of di as scratch reg!
415          *
416          * Summary: I don't know any insns with modrm byte which
417          * use SI register implicitly. DI register is used only
418          * by one insn (maskmovq) and BX register is used
419          * only by one too (cmpxchg8b).
420          * BP is stack-segment based (may be a problem?).
421          * AX, DX, CX are off-limits (many implicit users).
422          * SP is unusable (it's stack pointer - think about "pop mem";
423          * also, rsp+disp32 needs sib encoding -> insn length change).
424          */
425
426         reg = MODRM_REG(insn);  /* Fetch modrm.reg */
427         reg2 = 0xff;            /* Fetch vex.vvvv */
428         if (insn->vex_prefix.nbytes)
429                 reg2 = insn->vex_prefix.bytes[2];
430         /*
431          * TODO: add XOP vvvv reading.
432          *
433          * vex.vvvv field is in bits 6-3, bits are inverted.
434          * But in 32-bit mode, high-order bit may be ignored.
435          * Therefore, let's consider only 3 low-order bits.
436          */
437         reg2 = ((reg2 >> 3) & 0x7) ^ 0x7;
438         /*
439          * Register numbering is ax,cx,dx,bx, sp,bp,si,di, r8..r15.
440          *
441          * Choose scratch reg. Order is important: must not select bx
442          * if we can use si (cmpxchg8b case!)
443          */
444         if (reg != 6 && reg2 != 6) {
445                 reg2 = 6;
446                 auprobe->defparam.fixups |= UPROBE_FIX_RIP_SI;
447         } else if (reg != 7 && reg2 != 7) {
448                 reg2 = 7;
449                 auprobe->defparam.fixups |= UPROBE_FIX_RIP_DI;
450                 /* TODO (paranoia): force maskmovq to not use di */
451         } else {
452                 reg2 = 3;
453                 auprobe->defparam.fixups |= UPROBE_FIX_RIP_BX;
454         }
455         /*
456          * Point cursor at the modrm byte.  The next 4 bytes are the
457          * displacement.  Beyond the displacement, for some instructions,
458          * is the immediate operand.
459          */
460         cursor = auprobe->insn + insn_offset_modrm(insn);
461         /*
462          * Change modrm from "00 reg 101" to "10 reg reg2". Example:
463          * 89 05 disp32  mov %eax,disp32(%rip) becomes
464          * 89 86 disp32  mov %eax,disp32(%rsi)
465          */
466         *cursor = 0x80 | (reg << 3) | reg2;
467 }
468
469 static inline unsigned long *
470 scratch_reg(struct arch_uprobe *auprobe, struct pt_regs *regs)
471 {
472         if (auprobe->defparam.fixups & UPROBE_FIX_RIP_SI)
473                 return &regs->si;
474         if (auprobe->defparam.fixups & UPROBE_FIX_RIP_DI)
475                 return &regs->di;
476         return &regs->bx;
477 }
478
479 /*
480  * If we're emulating a rip-relative instruction, save the contents
481  * of the scratch register and store the target address in that register.
482  */
483 static void riprel_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
484 {
485         if (auprobe->defparam.fixups & UPROBE_FIX_RIP_MASK) {
486                 struct uprobe_task *utask = current->utask;
487                 unsigned long *sr = scratch_reg(auprobe, regs);
488
489                 utask->autask.saved_scratch_register = *sr;
490                 *sr = utask->vaddr + auprobe->defparam.ilen;
491         }
492 }
493
494 static void riprel_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
495 {
496         if (auprobe->defparam.fixups & UPROBE_FIX_RIP_MASK) {
497                 struct uprobe_task *utask = current->utask;
498                 unsigned long *sr = scratch_reg(auprobe, regs);
499
500                 *sr = utask->autask.saved_scratch_register;
501         }
502 }
503 #else /* 32-bit: */
504 /*
505  * No RIP-relative addressing on 32-bit
506  */
507 static void riprel_analyze(struct arch_uprobe *auprobe, struct insn *insn)
508 {
509 }
510 static void riprel_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
511 {
512 }
513 static void riprel_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
514 {
515 }
516 #endif /* CONFIG_X86_64 */
517
518 struct uprobe_xol_ops {
519         bool    (*emulate)(struct arch_uprobe *, struct pt_regs *);
520         int     (*pre_xol)(struct arch_uprobe *, struct pt_regs *);
521         int     (*post_xol)(struct arch_uprobe *, struct pt_regs *);
522         void    (*abort)(struct arch_uprobe *, struct pt_regs *);
523 };
524
525 static inline int sizeof_long(struct pt_regs *regs)
526 {
527         /*
528          * Check registers for mode as in_xxx_syscall() does not apply here.
529          */
530         return user_64bit_mode(regs) ? 8 : 4;
531 }
532
533 static int default_pre_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs)
534 {
535         riprel_pre_xol(auprobe, regs);
536         return 0;
537 }
538
539 static int emulate_push_stack(struct pt_regs *regs, unsigned long val)
540 {
541         unsigned long new_sp = regs->sp - sizeof_long(regs);
542
543         if (copy_to_user((void __user *)new_sp, &val, sizeof_long(regs)))
544                 return -EFAULT;
545
546         regs->sp = new_sp;
547         return 0;
548 }
549
550 /*
551  * We have to fix things up as follows:
552  *
553  * Typically, the new ip is relative to the copied instruction.  We need
554  * to make it relative to the original instruction (FIX_IP).  Exceptions
555  * are return instructions and absolute or indirect jump or call instructions.
556  *
557  * If the single-stepped instruction was a call, the return address that
558  * is atop the stack is the address following the copied instruction.  We
559  * need to make it the address following the original instruction (FIX_CALL).
560  *
561  * If the original instruction was a rip-relative instruction such as
562  * "movl %edx,0xnnnn(%rip)", we have instead executed an equivalent
563  * instruction using a scratch register -- e.g., "movl %edx,0xnnnn(%rsi)".
564  * We need to restore the contents of the scratch register
565  * (FIX_RIP_reg).
566  */
567 static int default_post_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs)
568 {
569         struct uprobe_task *utask = current->utask;
570
571         riprel_post_xol(auprobe, regs);
572         if (auprobe->defparam.fixups & UPROBE_FIX_IP) {
573                 long correction = utask->vaddr - utask->xol_vaddr;
574                 regs->ip += correction;
575         } else if (auprobe->defparam.fixups & UPROBE_FIX_CALL) {
576                 regs->sp += sizeof_long(regs); /* Pop incorrect return address */
577                 if (emulate_push_stack(regs, utask->vaddr + auprobe->defparam.ilen))
578                         return -ERESTART;
579         }
580         /* popf; tell the caller to not touch TF */
581         if (auprobe->defparam.fixups & UPROBE_FIX_SETF)
582                 utask->autask.saved_tf = true;
583
584         return 0;
585 }
586
587 static void default_abort_op(struct arch_uprobe *auprobe, struct pt_regs *regs)
588 {
589         riprel_post_xol(auprobe, regs);
590 }
591
592 static const struct uprobe_xol_ops default_xol_ops = {
593         .pre_xol  = default_pre_xol_op,
594         .post_xol = default_post_xol_op,
595         .abort    = default_abort_op,
596 };
597
598 static bool branch_is_call(struct arch_uprobe *auprobe)
599 {
600         return auprobe->branch.opc1 == 0xe8;
601 }
602
603 #define CASE_COND                                       \
604         COND(70, 71, XF(OF))                            \
605         COND(72, 73, XF(CF))                            \
606         COND(74, 75, XF(ZF))                            \
607         COND(78, 79, XF(SF))                            \
608         COND(7a, 7b, XF(PF))                            \
609         COND(76, 77, XF(CF) || XF(ZF))                  \
610         COND(7c, 7d, XF(SF) != XF(OF))                  \
611         COND(7e, 7f, XF(ZF) || XF(SF) != XF(OF))
612
613 #define COND(op_y, op_n, expr)                          \
614         case 0x ## op_y: DO((expr) != 0)                \
615         case 0x ## op_n: DO((expr) == 0)
616
617 #define XF(xf)  (!!(flags & X86_EFLAGS_ ## xf))
618
619 static bool is_cond_jmp_opcode(u8 opcode)
620 {
621         switch (opcode) {
622         #define DO(expr)        \
623                 return true;
624         CASE_COND
625         #undef  DO
626
627         default:
628                 return false;
629         }
630 }
631
632 static bool check_jmp_cond(struct arch_uprobe *auprobe, struct pt_regs *regs)
633 {
634         unsigned long flags = regs->flags;
635
636         switch (auprobe->branch.opc1) {
637         #define DO(expr)        \
638                 return expr;
639         CASE_COND
640         #undef  DO
641
642         default:        /* not a conditional jmp */
643                 return true;
644         }
645 }
646
647 #undef  XF
648 #undef  COND
649 #undef  CASE_COND
650
651 static bool branch_emulate_op(struct arch_uprobe *auprobe, struct pt_regs *regs)
652 {
653         unsigned long new_ip = regs->ip += auprobe->branch.ilen;
654         unsigned long offs = (long)auprobe->branch.offs;
655
656         if (branch_is_call(auprobe)) {
657                 /*
658                  * If it fails we execute this (mangled, see the comment in
659                  * branch_clear_offset) insn out-of-line. In the likely case
660                  * this should trigger the trap, and the probed application
661                  * should die or restart the same insn after it handles the
662                  * signal, arch_uprobe_post_xol() won't be even called.
663                  *
664                  * But there is corner case, see the comment in ->post_xol().
665                  */
666                 if (emulate_push_stack(regs, new_ip))
667                         return false;
668         } else if (!check_jmp_cond(auprobe, regs)) {
669                 offs = 0;
670         }
671
672         regs->ip = new_ip + offs;
673         return true;
674 }
675
676 static bool push_emulate_op(struct arch_uprobe *auprobe, struct pt_regs *regs)
677 {
678         unsigned long *src_ptr = (void *)regs + auprobe->push.reg_offset;
679
680         if (emulate_push_stack(regs, *src_ptr))
681                 return false;
682         regs->ip += auprobe->push.ilen;
683         return true;
684 }
685
686 static int branch_post_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs)
687 {
688         BUG_ON(!branch_is_call(auprobe));
689         /*
690          * We can only get here if branch_emulate_op() failed to push the ret
691          * address _and_ another thread expanded our stack before the (mangled)
692          * "call" insn was executed out-of-line. Just restore ->sp and restart.
693          * We could also restore ->ip and try to call branch_emulate_op() again.
694          */
695         regs->sp += sizeof_long(regs);
696         return -ERESTART;
697 }
698
699 static void branch_clear_offset(struct arch_uprobe *auprobe, struct insn *insn)
700 {
701         /*
702          * Turn this insn into "call 1f; 1:", this is what we will execute
703          * out-of-line if ->emulate() fails. We only need this to generate
704          * a trap, so that the probed task receives the correct signal with
705          * the properly filled siginfo.
706          *
707          * But see the comment in ->post_xol(), in the unlikely case it can
708          * succeed. So we need to ensure that the new ->ip can not fall into
709          * the non-canonical area and trigger #GP.
710          *
711          * We could turn it into (say) "pushf", but then we would need to
712          * divorce ->insn[] and ->ixol[]. We need to preserve the 1st byte
713          * of ->insn[] for set_orig_insn().
714          */
715         memset(auprobe->insn + insn_offset_immediate(insn),
716                 0, insn->immediate.nbytes);
717 }
718
719 static const struct uprobe_xol_ops branch_xol_ops = {
720         .emulate  = branch_emulate_op,
721         .post_xol = branch_post_xol_op,
722 };
723
724 static const struct uprobe_xol_ops push_xol_ops = {
725         .emulate  = push_emulate_op,
726 };
727
728 /* Returns -ENOSYS if branch_xol_ops doesn't handle this insn */
729 static int branch_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn)
730 {
731         u8 opc1 = OPCODE1(insn);
732         insn_byte_t p;
733         int i;
734
735         switch (opc1) {
736         case 0xeb:      /* jmp 8 */
737         case 0xe9:      /* jmp 32 */
738         case 0x90:      /* prefix* + nop; same as jmp with .offs = 0 */
739                 break;
740
741         case 0xe8:      /* call relative */
742                 branch_clear_offset(auprobe, insn);
743                 break;
744
745         case 0x0f:
746                 if (insn->opcode.nbytes != 2)
747                         return -ENOSYS;
748                 /*
749                  * If it is a "near" conditional jmp, OPCODE2() - 0x10 matches
750                  * OPCODE1() of the "short" jmp which checks the same condition.
751                  */
752                 opc1 = OPCODE2(insn) - 0x10;
753         default:
754                 if (!is_cond_jmp_opcode(opc1))
755                         return -ENOSYS;
756         }
757
758         /*
759          * 16-bit overrides such as CALLW (66 e8 nn nn) are not supported.
760          * Intel and AMD behavior differ in 64-bit mode: Intel ignores 66 prefix.
761          * No one uses these insns, reject any branch insns with such prefix.
762          */
763         for_each_insn_prefix(insn, i, p) {
764                 if (p == 0x66)
765                         return -ENOTSUPP;
766         }
767
768         auprobe->branch.opc1 = opc1;
769         auprobe->branch.ilen = insn->length;
770         auprobe->branch.offs = insn->immediate.value;
771
772         auprobe->ops = &branch_xol_ops;
773         return 0;
774 }
775
776 /* Returns -ENOSYS if push_xol_ops doesn't handle this insn */
777 static int push_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn)
778 {
779         u8 opc1 = OPCODE1(insn), reg_offset = 0;
780
781         if (opc1 < 0x50 || opc1 > 0x57)
782                 return -ENOSYS;
783
784         if (insn->length > 2)
785                 return -ENOSYS;
786         if (insn->length == 2) {
787                 /* only support rex_prefix 0x41 (x64 only) */
788 #ifdef CONFIG_X86_64
789                 if (insn->rex_prefix.nbytes != 1 ||
790                     insn->rex_prefix.bytes[0] != 0x41)
791                         return -ENOSYS;
792
793                 switch (opc1) {
794                 case 0x50:
795                         reg_offset = offsetof(struct pt_regs, r8);
796                         break;
797                 case 0x51:
798                         reg_offset = offsetof(struct pt_regs, r9);
799                         break;
800                 case 0x52:
801                         reg_offset = offsetof(struct pt_regs, r10);
802                         break;
803                 case 0x53:
804                         reg_offset = offsetof(struct pt_regs, r11);
805                         break;
806                 case 0x54:
807                         reg_offset = offsetof(struct pt_regs, r12);
808                         break;
809                 case 0x55:
810                         reg_offset = offsetof(struct pt_regs, r13);
811                         break;
812                 case 0x56:
813                         reg_offset = offsetof(struct pt_regs, r14);
814                         break;
815                 case 0x57:
816                         reg_offset = offsetof(struct pt_regs, r15);
817                         break;
818                 }
819 #else
820                 return -ENOSYS;
821 #endif
822         } else {
823                 switch (opc1) {
824                 case 0x50:
825                         reg_offset = offsetof(struct pt_regs, ax);
826                         break;
827                 case 0x51:
828                         reg_offset = offsetof(struct pt_regs, cx);
829                         break;
830                 case 0x52:
831                         reg_offset = offsetof(struct pt_regs, dx);
832                         break;
833                 case 0x53:
834                         reg_offset = offsetof(struct pt_regs, bx);
835                         break;
836                 case 0x54:
837                         reg_offset = offsetof(struct pt_regs, sp);
838                         break;
839                 case 0x55:
840                         reg_offset = offsetof(struct pt_regs, bp);
841                         break;
842                 case 0x56:
843                         reg_offset = offsetof(struct pt_regs, si);
844                         break;
845                 case 0x57:
846                         reg_offset = offsetof(struct pt_regs, di);
847                         break;
848                 }
849         }
850
851         auprobe->push.reg_offset = reg_offset;
852         auprobe->push.ilen = insn->length;
853         auprobe->ops = &push_xol_ops;
854         return 0;
855 }
856
857 /**
858  * arch_uprobe_analyze_insn - instruction analysis including validity and fixups.
859  * @mm: the probed address space.
860  * @arch_uprobe: the probepoint information.
861  * @addr: virtual address at which to install the probepoint
862  * Return 0 on success or a -ve number on error.
863  */
864 int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long addr)
865 {
866         struct insn insn;
867         u8 fix_ip_or_call = UPROBE_FIX_IP;
868         int ret;
869
870         ret = uprobe_init_insn(auprobe, &insn, is_64bit_mm(mm));
871         if (ret)
872                 return ret;
873
874         ret = branch_setup_xol_ops(auprobe, &insn);
875         if (ret != -ENOSYS)
876                 return ret;
877
878         ret = push_setup_xol_ops(auprobe, &insn);
879         if (ret != -ENOSYS)
880                 return ret;
881
882         /*
883          * Figure out which fixups default_post_xol_op() will need to perform,
884          * and annotate defparam->fixups accordingly.
885          */
886         switch (OPCODE1(&insn)) {
887         case 0x9d:              /* popf */
888                 auprobe->defparam.fixups |= UPROBE_FIX_SETF;
889                 break;
890         case 0xc3:              /* ret or lret -- ip is correct */
891         case 0xcb:
892         case 0xc2:
893         case 0xca:
894         case 0xea:              /* jmp absolute -- ip is correct */
895                 fix_ip_or_call = 0;
896                 break;
897         case 0x9a:              /* call absolute - Fix return addr, not ip */
898                 fix_ip_or_call = UPROBE_FIX_CALL;
899                 break;
900         case 0xff:
901                 switch (MODRM_REG(&insn)) {
902                 case 2: case 3:                 /* call or lcall, indirect */
903                         fix_ip_or_call = UPROBE_FIX_CALL;
904                         break;
905                 case 4: case 5:                 /* jmp or ljmp, indirect */
906                         fix_ip_or_call = 0;
907                         break;
908                 }
909                 /* fall through */
910         default:
911                 riprel_analyze(auprobe, &insn);
912         }
913
914         auprobe->defparam.ilen = insn.length;
915         auprobe->defparam.fixups |= fix_ip_or_call;
916
917         auprobe->ops = &default_xol_ops;
918         return 0;
919 }
920
921 /*
922  * arch_uprobe_pre_xol - prepare to execute out of line.
923  * @auprobe: the probepoint information.
924  * @regs: reflects the saved user state of current task.
925  */
926 int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
927 {
928         struct uprobe_task *utask = current->utask;
929
930         if (auprobe->ops->pre_xol) {
931                 int err = auprobe->ops->pre_xol(auprobe, regs);
932                 if (err)
933                         return err;
934         }
935
936         regs->ip = utask->xol_vaddr;
937         utask->autask.saved_trap_nr = current->thread.trap_nr;
938         current->thread.trap_nr = UPROBE_TRAP_NR;
939
940         utask->autask.saved_tf = !!(regs->flags & X86_EFLAGS_TF);
941         regs->flags |= X86_EFLAGS_TF;
942         if (test_tsk_thread_flag(current, TIF_BLOCKSTEP))
943                 set_task_blockstep(current, false);
944
945         return 0;
946 }
947
948 /*
949  * If xol insn itself traps and generates a signal(Say,
950  * SIGILL/SIGSEGV/etc), then detect the case where a singlestepped
951  * instruction jumps back to its own address. It is assumed that anything
952  * like do_page_fault/do_trap/etc sets thread.trap_nr != -1.
953  *
954  * arch_uprobe_pre_xol/arch_uprobe_post_xol save/restore thread.trap_nr,
955  * arch_uprobe_xol_was_trapped() simply checks that ->trap_nr is not equal to
956  * UPROBE_TRAP_NR == -1 set by arch_uprobe_pre_xol().
957  */
958 bool arch_uprobe_xol_was_trapped(struct task_struct *t)
959 {
960         if (t->thread.trap_nr != UPROBE_TRAP_NR)
961                 return true;
962
963         return false;
964 }
965
966 /*
967  * Called after single-stepping. To avoid the SMP problems that can
968  * occur when we temporarily put back the original opcode to
969  * single-step, we single-stepped a copy of the instruction.
970  *
971  * This function prepares to resume execution after the single-step.
972  */
973 int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
974 {
975         struct uprobe_task *utask = current->utask;
976         bool send_sigtrap = utask->autask.saved_tf;
977         int err = 0;
978
979         WARN_ON_ONCE(current->thread.trap_nr != UPROBE_TRAP_NR);
980         current->thread.trap_nr = utask->autask.saved_trap_nr;
981
982         if (auprobe->ops->post_xol) {
983                 err = auprobe->ops->post_xol(auprobe, regs);
984                 if (err) {
985                         /*
986                          * Restore ->ip for restart or post mortem analysis.
987                          * ->post_xol() must not return -ERESTART unless this
988                          * is really possible.
989                          */
990                         regs->ip = utask->vaddr;
991                         if (err == -ERESTART)
992                                 err = 0;
993                         send_sigtrap = false;
994                 }
995         }
996         /*
997          * arch_uprobe_pre_xol() doesn't save the state of TIF_BLOCKSTEP
998          * so we can get an extra SIGTRAP if we do not clear TF. We need
999          * to examine the opcode to make it right.
1000          */
1001         if (send_sigtrap)
1002                 send_sig(SIGTRAP, current, 0);
1003
1004         if (!utask->autask.saved_tf)
1005                 regs->flags &= ~X86_EFLAGS_TF;
1006
1007         return err;
1008 }
1009
1010 /* callback routine for handling exceptions. */
1011 int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data)
1012 {
1013         struct die_args *args = data;
1014         struct pt_regs *regs = args->regs;
1015         int ret = NOTIFY_DONE;
1016
1017         /* We are only interested in userspace traps */
1018         if (regs && !user_mode(regs))
1019                 return NOTIFY_DONE;
1020
1021         switch (val) {
1022         case DIE_INT3:
1023                 if (uprobe_pre_sstep_notifier(regs))
1024                         ret = NOTIFY_STOP;
1025
1026                 break;
1027
1028         case DIE_DEBUG:
1029                 if (uprobe_post_sstep_notifier(regs))
1030                         ret = NOTIFY_STOP;
1031
1032         default:
1033                 break;
1034         }
1035
1036         return ret;
1037 }
1038
1039 /*
1040  * This function gets called when XOL instruction either gets trapped or
1041  * the thread has a fatal signal. Reset the instruction pointer to its
1042  * probed address for the potential restart or for post mortem analysis.
1043  */
1044 void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
1045 {
1046         struct uprobe_task *utask = current->utask;
1047
1048         if (auprobe->ops->abort)
1049                 auprobe->ops->abort(auprobe, regs);
1050
1051         current->thread.trap_nr = utask->autask.saved_trap_nr;
1052         regs->ip = utask->vaddr;
1053         /* clear TF if it was set by us in arch_uprobe_pre_xol() */
1054         if (!utask->autask.saved_tf)
1055                 regs->flags &= ~X86_EFLAGS_TF;
1056 }
1057
1058 static bool __skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs)
1059 {
1060         if (auprobe->ops->emulate)
1061                 return auprobe->ops->emulate(auprobe, regs);
1062         return false;
1063 }
1064
1065 bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs)
1066 {
1067         bool ret = __skip_sstep(auprobe, regs);
1068         if (ret && (regs->flags & X86_EFLAGS_TF))
1069                 send_sig(SIGTRAP, current, 0);
1070         return ret;
1071 }
1072
1073 unsigned long
1074 arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs *regs)
1075 {
1076         int rasize = sizeof_long(regs), nleft;
1077         unsigned long orig_ret_vaddr = 0; /* clear high bits for 32-bit apps */
1078
1079         if (copy_from_user(&orig_ret_vaddr, (void __user *)regs->sp, rasize))
1080                 return -1;
1081
1082         /* check whether address has been already hijacked */
1083         if (orig_ret_vaddr == trampoline_vaddr)
1084                 return orig_ret_vaddr;
1085
1086         nleft = copy_to_user((void __user *)regs->sp, &trampoline_vaddr, rasize);
1087         if (likely(!nleft))
1088                 return orig_ret_vaddr;
1089
1090         if (nleft != rasize) {
1091                 pr_err("return address clobbered: pid=%d, %%sp=%#lx, %%ip=%#lx\n",
1092                        current->pid, regs->sp, regs->ip);
1093
1094                 force_sig(SIGSEGV, current);
1095         }
1096
1097         return -1;
1098 }
1099
1100 bool arch_uretprobe_is_alive(struct return_instance *ret, enum rp_check ctx,
1101                                 struct pt_regs *regs)
1102 {
1103         if (ctx == RP_CHECK_CALL) /* sp was just decremented by "call" insn */
1104                 return regs->sp < ret->stack;
1105         else
1106                 return regs->sp <= ret->stack;
1107 }