@@ -38,7 +38,7 @@ unsigned long __recover_optprobed_insn(kprobe_opcode_t *buf, unsigned long addr)
38
38
long offs ;
39
39
int i ;
40
40
41
- for (i = 0 ; i < RELATIVEJUMP_SIZE ; i ++ ) {
41
+ for (i = 0 ; i < JMP32_INSN_SIZE ; i ++ ) {
42
42
kp = get_kprobe ((void * )addr - i );
43
43
/* This function only handles jump-optimized kprobe */
44
44
if (kp && kprobe_optimized (kp )) {
@@ -62,10 +62,10 @@ unsigned long __recover_optprobed_insn(kprobe_opcode_t *buf, unsigned long addr)
62
62
63
63
if (addr == (unsigned long )kp -> addr ) {
64
64
buf [0 ] = kp -> opcode ;
65
- memcpy (buf + 1 , op -> optinsn .copied_insn , RELATIVE_ADDR_SIZE );
65
+ memcpy (buf + 1 , op -> optinsn .copied_insn , DISP32_SIZE );
66
66
} else {
67
67
offs = addr - (unsigned long )kp -> addr - 1 ;
68
- memcpy (buf , op -> optinsn .copied_insn + offs , RELATIVE_ADDR_SIZE - offs );
68
+ memcpy (buf , op -> optinsn .copied_insn + offs , DISP32_SIZE - offs );
69
69
}
70
70
71
71
return (unsigned long )buf ;
@@ -141,8 +141,6 @@ STACK_FRAME_NON_STANDARD(optprobe_template_func);
141
141
#define TMPL_END_IDX \
142
142
((long)optprobe_template_end - (long)optprobe_template_entry)
143
143
144
- #define INT3_SIZE sizeof(kprobe_opcode_t)
145
-
146
144
/* Optimized kprobe call back function: called from optinsn */
147
145
static void
148
146
optimized_callback (struct optimized_kprobe * op , struct pt_regs * regs )
@@ -162,7 +160,7 @@ optimized_callback(struct optimized_kprobe *op, struct pt_regs *regs)
162
160
regs -> cs |= get_kernel_rpl ();
163
161
regs -> gs = 0 ;
164
162
#endif
165
- regs -> ip = (unsigned long )op -> kp .addr + INT3_SIZE ;
163
+ regs -> ip = (unsigned long )op -> kp .addr + INT3_INSN_SIZE ;
166
164
regs -> orig_ax = ~0UL ;
167
165
168
166
__this_cpu_write (current_kprobe , & op -> kp );
@@ -179,7 +177,7 @@ static int copy_optimized_instructions(u8 *dest, u8 *src, u8 *real)
179
177
struct insn insn ;
180
178
int len = 0 , ret ;
181
179
182
- while (len < RELATIVEJUMP_SIZE ) {
180
+ while (len < JMP32_INSN_SIZE ) {
183
181
ret = __copy_instruction (dest + len , src + len , real + len , & insn );
184
182
if (!ret || !can_boost (& insn , src + len ))
185
183
return - EINVAL ;
@@ -271,7 +269,7 @@ static int can_optimize(unsigned long paddr)
271
269
return 0 ;
272
270
273
271
/* Check there is enough space for a relative jump. */
274
- if (size - offset < RELATIVEJUMP_SIZE )
272
+ if (size - offset < JMP32_INSN_SIZE )
275
273
return 0 ;
276
274
277
275
/* Decode instructions */
@@ -290,15 +288,15 @@ static int can_optimize(unsigned long paddr)
290
288
kernel_insn_init (& insn , (void * )recovered_insn , MAX_INSN_SIZE );
291
289
insn_get_length (& insn );
292
290
/* Another subsystem puts a breakpoint */
293
- if (insn .opcode .bytes [0 ] == BREAKPOINT_INSTRUCTION )
291
+ if (insn .opcode .bytes [0 ] == INT3_INSN_OPCODE )
294
292
return 0 ;
295
293
/* Recover address */
296
294
insn .kaddr = (void * )addr ;
297
295
insn .next_byte = (void * )(addr + insn .length );
298
296
/* Check any instructions don't jump into target */
299
297
if (insn_is_indirect_jump (& insn ) ||
300
- insn_jump_into_range (& insn , paddr + INT3_SIZE ,
301
- RELATIVE_ADDR_SIZE ))
298
+ insn_jump_into_range (& insn , paddr + INT3_INSN_SIZE ,
299
+ DISP32_SIZE ))
302
300
return 0 ;
303
301
addr += insn .length ;
304
302
}
@@ -374,7 +372,7 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op,
374
372
* Verify if the address gap is in 2GB range, because this uses
375
373
* a relative jump.
376
374
*/
377
- rel = (long )slot - (long )op -> kp .addr + RELATIVEJUMP_SIZE ;
375
+ rel = (long )slot - (long )op -> kp .addr + JMP32_INSN_SIZE ;
378
376
if (abs (rel ) > 0x7fffffff ) {
379
377
ret = - ERANGE ;
380
378
goto err ;
@@ -401,7 +399,7 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op,
401
399
/* Set returning jmp instruction at the tail of out-of-line buffer */
402
400
synthesize_reljump (buf + len , slot + len ,
403
401
(u8 * )op -> kp .addr + op -> optinsn .size );
404
- len += RELATIVEJUMP_SIZE ;
402
+ len += JMP32_INSN_SIZE ;
405
403
406
404
/* We have to use text_poke() for instruction buffer because it is RO */
407
405
text_poke (slot , buf , len );
@@ -422,22 +420,22 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op,
422
420
void arch_optimize_kprobes (struct list_head * oplist )
423
421
{
424
422
struct optimized_kprobe * op , * tmp ;
425
- u8 insn_buff [RELATIVEJUMP_SIZE ];
423
+ u8 insn_buff [JMP32_INSN_SIZE ];
426
424
427
425
list_for_each_entry_safe (op , tmp , oplist , list ) {
428
426
s32 rel = (s32 )((long )op -> optinsn .insn -
429
- ((long )op -> kp .addr + RELATIVEJUMP_SIZE ));
427
+ ((long )op -> kp .addr + JMP32_INSN_SIZE ));
430
428
431
429
WARN_ON (kprobe_disabled (& op -> kp ));
432
430
433
431
/* Backup instructions which will be replaced by jump address */
434
- memcpy (op -> optinsn .copied_insn , op -> kp .addr + INT3_SIZE ,
435
- RELATIVE_ADDR_SIZE );
432
+ memcpy (op -> optinsn .copied_insn , op -> kp .addr + INT3_INSN_SIZE ,
433
+ DISP32_SIZE );
436
434
437
- insn_buff [0 ] = RELATIVEJUMP_OPCODE ;
435
+ insn_buff [0 ] = JMP32_INSN_OPCODE ;
438
436
* (s32 * )(& insn_buff [1 ]) = rel ;
439
437
440
- text_poke_bp (op -> kp .addr , insn_buff , RELATIVEJUMP_SIZE , NULL );
438
+ text_poke_bp (op -> kp .addr , insn_buff , JMP32_INSN_SIZE , NULL );
441
439
442
440
list_del_init (& op -> list );
443
441
}
@@ -446,13 +444,13 @@ void arch_optimize_kprobes(struct list_head *oplist)
446
444
/* Replace a relative jump with a breakpoint (int3). */
447
445
void arch_unoptimize_kprobe (struct optimized_kprobe * op )
448
446
{
449
- u8 insn_buff [RELATIVEJUMP_SIZE ];
447
+ u8 insn_buff [JMP32_INSN_SIZE ];
450
448
451
449
/* Set int3 to first byte for kprobes */
452
- insn_buff [0 ] = BREAKPOINT_INSTRUCTION ;
453
- memcpy (insn_buff + 1 , op -> optinsn .copied_insn , RELATIVE_ADDR_SIZE );
450
+ insn_buff [0 ] = INT3_INSN_OPCODE ;
451
+ memcpy (insn_buff + 1 , op -> optinsn .copied_insn , DISP32_SIZE );
454
452
455
- text_poke_bp (op -> kp .addr , insn_buff , RELATIVEJUMP_SIZE ,
453
+ text_poke_bp (op -> kp .addr , insn_buff , JMP32_INSN_SIZE ,
456
454
text_gen_insn (JMP32_INSN_OPCODE , op -> kp .addr , op -> optinsn .insn ));
457
455
}
458
456
0 commit comments