xref: /openbmc/linux/arch/x86/net/bpf_jit_comp32.c (revision d60c7ab6fad75d753f866f2fc87725196645e0f3)
1  // SPDX-License-Identifier: GPL-2.0
2  /*
3   * Just-In-Time compiler for eBPF filters on IA32 (32bit x86)
4   *
5   * Author: Wang YanQing (udknight@gmail.com)
6   * The code based on code and ideas from:
7   * Eric Dumazet (eric.dumazet@gmail.com)
8   * and from:
9   * Shubham Bansal <illusionist.neo@gmail.com>
10   */
11  
12  #include <linux/netdevice.h>
13  #include <linux/filter.h>
14  #include <linux/if_vlan.h>
15  #include <asm/cacheflush.h>
16  #include <asm/set_memory.h>
17  #include <asm/nospec-branch.h>
18  #include <asm/asm-prototypes.h>
19  #include <linux/bpf.h>
20  
21  /*
22   * eBPF prog stack layout:
23   *
24   *                         high
25   * original ESP =>        +-----+
26   *                        |     | callee saved registers
27   *                        +-----+
28   *                        | ... | eBPF JIT scratch space
29   * BPF_FP,IA32_EBP  =>    +-----+
30   *                        | ... | eBPF prog stack
31   *                        +-----+
32   *                        |RSVD | JIT scratchpad
33   * current ESP =>         +-----+
34   *                        |     |
35   *                        | ... | Function call stack
36   *                        |     |
37   *                        +-----+
38   *                          low
39   *
40   * The callee saved registers:
41   *
42   *                                high
43   * original ESP =>        +------------------+ \
44   *                        |        ebp       | |
45   * current EBP =>         +------------------+ } callee saved registers
46   *                        |    ebx,esi,edi   | |
47   *                        +------------------+ /
48   *                                low
49   */
50  
emit_code(u8 * ptr,u32 bytes,unsigned int len)51  static u8 *emit_code(u8 *ptr, u32 bytes, unsigned int len)
52  {
53  	if (len == 1)
54  		*ptr = bytes;
55  	else if (len == 2)
56  		*(u16 *)ptr = bytes;
57  	else {
58  		*(u32 *)ptr = bytes;
59  		barrier();
60  	}
61  	return ptr + len;
62  }
63  
64  #define EMIT(bytes, len) \
65  	do { prog = emit_code(prog, bytes, len); cnt += len; } while (0)
66  
67  #define EMIT1(b1)		EMIT(b1, 1)
68  #define EMIT2(b1, b2)		EMIT((b1) + ((b2) << 8), 2)
69  #define EMIT3(b1, b2, b3)	EMIT((b1) + ((b2) << 8) + ((b3) << 16), 3)
70  #define EMIT4(b1, b2, b3, b4)   \
71  	EMIT((b1) + ((b2) << 8) + ((b3) << 16) + ((b4) << 24), 4)
72  
73  #define EMIT1_off32(b1, off) \
74  	do { EMIT1(b1); EMIT(off, 4); } while (0)
75  #define EMIT2_off32(b1, b2, off) \
76  	do { EMIT2(b1, b2); EMIT(off, 4); } while (0)
77  #define EMIT3_off32(b1, b2, b3, off) \
78  	do { EMIT3(b1, b2, b3); EMIT(off, 4); } while (0)
79  #define EMIT4_off32(b1, b2, b3, b4, off) \
80  	do { EMIT4(b1, b2, b3, b4); EMIT(off, 4); } while (0)
81  
82  #define jmp_label(label, jmp_insn_len) (label - cnt - jmp_insn_len)
83  
is_imm8(int value)84  static bool is_imm8(int value)
85  {
86  	return value <= 127 && value >= -128;
87  }
88  
is_simm32(s64 value)89  static bool is_simm32(s64 value)
90  {
91  	return value == (s64) (s32) value;
92  }
93  
94  #define STACK_OFFSET(k)	(k)
95  #define TCALL_CNT	(MAX_BPF_JIT_REG + 0)	/* Tail Call Count */
96  
97  #define IA32_EAX	(0x0)
98  #define IA32_EBX	(0x3)
99  #define IA32_ECX	(0x1)
100  #define IA32_EDX	(0x2)
101  #define IA32_ESI	(0x6)
102  #define IA32_EDI	(0x7)
103  #define IA32_EBP	(0x5)
104  #define IA32_ESP	(0x4)
105  
106  /*
107   * List of x86 cond jumps opcodes (. + s8)
108   * Add 0x10 (and an extra 0x0f) to generate far jumps (. + s32)
109   */
110  #define IA32_JB  0x72
111  #define IA32_JAE 0x73
112  #define IA32_JE  0x74
113  #define IA32_JNE 0x75
114  #define IA32_JBE 0x76
115  #define IA32_JA  0x77
116  #define IA32_JL  0x7C
117  #define IA32_JGE 0x7D
118  #define IA32_JLE 0x7E
119  #define IA32_JG  0x7F
120  
121  #define COND_JMP_OPCODE_INVALID	(0xFF)
122  
123  /*
124   * Map eBPF registers to IA32 32bit registers or stack scratch space.
125   *
126   * 1. All the registers, R0-R10, are mapped to scratch space on stack.
127   * 2. We need two 64 bit temp registers to do complex operations on eBPF
128   *    registers.
129   * 3. For performance reason, the BPF_REG_AX for blinding constant, is
130   *    mapped to real hardware register pair, IA32_ESI and IA32_EDI.
131   *
132   * As the eBPF registers are all 64 bit registers and IA32 has only 32 bit
133   * registers, we have to map each eBPF registers with two IA32 32 bit regs
134   * or scratch memory space and we have to build eBPF 64 bit register from those.
135   *
136   * We use IA32_EAX, IA32_EDX, IA32_ECX, IA32_EBX as temporary registers.
137   */
138  static const u8 bpf2ia32[][2] = {
139  	/* Return value from in-kernel function, and exit value from eBPF */
140  	[BPF_REG_0] = {STACK_OFFSET(0), STACK_OFFSET(4)},
141  
142  	/* The arguments from eBPF program to in-kernel function */
143  	/* Stored on stack scratch space */
144  	[BPF_REG_1] = {STACK_OFFSET(8), STACK_OFFSET(12)},
145  	[BPF_REG_2] = {STACK_OFFSET(16), STACK_OFFSET(20)},
146  	[BPF_REG_3] = {STACK_OFFSET(24), STACK_OFFSET(28)},
147  	[BPF_REG_4] = {STACK_OFFSET(32), STACK_OFFSET(36)},
148  	[BPF_REG_5] = {STACK_OFFSET(40), STACK_OFFSET(44)},
149  
150  	/* Callee saved registers that in-kernel function will preserve */
151  	/* Stored on stack scratch space */
152  	[BPF_REG_6] = {STACK_OFFSET(48), STACK_OFFSET(52)},
153  	[BPF_REG_7] = {STACK_OFFSET(56), STACK_OFFSET(60)},
154  	[BPF_REG_8] = {STACK_OFFSET(64), STACK_OFFSET(68)},
155  	[BPF_REG_9] = {STACK_OFFSET(72), STACK_OFFSET(76)},
156  
157  	/* Read only Frame Pointer to access Stack */
158  	[BPF_REG_FP] = {STACK_OFFSET(80), STACK_OFFSET(84)},
159  
160  	/* Temporary register for blinding constants. */
161  	[BPF_REG_AX] = {IA32_ESI, IA32_EDI},
162  
163  	/* Tail call count. Stored on stack scratch space. */
164  	[TCALL_CNT] = {STACK_OFFSET(88), STACK_OFFSET(92)},
165  };
166  
167  #define dst_lo	dst[0]
168  #define dst_hi	dst[1]
169  #define src_lo	src[0]
170  #define src_hi	src[1]
171  
172  #define STACK_ALIGNMENT	8
173  /*
174   * Stack space for BPF_REG_1, BPF_REG_2, BPF_REG_3, BPF_REG_4,
175   * BPF_REG_5, BPF_REG_6, BPF_REG_7, BPF_REG_8, BPF_REG_9,
176   * BPF_REG_FP, BPF_REG_AX and Tail call counts.
177   */
178  #define SCRATCH_SIZE 96
179  
180  /* Total stack size used in JITed code */
181  #define _STACK_SIZE	(stack_depth + SCRATCH_SIZE)
182  
183  #define STACK_SIZE ALIGN(_STACK_SIZE, STACK_ALIGNMENT)
184  
185  /* Get the offset of eBPF REGISTERs stored on scratch space. */
186  #define STACK_VAR(off) (off)
187  
188  /* Encode 'dst_reg' register into IA32 opcode 'byte' */
add_1reg(u8 byte,u32 dst_reg)189  static u8 add_1reg(u8 byte, u32 dst_reg)
190  {
191  	return byte + dst_reg;
192  }
193  
194  /* Encode 'dst_reg' and 'src_reg' registers into IA32 opcode 'byte' */
add_2reg(u8 byte,u32 dst_reg,u32 src_reg)195  static u8 add_2reg(u8 byte, u32 dst_reg, u32 src_reg)
196  {
197  	return byte + dst_reg + (src_reg << 3);
198  }
199  
jit_fill_hole(void * area,unsigned int size)200  static void jit_fill_hole(void *area, unsigned int size)
201  {
202  	/* Fill whole space with int3 instructions */
203  	memset(area, 0xcc, size);
204  }
205  
emit_ia32_mov_i(const u8 dst,const u32 val,bool dstk,u8 ** pprog)206  static inline void emit_ia32_mov_i(const u8 dst, const u32 val, bool dstk,
207  				   u8 **pprog)
208  {
209  	u8 *prog = *pprog;
210  	int cnt = 0;
211  
212  	if (dstk) {
213  		if (val == 0) {
214  			/* xor eax,eax */
215  			EMIT2(0x33, add_2reg(0xC0, IA32_EAX, IA32_EAX));
216  			/* mov dword ptr [ebp+off],eax */
217  			EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EAX),
218  			      STACK_VAR(dst));
219  		} else {
220  			EMIT3_off32(0xC7, add_1reg(0x40, IA32_EBP),
221  				    STACK_VAR(dst), val);
222  		}
223  	} else {
224  		if (val == 0)
225  			EMIT2(0x33, add_2reg(0xC0, dst, dst));
226  		else
227  			EMIT2_off32(0xC7, add_1reg(0xC0, dst),
228  				    val);
229  	}
230  	*pprog = prog;
231  }
232  
233  /* dst = imm (4 bytes)*/
emit_ia32_mov_r(const u8 dst,const u8 src,bool dstk,bool sstk,u8 ** pprog)234  static inline void emit_ia32_mov_r(const u8 dst, const u8 src, bool dstk,
235  				   bool sstk, u8 **pprog)
236  {
237  	u8 *prog = *pprog;
238  	int cnt = 0;
239  	u8 sreg = sstk ? IA32_EAX : src;
240  
241  	if (sstk)
242  		/* mov eax,dword ptr [ebp+off] */
243  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX), STACK_VAR(src));
244  	if (dstk)
245  		/* mov dword ptr [ebp+off],eax */
246  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, sreg), STACK_VAR(dst));
247  	else
248  		/* mov dst,sreg */
249  		EMIT2(0x89, add_2reg(0xC0, dst, sreg));
250  
251  	*pprog = prog;
252  }
253  
254  /* dst = src */
emit_ia32_mov_r64(const bool is64,const u8 dst[],const u8 src[],bool dstk,bool sstk,u8 ** pprog,const struct bpf_prog_aux * aux)255  static inline void emit_ia32_mov_r64(const bool is64, const u8 dst[],
256  				     const u8 src[], bool dstk,
257  				     bool sstk, u8 **pprog,
258  				     const struct bpf_prog_aux *aux)
259  {
260  	emit_ia32_mov_r(dst_lo, src_lo, dstk, sstk, pprog);
261  	if (is64)
262  		/* complete 8 byte move */
263  		emit_ia32_mov_r(dst_hi, src_hi, dstk, sstk, pprog);
264  	else if (!aux->verifier_zext)
265  		/* zero out high 4 bytes */
266  		emit_ia32_mov_i(dst_hi, 0, dstk, pprog);
267  }
268  
269  /* Sign extended move */
emit_ia32_mov_i64(const bool is64,const u8 dst[],const u32 val,bool dstk,u8 ** pprog)270  static inline void emit_ia32_mov_i64(const bool is64, const u8 dst[],
271  				     const u32 val, bool dstk, u8 **pprog)
272  {
273  	u32 hi = 0;
274  
275  	if (is64 && (val & (1<<31)))
276  		hi = (u32)~0;
277  	emit_ia32_mov_i(dst_lo, val, dstk, pprog);
278  	emit_ia32_mov_i(dst_hi, hi, dstk, pprog);
279  }
280  
281  /*
282   * ALU operation (32 bit)
283   * dst = dst * src
284   */
emit_ia32_mul_r(const u8 dst,const u8 src,bool dstk,bool sstk,u8 ** pprog)285  static inline void emit_ia32_mul_r(const u8 dst, const u8 src, bool dstk,
286  				   bool sstk, u8 **pprog)
287  {
288  	u8 *prog = *pprog;
289  	int cnt = 0;
290  	u8 sreg = sstk ? IA32_ECX : src;
291  
292  	if (sstk)
293  		/* mov ecx,dword ptr [ebp+off] */
294  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX), STACK_VAR(src));
295  
296  	if (dstk)
297  		/* mov eax,dword ptr [ebp+off] */
298  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX), STACK_VAR(dst));
299  	else
300  		/* mov eax,dst */
301  		EMIT2(0x8B, add_2reg(0xC0, dst, IA32_EAX));
302  
303  
304  	EMIT2(0xF7, add_1reg(0xE0, sreg));
305  
306  	if (dstk)
307  		/* mov dword ptr [ebp+off],eax */
308  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EAX),
309  		      STACK_VAR(dst));
310  	else
311  		/* mov dst,eax */
312  		EMIT2(0x89, add_2reg(0xC0, dst, IA32_EAX));
313  
314  	*pprog = prog;
315  }
316  
emit_ia32_to_le_r64(const u8 dst[],s32 val,bool dstk,u8 ** pprog,const struct bpf_prog_aux * aux)317  static inline void emit_ia32_to_le_r64(const u8 dst[], s32 val,
318  					 bool dstk, u8 **pprog,
319  					 const struct bpf_prog_aux *aux)
320  {
321  	u8 *prog = *pprog;
322  	int cnt = 0;
323  	u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
324  	u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
325  
326  	if (dstk && val != 64) {
327  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
328  		      STACK_VAR(dst_lo));
329  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX),
330  		      STACK_VAR(dst_hi));
331  	}
332  	switch (val) {
333  	case 16:
334  		/*
335  		 * Emit 'movzwl eax,ax' to zero extend 16-bit
336  		 * into 64 bit
337  		 */
338  		EMIT2(0x0F, 0xB7);
339  		EMIT1(add_2reg(0xC0, dreg_lo, dreg_lo));
340  		if (!aux->verifier_zext)
341  			/* xor dreg_hi,dreg_hi */
342  			EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi));
343  		break;
344  	case 32:
345  		if (!aux->verifier_zext)
346  			/* xor dreg_hi,dreg_hi */
347  			EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi));
348  		break;
349  	case 64:
350  		/* nop */
351  		break;
352  	}
353  
354  	if (dstk && val != 64) {
355  		/* mov dword ptr [ebp+off],dreg_lo */
356  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo),
357  		      STACK_VAR(dst_lo));
358  		/* mov dword ptr [ebp+off],dreg_hi */
359  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_hi),
360  		      STACK_VAR(dst_hi));
361  	}
362  	*pprog = prog;
363  }
364  
emit_ia32_to_be_r64(const u8 dst[],s32 val,bool dstk,u8 ** pprog,const struct bpf_prog_aux * aux)365  static inline void emit_ia32_to_be_r64(const u8 dst[], s32 val,
366  				       bool dstk, u8 **pprog,
367  				       const struct bpf_prog_aux *aux)
368  {
369  	u8 *prog = *pprog;
370  	int cnt = 0;
371  	u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
372  	u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
373  
374  	if (dstk) {
375  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
376  		      STACK_VAR(dst_lo));
377  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX),
378  		      STACK_VAR(dst_hi));
379  	}
380  	switch (val) {
381  	case 16:
382  		/* Emit 'ror %ax, 8' to swap lower 2 bytes */
383  		EMIT1(0x66);
384  		EMIT3(0xC1, add_1reg(0xC8, dreg_lo), 8);
385  
386  		EMIT2(0x0F, 0xB7);
387  		EMIT1(add_2reg(0xC0, dreg_lo, dreg_lo));
388  
389  		if (!aux->verifier_zext)
390  			/* xor dreg_hi,dreg_hi */
391  			EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi));
392  		break;
393  	case 32:
394  		/* Emit 'bswap eax' to swap lower 4 bytes */
395  		EMIT1(0x0F);
396  		EMIT1(add_1reg(0xC8, dreg_lo));
397  
398  		if (!aux->verifier_zext)
399  			/* xor dreg_hi,dreg_hi */
400  			EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi));
401  		break;
402  	case 64:
403  		/* Emit 'bswap eax' to swap lower 4 bytes */
404  		EMIT1(0x0F);
405  		EMIT1(add_1reg(0xC8, dreg_lo));
406  
407  		/* Emit 'bswap edx' to swap lower 4 bytes */
408  		EMIT1(0x0F);
409  		EMIT1(add_1reg(0xC8, dreg_hi));
410  
411  		/* mov ecx,dreg_hi */
412  		EMIT2(0x89, add_2reg(0xC0, IA32_ECX, dreg_hi));
413  		/* mov dreg_hi,dreg_lo */
414  		EMIT2(0x89, add_2reg(0xC0, dreg_hi, dreg_lo));
415  		/* mov dreg_lo,ecx */
416  		EMIT2(0x89, add_2reg(0xC0, dreg_lo, IA32_ECX));
417  
418  		break;
419  	}
420  	if (dstk) {
421  		/* mov dword ptr [ebp+off],dreg_lo */
422  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo),
423  		      STACK_VAR(dst_lo));
424  		/* mov dword ptr [ebp+off],dreg_hi */
425  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_hi),
426  		      STACK_VAR(dst_hi));
427  	}
428  	*pprog = prog;
429  }
430  
431  /*
432   * ALU operation (32 bit)
433   * dst = dst (div|mod) src
434   */
emit_ia32_div_mod_r(const u8 op,const u8 dst,const u8 src,bool dstk,bool sstk,u8 ** pprog)435  static inline void emit_ia32_div_mod_r(const u8 op, const u8 dst, const u8 src,
436  				       bool dstk, bool sstk, u8 **pprog)
437  {
438  	u8 *prog = *pprog;
439  	int cnt = 0;
440  
441  	if (sstk)
442  		/* mov ecx,dword ptr [ebp+off] */
443  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX),
444  		      STACK_VAR(src));
445  	else if (src != IA32_ECX)
446  		/* mov ecx,src */
447  		EMIT2(0x8B, add_2reg(0xC0, src, IA32_ECX));
448  
449  	if (dstk)
450  		/* mov eax,dword ptr [ebp+off] */
451  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
452  		      STACK_VAR(dst));
453  	else
454  		/* mov eax,dst */
455  		EMIT2(0x8B, add_2reg(0xC0, dst, IA32_EAX));
456  
457  	/* xor edx,edx */
458  	EMIT2(0x31, add_2reg(0xC0, IA32_EDX, IA32_EDX));
459  	/* div ecx */
460  	EMIT2(0xF7, add_1reg(0xF0, IA32_ECX));
461  
462  	if (op == BPF_MOD) {
463  		if (dstk)
464  			EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EDX),
465  			      STACK_VAR(dst));
466  		else
467  			EMIT2(0x89, add_2reg(0xC0, dst, IA32_EDX));
468  	} else {
469  		if (dstk)
470  			EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EAX),
471  			      STACK_VAR(dst));
472  		else
473  			EMIT2(0x89, add_2reg(0xC0, dst, IA32_EAX));
474  	}
475  	*pprog = prog;
476  }
477  
478  /*
479   * ALU operation (32 bit)
480   * dst = dst (shift) src
481   */
emit_ia32_shift_r(const u8 op,const u8 dst,const u8 src,bool dstk,bool sstk,u8 ** pprog)482  static inline void emit_ia32_shift_r(const u8 op, const u8 dst, const u8 src,
483  				     bool dstk, bool sstk, u8 **pprog)
484  {
485  	u8 *prog = *pprog;
486  	int cnt = 0;
487  	u8 dreg = dstk ? IA32_EAX : dst;
488  	u8 b2;
489  
490  	if (dstk)
491  		/* mov eax,dword ptr [ebp+off] */
492  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX), STACK_VAR(dst));
493  
494  	if (sstk)
495  		/* mov ecx,dword ptr [ebp+off] */
496  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX), STACK_VAR(src));
497  	else if (src != IA32_ECX)
498  		/* mov ecx,src */
499  		EMIT2(0x8B, add_2reg(0xC0, src, IA32_ECX));
500  
501  	switch (op) {
502  	case BPF_LSH:
503  		b2 = 0xE0; break;
504  	case BPF_RSH:
505  		b2 = 0xE8; break;
506  	case BPF_ARSH:
507  		b2 = 0xF8; break;
508  	default:
509  		return;
510  	}
511  	EMIT2(0xD3, add_1reg(b2, dreg));
512  
513  	if (dstk)
514  		/* mov dword ptr [ebp+off],dreg */
515  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg), STACK_VAR(dst));
516  	*pprog = prog;
517  }
518  
519  /*
520   * ALU operation (32 bit)
521   * dst = dst (op) src
522   */
emit_ia32_alu_r(const bool is64,const bool hi,const u8 op,const u8 dst,const u8 src,bool dstk,bool sstk,u8 ** pprog)523  static inline void emit_ia32_alu_r(const bool is64, const bool hi, const u8 op,
524  				   const u8 dst, const u8 src, bool dstk,
525  				   bool sstk, u8 **pprog)
526  {
527  	u8 *prog = *pprog;
528  	int cnt = 0;
529  	u8 sreg = sstk ? IA32_EAX : src;
530  	u8 dreg = dstk ? IA32_EDX : dst;
531  
532  	if (sstk)
533  		/* mov eax,dword ptr [ebp+off] */
534  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX), STACK_VAR(src));
535  
536  	if (dstk)
537  		/* mov eax,dword ptr [ebp+off] */
538  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX), STACK_VAR(dst));
539  
540  	switch (BPF_OP(op)) {
541  	/* dst = dst + src */
542  	case BPF_ADD:
543  		if (hi && is64)
544  			EMIT2(0x11, add_2reg(0xC0, dreg, sreg));
545  		else
546  			EMIT2(0x01, add_2reg(0xC0, dreg, sreg));
547  		break;
548  	/* dst = dst - src */
549  	case BPF_SUB:
550  		if (hi && is64)
551  			EMIT2(0x19, add_2reg(0xC0, dreg, sreg));
552  		else
553  			EMIT2(0x29, add_2reg(0xC0, dreg, sreg));
554  		break;
555  	/* dst = dst | src */
556  	case BPF_OR:
557  		EMIT2(0x09, add_2reg(0xC0, dreg, sreg));
558  		break;
559  	/* dst = dst & src */
560  	case BPF_AND:
561  		EMIT2(0x21, add_2reg(0xC0, dreg, sreg));
562  		break;
563  	/* dst = dst ^ src */
564  	case BPF_XOR:
565  		EMIT2(0x31, add_2reg(0xC0, dreg, sreg));
566  		break;
567  	}
568  
569  	if (dstk)
570  		/* mov dword ptr [ebp+off],dreg */
571  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg),
572  		      STACK_VAR(dst));
573  	*pprog = prog;
574  }
575  
576  /* ALU operation (64 bit) */
emit_ia32_alu_r64(const bool is64,const u8 op,const u8 dst[],const u8 src[],bool dstk,bool sstk,u8 ** pprog,const struct bpf_prog_aux * aux)577  static inline void emit_ia32_alu_r64(const bool is64, const u8 op,
578  				     const u8 dst[], const u8 src[],
579  				     bool dstk,  bool sstk,
580  				     u8 **pprog, const struct bpf_prog_aux *aux)
581  {
582  	u8 *prog = *pprog;
583  
584  	emit_ia32_alu_r(is64, false, op, dst_lo, src_lo, dstk, sstk, &prog);
585  	if (is64)
586  		emit_ia32_alu_r(is64, true, op, dst_hi, src_hi, dstk, sstk,
587  				&prog);
588  	else if (!aux->verifier_zext)
589  		emit_ia32_mov_i(dst_hi, 0, dstk, &prog);
590  	*pprog = prog;
591  }
592  
593  /*
594   * ALU operation (32 bit)
595   * dst = dst (op) val
596   */
emit_ia32_alu_i(const bool is64,const bool hi,const u8 op,const u8 dst,const s32 val,bool dstk,u8 ** pprog)597  static inline void emit_ia32_alu_i(const bool is64, const bool hi, const u8 op,
598  				   const u8 dst, const s32 val, bool dstk,
599  				   u8 **pprog)
600  {
601  	u8 *prog = *pprog;
602  	int cnt = 0;
603  	u8 dreg = dstk ? IA32_EAX : dst;
604  	u8 sreg = IA32_EDX;
605  
606  	if (dstk)
607  		/* mov eax,dword ptr [ebp+off] */
608  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX), STACK_VAR(dst));
609  
610  	if (!is_imm8(val))
611  		/* mov edx,imm32*/
612  		EMIT2_off32(0xC7, add_1reg(0xC0, IA32_EDX), val);
613  
614  	switch (op) {
615  	/* dst = dst + val */
616  	case BPF_ADD:
617  		if (hi && is64) {
618  			if (is_imm8(val))
619  				EMIT3(0x83, add_1reg(0xD0, dreg), val);
620  			else
621  				EMIT2(0x11, add_2reg(0xC0, dreg, sreg));
622  		} else {
623  			if (is_imm8(val))
624  				EMIT3(0x83, add_1reg(0xC0, dreg), val);
625  			else
626  				EMIT2(0x01, add_2reg(0xC0, dreg, sreg));
627  		}
628  		break;
629  	/* dst = dst - val */
630  	case BPF_SUB:
631  		if (hi && is64) {
632  			if (is_imm8(val))
633  				EMIT3(0x83, add_1reg(0xD8, dreg), val);
634  			else
635  				EMIT2(0x19, add_2reg(0xC0, dreg, sreg));
636  		} else {
637  			if (is_imm8(val))
638  				EMIT3(0x83, add_1reg(0xE8, dreg), val);
639  			else
640  				EMIT2(0x29, add_2reg(0xC0, dreg, sreg));
641  		}
642  		break;
643  	/* dst = dst | val */
644  	case BPF_OR:
645  		if (is_imm8(val))
646  			EMIT3(0x83, add_1reg(0xC8, dreg), val);
647  		else
648  			EMIT2(0x09, add_2reg(0xC0, dreg, sreg));
649  		break;
650  	/* dst = dst & val */
651  	case BPF_AND:
652  		if (is_imm8(val))
653  			EMIT3(0x83, add_1reg(0xE0, dreg), val);
654  		else
655  			EMIT2(0x21, add_2reg(0xC0, dreg, sreg));
656  		break;
657  	/* dst = dst ^ val */
658  	case BPF_XOR:
659  		if (is_imm8(val))
660  			EMIT3(0x83, add_1reg(0xF0, dreg), val);
661  		else
662  			EMIT2(0x31, add_2reg(0xC0, dreg, sreg));
663  		break;
664  	case BPF_NEG:
665  		EMIT2(0xF7, add_1reg(0xD8, dreg));
666  		break;
667  	}
668  
669  	if (dstk)
670  		/* mov dword ptr [ebp+off],dreg */
671  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg),
672  		      STACK_VAR(dst));
673  	*pprog = prog;
674  }
675  
676  /* ALU operation (64 bit) */
emit_ia32_alu_i64(const bool is64,const u8 op,const u8 dst[],const u32 val,bool dstk,u8 ** pprog,const struct bpf_prog_aux * aux)677  static inline void emit_ia32_alu_i64(const bool is64, const u8 op,
678  				     const u8 dst[], const u32 val,
679  				     bool dstk, u8 **pprog,
680  				     const struct bpf_prog_aux *aux)
681  {
682  	u8 *prog = *pprog;
683  	u32 hi = 0;
684  
685  	if (is64 && (val & (1<<31)))
686  		hi = (u32)~0;
687  
688  	emit_ia32_alu_i(is64, false, op, dst_lo, val, dstk, &prog);
689  	if (is64)
690  		emit_ia32_alu_i(is64, true, op, dst_hi, hi, dstk, &prog);
691  	else if (!aux->verifier_zext)
692  		emit_ia32_mov_i(dst_hi, 0, dstk, &prog);
693  
694  	*pprog = prog;
695  }
696  
697  /* dst = ~dst (64 bit) */
emit_ia32_neg64(const u8 dst[],bool dstk,u8 ** pprog)698  static inline void emit_ia32_neg64(const u8 dst[], bool dstk, u8 **pprog)
699  {
700  	u8 *prog = *pprog;
701  	int cnt = 0;
702  	u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
703  	u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
704  
705  	if (dstk) {
706  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
707  		      STACK_VAR(dst_lo));
708  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX),
709  		      STACK_VAR(dst_hi));
710  	}
711  
712  	/* neg dreg_lo */
713  	EMIT2(0xF7, add_1reg(0xD8, dreg_lo));
714  	/* adc dreg_hi,0x0 */
715  	EMIT3(0x83, add_1reg(0xD0, dreg_hi), 0x00);
716  	/* neg dreg_hi */
717  	EMIT2(0xF7, add_1reg(0xD8, dreg_hi));
718  
719  	if (dstk) {
720  		/* mov dword ptr [ebp+off],dreg_lo */
721  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo),
722  		      STACK_VAR(dst_lo));
723  		/* mov dword ptr [ebp+off],dreg_hi */
724  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_hi),
725  		      STACK_VAR(dst_hi));
726  	}
727  	*pprog = prog;
728  }
729  
730  /* dst = dst << src */
emit_ia32_lsh_r64(const u8 dst[],const u8 src[],bool dstk,bool sstk,u8 ** pprog)731  static inline void emit_ia32_lsh_r64(const u8 dst[], const u8 src[],
732  				     bool dstk, bool sstk, u8 **pprog)
733  {
734  	u8 *prog = *pprog;
735  	int cnt = 0;
736  	u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
737  	u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
738  
739  	if (dstk) {
740  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
741  		      STACK_VAR(dst_lo));
742  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX),
743  		      STACK_VAR(dst_hi));
744  	}
745  
746  	if (sstk)
747  		/* mov ecx,dword ptr [ebp+off] */
748  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX),
749  		      STACK_VAR(src_lo));
750  	else
751  		/* mov ecx,src_lo */
752  		EMIT2(0x8B, add_2reg(0xC0, src_lo, IA32_ECX));
753  
754  	/* shld dreg_hi,dreg_lo,cl */
755  	EMIT3(0x0F, 0xA5, add_2reg(0xC0, dreg_hi, dreg_lo));
756  	/* shl dreg_lo,cl */
757  	EMIT2(0xD3, add_1reg(0xE0, dreg_lo));
758  
759  	/* if ecx >= 32, mov dreg_lo into dreg_hi and clear dreg_lo */
760  
761  	/* cmp ecx,32 */
762  	EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32);
763  	/* skip the next two instructions (4 bytes) when < 32 */
764  	EMIT2(IA32_JB, 4);
765  
766  	/* mov dreg_hi,dreg_lo */
767  	EMIT2(0x89, add_2reg(0xC0, dreg_hi, dreg_lo));
768  	/* xor dreg_lo,dreg_lo */
769  	EMIT2(0x33, add_2reg(0xC0, dreg_lo, dreg_lo));
770  
771  	if (dstk) {
772  		/* mov dword ptr [ebp+off],dreg_lo */
773  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo),
774  		      STACK_VAR(dst_lo));
775  		/* mov dword ptr [ebp+off],dreg_hi */
776  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_hi),
777  		      STACK_VAR(dst_hi));
778  	}
779  	/* out: */
780  	*pprog = prog;
781  }
782  
783  /* dst = dst >> src (signed)*/
emit_ia32_arsh_r64(const u8 dst[],const u8 src[],bool dstk,bool sstk,u8 ** pprog)784  static inline void emit_ia32_arsh_r64(const u8 dst[], const u8 src[],
785  				      bool dstk, bool sstk, u8 **pprog)
786  {
787  	u8 *prog = *pprog;
788  	int cnt = 0;
789  	u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
790  	u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
791  
792  	if (dstk) {
793  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
794  		      STACK_VAR(dst_lo));
795  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX),
796  		      STACK_VAR(dst_hi));
797  	}
798  
799  	if (sstk)
800  		/* mov ecx,dword ptr [ebp+off] */
801  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX),
802  		      STACK_VAR(src_lo));
803  	else
804  		/* mov ecx,src_lo */
805  		EMIT2(0x8B, add_2reg(0xC0, src_lo, IA32_ECX));
806  
807  	/* shrd dreg_lo,dreg_hi,cl */
808  	EMIT3(0x0F, 0xAD, add_2reg(0xC0, dreg_lo, dreg_hi));
809  	/* sar dreg_hi,cl */
810  	EMIT2(0xD3, add_1reg(0xF8, dreg_hi));
811  
812  	/* if ecx >= 32, mov dreg_hi to dreg_lo and set/clear dreg_hi depending on sign */
813  
814  	/* cmp ecx,32 */
815  	EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32);
816  	/* skip the next two instructions (5 bytes) when < 32 */
817  	EMIT2(IA32_JB, 5);
818  
819  	/* mov dreg_lo,dreg_hi */
820  	EMIT2(0x89, add_2reg(0xC0, dreg_lo, dreg_hi));
821  	/* sar dreg_hi,31 */
822  	EMIT3(0xC1, add_1reg(0xF8, dreg_hi), 31);
823  
824  	if (dstk) {
825  		/* mov dword ptr [ebp+off],dreg_lo */
826  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo),
827  		      STACK_VAR(dst_lo));
828  		/* mov dword ptr [ebp+off],dreg_hi */
829  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_hi),
830  		      STACK_VAR(dst_hi));
831  	}
832  	/* out: */
833  	*pprog = prog;
834  }
835  
836  /* dst = dst >> src */
emit_ia32_rsh_r64(const u8 dst[],const u8 src[],bool dstk,bool sstk,u8 ** pprog)837  static inline void emit_ia32_rsh_r64(const u8 dst[], const u8 src[], bool dstk,
838  				     bool sstk, u8 **pprog)
839  {
840  	u8 *prog = *pprog;
841  	int cnt = 0;
842  	u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
843  	u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
844  
845  	if (dstk) {
846  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
847  		      STACK_VAR(dst_lo));
848  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX),
849  		      STACK_VAR(dst_hi));
850  	}
851  
852  	if (sstk)
853  		/* mov ecx,dword ptr [ebp+off] */
854  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX),
855  		      STACK_VAR(src_lo));
856  	else
857  		/* mov ecx,src_lo */
858  		EMIT2(0x8B, add_2reg(0xC0, src_lo, IA32_ECX));
859  
860  	/* shrd dreg_lo,dreg_hi,cl */
861  	EMIT3(0x0F, 0xAD, add_2reg(0xC0, dreg_lo, dreg_hi));
862  	/* shr dreg_hi,cl */
863  	EMIT2(0xD3, add_1reg(0xE8, dreg_hi));
864  
865  	/* if ecx >= 32, mov dreg_hi to dreg_lo and clear dreg_hi */
866  
867  	/* cmp ecx,32 */
868  	EMIT3(0x83, add_1reg(0xF8, IA32_ECX), 32);
869  	/* skip the next two instructions (4 bytes) when < 32 */
870  	EMIT2(IA32_JB, 4);
871  
872  	/* mov dreg_lo,dreg_hi */
873  	EMIT2(0x89, add_2reg(0xC0, dreg_lo, dreg_hi));
874  	/* xor dreg_hi,dreg_hi */
875  	EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi));
876  
877  	if (dstk) {
878  		/* mov dword ptr [ebp+off],dreg_lo */
879  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo),
880  		      STACK_VAR(dst_lo));
881  		/* mov dword ptr [ebp+off],dreg_hi */
882  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_hi),
883  		      STACK_VAR(dst_hi));
884  	}
885  	/* out: */
886  	*pprog = prog;
887  }
888  
889  /* dst = dst << val */
emit_ia32_lsh_i64(const u8 dst[],const u32 val,bool dstk,u8 ** pprog)890  static inline void emit_ia32_lsh_i64(const u8 dst[], const u32 val,
891  				     bool dstk, u8 **pprog)
892  {
893  	u8 *prog = *pprog;
894  	int cnt = 0;
895  	u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
896  	u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
897  
898  	if (dstk) {
899  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
900  		      STACK_VAR(dst_lo));
901  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX),
902  		      STACK_VAR(dst_hi));
903  	}
904  	/* Do LSH operation */
905  	if (val < 32) {
906  		/* shld dreg_hi,dreg_lo,imm8 */
907  		EMIT4(0x0F, 0xA4, add_2reg(0xC0, dreg_hi, dreg_lo), val);
908  		/* shl dreg_lo,imm8 */
909  		EMIT3(0xC1, add_1reg(0xE0, dreg_lo), val);
910  	} else if (val >= 32 && val < 64) {
911  		u32 value = val - 32;
912  
913  		/* shl dreg_lo,imm8 */
914  		EMIT3(0xC1, add_1reg(0xE0, dreg_lo), value);
915  		/* mov dreg_hi,dreg_lo */
916  		EMIT2(0x89, add_2reg(0xC0, dreg_hi, dreg_lo));
917  		/* xor dreg_lo,dreg_lo */
918  		EMIT2(0x33, add_2reg(0xC0, dreg_lo, dreg_lo));
919  	} else {
920  		/* xor dreg_lo,dreg_lo */
921  		EMIT2(0x33, add_2reg(0xC0, dreg_lo, dreg_lo));
922  		/* xor dreg_hi,dreg_hi */
923  		EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi));
924  	}
925  
926  	if (dstk) {
927  		/* mov dword ptr [ebp+off],dreg_lo */
928  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo),
929  		      STACK_VAR(dst_lo));
930  		/* mov dword ptr [ebp+off],dreg_hi */
931  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_hi),
932  		      STACK_VAR(dst_hi));
933  	}
934  	*pprog = prog;
935  }
936  
937  /* dst = dst >> val */
emit_ia32_rsh_i64(const u8 dst[],const u32 val,bool dstk,u8 ** pprog)938  static inline void emit_ia32_rsh_i64(const u8 dst[], const u32 val,
939  				     bool dstk, u8 **pprog)
940  {
941  	u8 *prog = *pprog;
942  	int cnt = 0;
943  	u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
944  	u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
945  
946  	if (dstk) {
947  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
948  		      STACK_VAR(dst_lo));
949  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX),
950  		      STACK_VAR(dst_hi));
951  	}
952  
953  	/* Do RSH operation */
954  	if (val < 32) {
955  		/* shrd dreg_lo,dreg_hi,imm8 */
956  		EMIT4(0x0F, 0xAC, add_2reg(0xC0, dreg_lo, dreg_hi), val);
957  		/* shr dreg_hi,imm8 */
958  		EMIT3(0xC1, add_1reg(0xE8, dreg_hi), val);
959  	} else if (val >= 32 && val < 64) {
960  		u32 value = val - 32;
961  
962  		/* shr dreg_hi,imm8 */
963  		EMIT3(0xC1, add_1reg(0xE8, dreg_hi), value);
964  		/* mov dreg_lo,dreg_hi */
965  		EMIT2(0x89, add_2reg(0xC0, dreg_lo, dreg_hi));
966  		/* xor dreg_hi,dreg_hi */
967  		EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi));
968  	} else {
969  		/* xor dreg_lo,dreg_lo */
970  		EMIT2(0x33, add_2reg(0xC0, dreg_lo, dreg_lo));
971  		/* xor dreg_hi,dreg_hi */
972  		EMIT2(0x33, add_2reg(0xC0, dreg_hi, dreg_hi));
973  	}
974  
975  	if (dstk) {
976  		/* mov dword ptr [ebp+off],dreg_lo */
977  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo),
978  		      STACK_VAR(dst_lo));
979  		/* mov dword ptr [ebp+off],dreg_hi */
980  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_hi),
981  		      STACK_VAR(dst_hi));
982  	}
983  	*pprog = prog;
984  }
985  
986  /* dst = dst >> val (signed) */
emit_ia32_arsh_i64(const u8 dst[],const u32 val,bool dstk,u8 ** pprog)987  static inline void emit_ia32_arsh_i64(const u8 dst[], const u32 val,
988  				      bool dstk, u8 **pprog)
989  {
990  	u8 *prog = *pprog;
991  	int cnt = 0;
992  	u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
993  	u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
994  
995  	if (dstk) {
996  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
997  		      STACK_VAR(dst_lo));
998  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX),
999  		      STACK_VAR(dst_hi));
1000  	}
1001  	/* Do RSH operation */
1002  	if (val < 32) {
1003  		/* shrd dreg_lo,dreg_hi,imm8 */
1004  		EMIT4(0x0F, 0xAC, add_2reg(0xC0, dreg_lo, dreg_hi), val);
1005  		/* ashr dreg_hi,imm8 */
1006  		EMIT3(0xC1, add_1reg(0xF8, dreg_hi), val);
1007  	} else if (val >= 32 && val < 64) {
1008  		u32 value = val - 32;
1009  
1010  		/* ashr dreg_hi,imm8 */
1011  		EMIT3(0xC1, add_1reg(0xF8, dreg_hi), value);
1012  		/* mov dreg_lo,dreg_hi */
1013  		EMIT2(0x89, add_2reg(0xC0, dreg_lo, dreg_hi));
1014  
1015  		/* ashr dreg_hi,imm8 */
1016  		EMIT3(0xC1, add_1reg(0xF8, dreg_hi), 31);
1017  	} else {
1018  		/* ashr dreg_hi,imm8 */
1019  		EMIT3(0xC1, add_1reg(0xF8, dreg_hi), 31);
1020  		/* mov dreg_lo,dreg_hi */
1021  		EMIT2(0x89, add_2reg(0xC0, dreg_lo, dreg_hi));
1022  	}
1023  
1024  	if (dstk) {
1025  		/* mov dword ptr [ebp+off],dreg_lo */
1026  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_lo),
1027  		      STACK_VAR(dst_lo));
1028  		/* mov dword ptr [ebp+off],dreg_hi */
1029  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, dreg_hi),
1030  		      STACK_VAR(dst_hi));
1031  	}
1032  	*pprog = prog;
1033  }
1034  
emit_ia32_mul_r64(const u8 dst[],const u8 src[],bool dstk,bool sstk,u8 ** pprog)1035  static inline void emit_ia32_mul_r64(const u8 dst[], const u8 src[], bool dstk,
1036  				     bool sstk, u8 **pprog)
1037  {
1038  	u8 *prog = *pprog;
1039  	int cnt = 0;
1040  
1041  	if (dstk)
1042  		/* mov eax,dword ptr [ebp+off] */
1043  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
1044  		      STACK_VAR(dst_hi));
1045  	else
1046  		/* mov eax,dst_hi */
1047  		EMIT2(0x8B, add_2reg(0xC0, dst_hi, IA32_EAX));
1048  
1049  	if (sstk)
1050  		/* mul dword ptr [ebp+off] */
1051  		EMIT3(0xF7, add_1reg(0x60, IA32_EBP), STACK_VAR(src_lo));
1052  	else
1053  		/* mul src_lo */
1054  		EMIT2(0xF7, add_1reg(0xE0, src_lo));
1055  
1056  	/* mov ecx,eax */
1057  	EMIT2(0x89, add_2reg(0xC0, IA32_ECX, IA32_EAX));
1058  
1059  	if (dstk)
1060  		/* mov eax,dword ptr [ebp+off] */
1061  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
1062  		      STACK_VAR(dst_lo));
1063  	else
1064  		/* mov eax,dst_lo */
1065  		EMIT2(0x8B, add_2reg(0xC0, dst_lo, IA32_EAX));
1066  
1067  	if (sstk)
1068  		/* mul dword ptr [ebp+off] */
1069  		EMIT3(0xF7, add_1reg(0x60, IA32_EBP), STACK_VAR(src_hi));
1070  	else
1071  		/* mul src_hi */
1072  		EMIT2(0xF7, add_1reg(0xE0, src_hi));
1073  
1074  	/* add eax,eax */
1075  	EMIT2(0x01, add_2reg(0xC0, IA32_ECX, IA32_EAX));
1076  
1077  	if (dstk)
1078  		/* mov eax,dword ptr [ebp+off] */
1079  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
1080  		      STACK_VAR(dst_lo));
1081  	else
1082  		/* mov eax,dst_lo */
1083  		EMIT2(0x8B, add_2reg(0xC0, dst_lo, IA32_EAX));
1084  
1085  	if (sstk)
1086  		/* mul dword ptr [ebp+off] */
1087  		EMIT3(0xF7, add_1reg(0x60, IA32_EBP), STACK_VAR(src_lo));
1088  	else
1089  		/* mul src_lo */
1090  		EMIT2(0xF7, add_1reg(0xE0, src_lo));
1091  
1092  	/* add ecx,edx */
1093  	EMIT2(0x01, add_2reg(0xC0, IA32_ECX, IA32_EDX));
1094  
1095  	if (dstk) {
1096  		/* mov dword ptr [ebp+off],eax */
1097  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EAX),
1098  		      STACK_VAR(dst_lo));
1099  		/* mov dword ptr [ebp+off],ecx */
1100  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_ECX),
1101  		      STACK_VAR(dst_hi));
1102  	} else {
1103  		/* mov dst_lo,eax */
1104  		EMIT2(0x89, add_2reg(0xC0, dst_lo, IA32_EAX));
1105  		/* mov dst_hi,ecx */
1106  		EMIT2(0x89, add_2reg(0xC0, dst_hi, IA32_ECX));
1107  	}
1108  
1109  	*pprog = prog;
1110  }
1111  
emit_ia32_mul_i64(const u8 dst[],const u32 val,bool dstk,u8 ** pprog)1112  static inline void emit_ia32_mul_i64(const u8 dst[], const u32 val,
1113  				     bool dstk, u8 **pprog)
1114  {
1115  	u8 *prog = *pprog;
1116  	int cnt = 0;
1117  	u32 hi;
1118  
1119  	hi = val & (1<<31) ? (u32)~0 : 0;
1120  	/* movl eax,imm32 */
1121  	EMIT2_off32(0xC7, add_1reg(0xC0, IA32_EAX), val);
1122  	if (dstk)
1123  		/* mul dword ptr [ebp+off] */
1124  		EMIT3(0xF7, add_1reg(0x60, IA32_EBP), STACK_VAR(dst_hi));
1125  	else
1126  		/* mul dst_hi */
1127  		EMIT2(0xF7, add_1reg(0xE0, dst_hi));
1128  
1129  	/* mov ecx,eax */
1130  	EMIT2(0x89, add_2reg(0xC0, IA32_ECX, IA32_EAX));
1131  
1132  	/* movl eax,imm32 */
1133  	EMIT2_off32(0xC7, add_1reg(0xC0, IA32_EAX), hi);
1134  	if (dstk)
1135  		/* mul dword ptr [ebp+off] */
1136  		EMIT3(0xF7, add_1reg(0x60, IA32_EBP), STACK_VAR(dst_lo));
1137  	else
1138  		/* mul dst_lo */
1139  		EMIT2(0xF7, add_1reg(0xE0, dst_lo));
1140  	/* add ecx,eax */
1141  	EMIT2(0x01, add_2reg(0xC0, IA32_ECX, IA32_EAX));
1142  
1143  	/* movl eax,imm32 */
1144  	EMIT2_off32(0xC7, add_1reg(0xC0, IA32_EAX), val);
1145  	if (dstk)
1146  		/* mul dword ptr [ebp+off] */
1147  		EMIT3(0xF7, add_1reg(0x60, IA32_EBP), STACK_VAR(dst_lo));
1148  	else
1149  		/* mul dst_lo */
1150  		EMIT2(0xF7, add_1reg(0xE0, dst_lo));
1151  
1152  	/* add ecx,edx */
1153  	EMIT2(0x01, add_2reg(0xC0, IA32_ECX, IA32_EDX));
1154  
1155  	if (dstk) {
1156  		/* mov dword ptr [ebp+off],eax */
1157  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EAX),
1158  		      STACK_VAR(dst_lo));
1159  		/* mov dword ptr [ebp+off],ecx */
1160  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_ECX),
1161  		      STACK_VAR(dst_hi));
1162  	} else {
1163  		/* mov dword ptr [ebp+off],eax */
1164  		EMIT2(0x89, add_2reg(0xC0, dst_lo, IA32_EAX));
1165  		/* mov dword ptr [ebp+off],ecx */
1166  		EMIT2(0x89, add_2reg(0xC0, dst_hi, IA32_ECX));
1167  	}
1168  
1169  	*pprog = prog;
1170  }
1171  
bpf_size_to_x86_bytes(int bpf_size)1172  static int bpf_size_to_x86_bytes(int bpf_size)
1173  {
1174  	if (bpf_size == BPF_W)
1175  		return 4;
1176  	else if (bpf_size == BPF_H)
1177  		return 2;
1178  	else if (bpf_size == BPF_B)
1179  		return 1;
1180  	else if (bpf_size == BPF_DW)
1181  		return 4; /* imm32 */
1182  	else
1183  		return 0;
1184  }
1185  
1186  struct jit_context {
1187  	int cleanup_addr; /* Epilogue code offset */
1188  };
1189  
1190  /* Maximum number of bytes emitted while JITing one eBPF insn */
1191  #define BPF_MAX_INSN_SIZE	128
1192  #define BPF_INSN_SAFETY		64
1193  
1194  #define PROLOGUE_SIZE 35
1195  
1196  /*
1197   * Emit prologue code for BPF program and check it's size.
1198   * bpf_tail_call helper will skip it while jumping into another program.
1199   */
emit_prologue(u8 ** pprog,u32 stack_depth)1200  static void emit_prologue(u8 **pprog, u32 stack_depth)
1201  {
1202  	u8 *prog = *pprog;
1203  	int cnt = 0;
1204  	const u8 *r1 = bpf2ia32[BPF_REG_1];
1205  	const u8 fplo = bpf2ia32[BPF_REG_FP][0];
1206  	const u8 fphi = bpf2ia32[BPF_REG_FP][1];
1207  	const u8 *tcc = bpf2ia32[TCALL_CNT];
1208  
1209  	/* push ebp */
1210  	EMIT1(0x55);
1211  	/* mov ebp,esp */
1212  	EMIT2(0x89, 0xE5);
1213  	/* push edi */
1214  	EMIT1(0x57);
1215  	/* push esi */
1216  	EMIT1(0x56);
1217  	/* push ebx */
1218  	EMIT1(0x53);
1219  
1220  	/* sub esp,STACK_SIZE */
1221  	EMIT2_off32(0x81, 0xEC, STACK_SIZE);
1222  	/* sub ebp,SCRATCH_SIZE+12*/
1223  	EMIT3(0x83, add_1reg(0xE8, IA32_EBP), SCRATCH_SIZE + 12);
1224  	/* xor ebx,ebx */
1225  	EMIT2(0x31, add_2reg(0xC0, IA32_EBX, IA32_EBX));
1226  
1227  	/* Set up BPF prog stack base register */
1228  	EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EBP), STACK_VAR(fplo));
1229  	EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EBX), STACK_VAR(fphi));
1230  
1231  	/* Move BPF_CTX (EAX) to BPF_REG_R1 */
1232  	/* mov dword ptr [ebp+off],eax */
1233  	EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EAX), STACK_VAR(r1[0]));
1234  	EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EBX), STACK_VAR(r1[1]));
1235  
1236  	/* Initialize Tail Count */
1237  	EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EBX), STACK_VAR(tcc[0]));
1238  	EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EBX), STACK_VAR(tcc[1]));
1239  
1240  	BUILD_BUG_ON(cnt != PROLOGUE_SIZE);
1241  	*pprog = prog;
1242  }
1243  
1244  /* Emit epilogue code for BPF program */
emit_epilogue(u8 ** pprog,u32 stack_depth)1245  static void emit_epilogue(u8 **pprog, u32 stack_depth)
1246  {
1247  	u8 *prog = *pprog;
1248  	const u8 *r0 = bpf2ia32[BPF_REG_0];
1249  	int cnt = 0;
1250  
1251  	/* mov eax,dword ptr [ebp+off]*/
1252  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX), STACK_VAR(r0[0]));
1253  	/* mov edx,dword ptr [ebp+off]*/
1254  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX), STACK_VAR(r0[1]));
1255  
1256  	/* add ebp,SCRATCH_SIZE+12*/
1257  	EMIT3(0x83, add_1reg(0xC0, IA32_EBP), SCRATCH_SIZE + 12);
1258  
1259  	/* mov ebx,dword ptr [ebp-12]*/
1260  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EBX), -12);
1261  	/* mov esi,dword ptr [ebp-8]*/
1262  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ESI), -8);
1263  	/* mov edi,dword ptr [ebp-4]*/
1264  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDI), -4);
1265  
1266  	EMIT1(0xC9); /* leave */
1267  	EMIT1(0xC3); /* ret */
1268  	*pprog = prog;
1269  }
1270  
emit_jmp_edx(u8 ** pprog,u8 * ip)1271  static int emit_jmp_edx(u8 **pprog, u8 *ip)
1272  {
1273  	u8 *prog = *pprog;
1274  	int cnt = 0;
1275  
1276  #ifdef CONFIG_RETPOLINE
1277  	EMIT1_off32(0xE9, (u8 *)__x86_indirect_thunk_edx - (ip + 5));
1278  #else
1279  	EMIT2(0xFF, 0xE2);
1280  #endif
1281  	*pprog = prog;
1282  
1283  	return cnt;
1284  }
1285  
1286  /*
1287   * Generate the following code:
1288   * ... bpf_tail_call(void *ctx, struct bpf_array *array, u64 index) ...
1289   *   if (index >= array->map.max_entries)
1290   *     goto out;
1291   *   if (++tail_call_cnt > MAX_TAIL_CALL_CNT)
1292   *     goto out;
1293   *   prog = array->ptrs[index];
1294   *   if (prog == NULL)
1295   *     goto out;
1296   *   goto *(prog->bpf_func + prologue_size);
1297   * out:
1298   */
emit_bpf_tail_call(u8 ** pprog,u8 * ip)1299  static void emit_bpf_tail_call(u8 **pprog, u8 *ip)
1300  {
1301  	u8 *prog = *pprog;
1302  	int cnt = 0;
1303  	const u8 *r1 = bpf2ia32[BPF_REG_1];
1304  	const u8 *r2 = bpf2ia32[BPF_REG_2];
1305  	const u8 *r3 = bpf2ia32[BPF_REG_3];
1306  	const u8 *tcc = bpf2ia32[TCALL_CNT];
1307  	u32 lo, hi;
1308  	static int jmp_label1 = -1;
1309  
1310  	/*
1311  	 * if (index >= array->map.max_entries)
1312  	 *     goto out;
1313  	 */
1314  	/* mov eax,dword ptr [ebp+off] */
1315  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX), STACK_VAR(r2[0]));
1316  	/* mov edx,dword ptr [ebp+off] */
1317  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX), STACK_VAR(r3[0]));
1318  
1319  	/* cmp dword ptr [eax+off],edx */
1320  	EMIT3(0x39, add_2reg(0x40, IA32_EAX, IA32_EDX),
1321  	      offsetof(struct bpf_array, map.max_entries));
1322  	/* jbe out */
1323  	EMIT2(IA32_JBE, jmp_label(jmp_label1, 2));
1324  
1325  	/*
1326  	 * if (tail_call_cnt++ >= MAX_TAIL_CALL_CNT)
1327  	 *     goto out;
1328  	 */
1329  	lo = (u32)MAX_TAIL_CALL_CNT;
1330  	hi = (u32)((u64)MAX_TAIL_CALL_CNT >> 32);
1331  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX), STACK_VAR(tcc[0]));
1332  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EBX), STACK_VAR(tcc[1]));
1333  
1334  	/* cmp edx,hi */
1335  	EMIT3(0x83, add_1reg(0xF8, IA32_EBX), hi);
1336  	EMIT2(IA32_JNE, 3);
1337  	/* cmp ecx,lo */
1338  	EMIT3(0x83, add_1reg(0xF8, IA32_ECX), lo);
1339  
1340  	/* jae out */
1341  	EMIT2(IA32_JAE, jmp_label(jmp_label1, 2));
1342  
1343  	/* add eax,0x1 */
1344  	EMIT3(0x83, add_1reg(0xC0, IA32_ECX), 0x01);
1345  	/* adc ebx,0x0 */
1346  	EMIT3(0x83, add_1reg(0xD0, IA32_EBX), 0x00);
1347  
1348  	/* mov dword ptr [ebp+off],eax */
1349  	EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_ECX), STACK_VAR(tcc[0]));
1350  	/* mov dword ptr [ebp+off],edx */
1351  	EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EBX), STACK_VAR(tcc[1]));
1352  
1353  	/* prog = array->ptrs[index]; */
1354  	/* mov edx, [eax + edx * 4 + offsetof(...)] */
1355  	EMIT3_off32(0x8B, 0x94, 0x90, offsetof(struct bpf_array, ptrs));
1356  
1357  	/*
1358  	 * if (prog == NULL)
1359  	 *     goto out;
1360  	 */
1361  	/* test edx,edx */
1362  	EMIT2(0x85, add_2reg(0xC0, IA32_EDX, IA32_EDX));
1363  	/* je out */
1364  	EMIT2(IA32_JE, jmp_label(jmp_label1, 2));
1365  
1366  	/* goto *(prog->bpf_func + prologue_size); */
1367  	/* mov edx, dword ptr [edx + 32] */
1368  	EMIT3(0x8B, add_2reg(0x40, IA32_EDX, IA32_EDX),
1369  	      offsetof(struct bpf_prog, bpf_func));
1370  	/* add edx,prologue_size */
1371  	EMIT3(0x83, add_1reg(0xC0, IA32_EDX), PROLOGUE_SIZE);
1372  
1373  	/* mov eax,dword ptr [ebp+off] */
1374  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX), STACK_VAR(r1[0]));
1375  
1376  	/*
1377  	 * Now we're ready to jump into next BPF program:
1378  	 * eax == ctx (1st arg)
1379  	 * edx == prog->bpf_func + prologue_size
1380  	 */
1381  	cnt += emit_jmp_edx(&prog, ip + cnt);
1382  
1383  	if (jmp_label1 == -1)
1384  		jmp_label1 = cnt;
1385  
1386  	/* out: */
1387  	*pprog = prog;
1388  }
1389  
1390  /* Push the scratch stack register on top of the stack. */
emit_push_r64(const u8 src[],u8 ** pprog)1391  static inline void emit_push_r64(const u8 src[], u8 **pprog)
1392  {
1393  	u8 *prog = *pprog;
1394  	int cnt = 0;
1395  
1396  	/* mov ecx,dword ptr [ebp+off] */
1397  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX), STACK_VAR(src_hi));
1398  	/* push ecx */
1399  	EMIT1(0x51);
1400  
1401  	/* mov ecx,dword ptr [ebp+off] */
1402  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX), STACK_VAR(src_lo));
1403  	/* push ecx */
1404  	EMIT1(0x51);
1405  
1406  	*pprog = prog;
1407  }
1408  
emit_push_r32(const u8 src[],u8 ** pprog)1409  static void emit_push_r32(const u8 src[], u8 **pprog)
1410  {
1411  	u8 *prog = *pprog;
1412  	int cnt = 0;
1413  
1414  	/* mov ecx,dword ptr [ebp+off] */
1415  	EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX), STACK_VAR(src_lo));
1416  	/* push ecx */
1417  	EMIT1(0x51);
1418  
1419  	*pprog = prog;
1420  }
1421  
get_cond_jmp_opcode(const u8 op,bool is_cmp_lo)1422  static u8 get_cond_jmp_opcode(const u8 op, bool is_cmp_lo)
1423  {
1424  	u8 jmp_cond;
1425  
1426  	/* Convert BPF opcode to x86 */
1427  	switch (op) {
1428  	case BPF_JEQ:
1429  		jmp_cond = IA32_JE;
1430  		break;
1431  	case BPF_JSET:
1432  	case BPF_JNE:
1433  		jmp_cond = IA32_JNE;
1434  		break;
1435  	case BPF_JGT:
1436  		/* GT is unsigned '>', JA in x86 */
1437  		jmp_cond = IA32_JA;
1438  		break;
1439  	case BPF_JLT:
1440  		/* LT is unsigned '<', JB in x86 */
1441  		jmp_cond = IA32_JB;
1442  		break;
1443  	case BPF_JGE:
1444  		/* GE is unsigned '>=', JAE in x86 */
1445  		jmp_cond = IA32_JAE;
1446  		break;
1447  	case BPF_JLE:
1448  		/* LE is unsigned '<=', JBE in x86 */
1449  		jmp_cond = IA32_JBE;
1450  		break;
1451  	case BPF_JSGT:
1452  		if (!is_cmp_lo)
1453  			/* Signed '>', GT in x86 */
1454  			jmp_cond = IA32_JG;
1455  		else
1456  			/* GT is unsigned '>', JA in x86 */
1457  			jmp_cond = IA32_JA;
1458  		break;
1459  	case BPF_JSLT:
1460  		if (!is_cmp_lo)
1461  			/* Signed '<', LT in x86 */
1462  			jmp_cond = IA32_JL;
1463  		else
1464  			/* LT is unsigned '<', JB in x86 */
1465  			jmp_cond = IA32_JB;
1466  		break;
1467  	case BPF_JSGE:
1468  		if (!is_cmp_lo)
1469  			/* Signed '>=', GE in x86 */
1470  			jmp_cond = IA32_JGE;
1471  		else
1472  			/* GE is unsigned '>=', JAE in x86 */
1473  			jmp_cond = IA32_JAE;
1474  		break;
1475  	case BPF_JSLE:
1476  		if (!is_cmp_lo)
1477  			/* Signed '<=', LE in x86 */
1478  			jmp_cond = IA32_JLE;
1479  		else
1480  			/* LE is unsigned '<=', JBE in x86 */
1481  			jmp_cond = IA32_JBE;
1482  		break;
1483  	default: /* to silence GCC warning */
1484  		jmp_cond = COND_JMP_OPCODE_INVALID;
1485  		break;
1486  	}
1487  
1488  	return jmp_cond;
1489  }
1490  
1491  /* i386 kernel compiles with "-mregparm=3".  From gcc document:
1492   *
1493   * ==== snippet ====
1494   * regparm (number)
1495   *	On x86-32 targets, the regparm attribute causes the compiler
1496   *	to pass arguments number one to (number) if they are of integral
1497   *	type in registers EAX, EDX, and ECX instead of on the stack.
1498   *	Functions that take a variable number of arguments continue
1499   *	to be passed all of their arguments on the stack.
1500   * ==== snippet ====
1501   *
1502   * The first three args of a function will be considered for
1503   * putting into the 32bit register EAX, EDX, and ECX.
1504   *
1505   * Two 32bit registers are used to pass a 64bit arg.
1506   *
1507   * For example,
1508   * void foo(u32 a, u32 b, u32 c, u32 d):
1509   *	u32 a: EAX
1510   *	u32 b: EDX
1511   *	u32 c: ECX
1512   *	u32 d: stack
1513   *
1514   * void foo(u64 a, u32 b, u32 c):
1515   *	u64 a: EAX (lo32) EDX (hi32)
1516   *	u32 b: ECX
1517   *	u32 c: stack
1518   *
1519   * void foo(u32 a, u64 b, u32 c):
1520   *	u32 a: EAX
1521   *	u64 b: EDX (lo32) ECX (hi32)
1522   *	u32 c: stack
1523   *
1524   * void foo(u32 a, u32 b, u64 c):
1525   *	u32 a: EAX
1526   *	u32 b: EDX
1527   *	u64 c: stack
1528   *
1529   * The return value will be stored in the EAX (and EDX for 64bit value).
1530   *
1531   * For example,
1532   * u32 foo(u32 a, u32 b, u32 c):
1533   *	return value: EAX
1534   *
1535   * u64 foo(u32 a, u32 b, u32 c):
1536   *	return value: EAX (lo32) EDX (hi32)
1537   *
1538   * Notes:
1539   *	The verifier only accepts function having integer and pointers
1540   *	as its args and return value, so it does not have
1541   *	struct-by-value.
1542   *
1543   * emit_kfunc_call() finds out the btf_func_model by calling
1544   * bpf_jit_find_kfunc_model().  A btf_func_model
1545   * has the details about the number of args, size of each arg,
1546   * and the size of the return value.
1547   *
1548   * It first decides how many args can be passed by EAX, EDX, and ECX.
1549   * That will decide what args should be pushed to the stack:
1550   * [first_stack_regno, last_stack_regno] are the bpf regnos
1551   * that should be pushed to the stack.
1552   *
1553   * It will first push all args to the stack because the push
1554   * will need to use ECX.  Then, it moves
1555   * [BPF_REG_1, first_stack_regno) to EAX, EDX, and ECX.
1556   *
1557   * When emitting a call (0xE8), it needs to figure out
1558   * the jmp_offset relative to the jit-insn address immediately
1559   * following the call (0xE8) instruction.  At this point, it knows
1560   * the end of the jit-insn address after completely translated the
1561   * current (BPF_JMP | BPF_CALL) bpf-insn.  It is passed as "end_addr"
1562   * to the emit_kfunc_call().  Thus, it can learn the "immediate-follow-call"
1563   * address by figuring out how many jit-insn is generated between
1564   * the call (0xE8) and the end_addr:
1565   *	- 0-1 jit-insn (3 bytes each) to restore the esp pointer if there
1566   *	  is arg pushed to the stack.
1567   *	- 0-2 jit-insns (3 bytes each) to handle the return value.
1568   */
emit_kfunc_call(const struct bpf_prog * bpf_prog,u8 * end_addr,const struct bpf_insn * insn,u8 ** pprog)1569  static int emit_kfunc_call(const struct bpf_prog *bpf_prog, u8 *end_addr,
1570  			   const struct bpf_insn *insn, u8 **pprog)
1571  {
1572  	const u8 arg_regs[] = { IA32_EAX, IA32_EDX, IA32_ECX };
1573  	int i, cnt = 0, first_stack_regno, last_stack_regno;
1574  	int free_arg_regs = ARRAY_SIZE(arg_regs);
1575  	const struct btf_func_model *fm;
1576  	int bytes_in_stack = 0;
1577  	const u8 *cur_arg_reg;
1578  	u8 *prog = *pprog;
1579  	s64 jmp_offset;
1580  
1581  	fm = bpf_jit_find_kfunc_model(bpf_prog, insn);
1582  	if (!fm)
1583  		return -EINVAL;
1584  
1585  	first_stack_regno = BPF_REG_1;
1586  	for (i = 0; i < fm->nr_args; i++) {
1587  		int regs_needed = fm->arg_size[i] > sizeof(u32) ? 2 : 1;
1588  
1589  		if (regs_needed > free_arg_regs)
1590  			break;
1591  
1592  		free_arg_regs -= regs_needed;
1593  		first_stack_regno++;
1594  	}
1595  
1596  	/* Push the args to the stack */
1597  	last_stack_regno = BPF_REG_0 + fm->nr_args;
1598  	for (i = last_stack_regno; i >= first_stack_regno; i--) {
1599  		if (fm->arg_size[i - 1] > sizeof(u32)) {
1600  			emit_push_r64(bpf2ia32[i], &prog);
1601  			bytes_in_stack += 8;
1602  		} else {
1603  			emit_push_r32(bpf2ia32[i], &prog);
1604  			bytes_in_stack += 4;
1605  		}
1606  	}
1607  
1608  	cur_arg_reg = &arg_regs[0];
1609  	for (i = BPF_REG_1; i < first_stack_regno; i++) {
1610  		/* mov e[adc]x,dword ptr [ebp+off] */
1611  		EMIT3(0x8B, add_2reg(0x40, IA32_EBP, *cur_arg_reg++),
1612  		      STACK_VAR(bpf2ia32[i][0]));
1613  		if (fm->arg_size[i - 1] > sizeof(u32))
1614  			/* mov e[adc]x,dword ptr [ebp+off] */
1615  			EMIT3(0x8B, add_2reg(0x40, IA32_EBP, *cur_arg_reg++),
1616  			      STACK_VAR(bpf2ia32[i][1]));
1617  	}
1618  
1619  	if (bytes_in_stack)
1620  		/* add esp,"bytes_in_stack" */
1621  		end_addr -= 3;
1622  
1623  	/* mov dword ptr [ebp+off],edx */
1624  	if (fm->ret_size > sizeof(u32))
1625  		end_addr -= 3;
1626  
1627  	/* mov dword ptr [ebp+off],eax */
1628  	if (fm->ret_size)
1629  		end_addr -= 3;
1630  
1631  	jmp_offset = (u8 *)__bpf_call_base + insn->imm - end_addr;
1632  	if (!is_simm32(jmp_offset)) {
1633  		pr_err("unsupported BPF kernel function jmp_offset:%lld\n",
1634  		       jmp_offset);
1635  		return -EINVAL;
1636  	}
1637  
1638  	EMIT1_off32(0xE8, jmp_offset);
1639  
1640  	if (fm->ret_size)
1641  		/* mov dword ptr [ebp+off],eax */
1642  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EAX),
1643  		      STACK_VAR(bpf2ia32[BPF_REG_0][0]));
1644  
1645  	if (fm->ret_size > sizeof(u32))
1646  		/* mov dword ptr [ebp+off],edx */
1647  		EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EDX),
1648  		      STACK_VAR(bpf2ia32[BPF_REG_0][1]));
1649  
1650  	if (bytes_in_stack)
1651  		/* add esp,"bytes_in_stack" */
1652  		EMIT3(0x83, add_1reg(0xC0, IA32_ESP), bytes_in_stack);
1653  
1654  	*pprog = prog;
1655  
1656  	return 0;
1657  }
1658  
do_jit(struct bpf_prog * bpf_prog,int * addrs,u8 * image,int oldproglen,struct jit_context * ctx)1659  static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image,
1660  		  int oldproglen, struct jit_context *ctx)
1661  {
1662  	struct bpf_insn *insn = bpf_prog->insnsi;
1663  	int insn_cnt = bpf_prog->len;
1664  	bool seen_exit = false;
1665  	u8 temp[BPF_MAX_INSN_SIZE + BPF_INSN_SAFETY];
1666  	int i, cnt = 0;
1667  	int proglen = 0;
1668  	u8 *prog = temp;
1669  
1670  	emit_prologue(&prog, bpf_prog->aux->stack_depth);
1671  
1672  	for (i = 0; i < insn_cnt; i++, insn++) {
1673  		const s32 imm32 = insn->imm;
1674  		const bool is64 = BPF_CLASS(insn->code) == BPF_ALU64;
1675  		const bool dstk = insn->dst_reg != BPF_REG_AX;
1676  		const bool sstk = insn->src_reg != BPF_REG_AX;
1677  		const u8 code = insn->code;
1678  		const u8 *dst = bpf2ia32[insn->dst_reg];
1679  		const u8 *src = bpf2ia32[insn->src_reg];
1680  		const u8 *r0 = bpf2ia32[BPF_REG_0];
1681  		s64 jmp_offset;
1682  		u8 jmp_cond;
1683  		int ilen;
1684  		u8 *func;
1685  
1686  		switch (code) {
1687  		/* ALU operations */
1688  		/* dst = src */
1689  		case BPF_ALU | BPF_MOV | BPF_K:
1690  		case BPF_ALU | BPF_MOV | BPF_X:
1691  		case BPF_ALU64 | BPF_MOV | BPF_K:
1692  		case BPF_ALU64 | BPF_MOV | BPF_X:
1693  			switch (BPF_SRC(code)) {
1694  			case BPF_X:
1695  				if (imm32 == 1) {
1696  					/* Special mov32 for zext. */
1697  					emit_ia32_mov_i(dst_hi, 0, dstk, &prog);
1698  					break;
1699  				}
1700  				emit_ia32_mov_r64(is64, dst, src, dstk, sstk,
1701  						  &prog, bpf_prog->aux);
1702  				break;
1703  			case BPF_K:
1704  				/* Sign-extend immediate value to dst reg */
1705  				emit_ia32_mov_i64(is64, dst, imm32,
1706  						  dstk, &prog);
1707  				break;
1708  			}
1709  			break;
1710  		/* dst = dst + src/imm */
1711  		/* dst = dst - src/imm */
1712  		/* dst = dst | src/imm */
1713  		/* dst = dst & src/imm */
1714  		/* dst = dst ^ src/imm */
1715  		/* dst = dst * src/imm */
1716  		/* dst = dst << src */
1717  		/* dst = dst >> src */
1718  		case BPF_ALU | BPF_ADD | BPF_K:
1719  		case BPF_ALU | BPF_ADD | BPF_X:
1720  		case BPF_ALU | BPF_SUB | BPF_K:
1721  		case BPF_ALU | BPF_SUB | BPF_X:
1722  		case BPF_ALU | BPF_OR | BPF_K:
1723  		case BPF_ALU | BPF_OR | BPF_X:
1724  		case BPF_ALU | BPF_AND | BPF_K:
1725  		case BPF_ALU | BPF_AND | BPF_X:
1726  		case BPF_ALU | BPF_XOR | BPF_K:
1727  		case BPF_ALU | BPF_XOR | BPF_X:
1728  		case BPF_ALU64 | BPF_ADD | BPF_K:
1729  		case BPF_ALU64 | BPF_ADD | BPF_X:
1730  		case BPF_ALU64 | BPF_SUB | BPF_K:
1731  		case BPF_ALU64 | BPF_SUB | BPF_X:
1732  		case BPF_ALU64 | BPF_OR | BPF_K:
1733  		case BPF_ALU64 | BPF_OR | BPF_X:
1734  		case BPF_ALU64 | BPF_AND | BPF_K:
1735  		case BPF_ALU64 | BPF_AND | BPF_X:
1736  		case BPF_ALU64 | BPF_XOR | BPF_K:
1737  		case BPF_ALU64 | BPF_XOR | BPF_X:
1738  			switch (BPF_SRC(code)) {
1739  			case BPF_X:
1740  				emit_ia32_alu_r64(is64, BPF_OP(code), dst,
1741  						  src, dstk, sstk, &prog,
1742  						  bpf_prog->aux);
1743  				break;
1744  			case BPF_K:
1745  				emit_ia32_alu_i64(is64, BPF_OP(code), dst,
1746  						  imm32, dstk, &prog,
1747  						  bpf_prog->aux);
1748  				break;
1749  			}
1750  			break;
1751  		case BPF_ALU | BPF_MUL | BPF_K:
1752  		case BPF_ALU | BPF_MUL | BPF_X:
1753  			switch (BPF_SRC(code)) {
1754  			case BPF_X:
1755  				emit_ia32_mul_r(dst_lo, src_lo, dstk,
1756  						sstk, &prog);
1757  				break;
1758  			case BPF_K:
1759  				/* mov ecx,imm32*/
1760  				EMIT2_off32(0xC7, add_1reg(0xC0, IA32_ECX),
1761  					    imm32);
1762  				emit_ia32_mul_r(dst_lo, IA32_ECX, dstk,
1763  						false, &prog);
1764  				break;
1765  			}
1766  			if (!bpf_prog->aux->verifier_zext)
1767  				emit_ia32_mov_i(dst_hi, 0, dstk, &prog);
1768  			break;
1769  		case BPF_ALU | BPF_LSH | BPF_X:
1770  		case BPF_ALU | BPF_RSH | BPF_X:
1771  		case BPF_ALU | BPF_ARSH | BPF_K:
1772  		case BPF_ALU | BPF_ARSH | BPF_X:
1773  			switch (BPF_SRC(code)) {
1774  			case BPF_X:
1775  				emit_ia32_shift_r(BPF_OP(code), dst_lo, src_lo,
1776  						  dstk, sstk, &prog);
1777  				break;
1778  			case BPF_K:
1779  				/* mov ecx,imm32*/
1780  				EMIT2_off32(0xC7, add_1reg(0xC0, IA32_ECX),
1781  					    imm32);
1782  				emit_ia32_shift_r(BPF_OP(code), dst_lo,
1783  						  IA32_ECX, dstk, false,
1784  						  &prog);
1785  				break;
1786  			}
1787  			if (!bpf_prog->aux->verifier_zext)
1788  				emit_ia32_mov_i(dst_hi, 0, dstk, &prog);
1789  			break;
1790  		/* dst = dst / src(imm) */
1791  		/* dst = dst % src(imm) */
1792  		case BPF_ALU | BPF_DIV | BPF_K:
1793  		case BPF_ALU | BPF_DIV | BPF_X:
1794  		case BPF_ALU | BPF_MOD | BPF_K:
1795  		case BPF_ALU | BPF_MOD | BPF_X:
1796  			switch (BPF_SRC(code)) {
1797  			case BPF_X:
1798  				emit_ia32_div_mod_r(BPF_OP(code), dst_lo,
1799  						    src_lo, dstk, sstk, &prog);
1800  				break;
1801  			case BPF_K:
1802  				/* mov ecx,imm32*/
1803  				EMIT2_off32(0xC7, add_1reg(0xC0, IA32_ECX),
1804  					    imm32);
1805  				emit_ia32_div_mod_r(BPF_OP(code), dst_lo,
1806  						    IA32_ECX, dstk, false,
1807  						    &prog);
1808  				break;
1809  			}
1810  			if (!bpf_prog->aux->verifier_zext)
1811  				emit_ia32_mov_i(dst_hi, 0, dstk, &prog);
1812  			break;
1813  		case BPF_ALU64 | BPF_DIV | BPF_K:
1814  		case BPF_ALU64 | BPF_DIV | BPF_X:
1815  		case BPF_ALU64 | BPF_MOD | BPF_K:
1816  		case BPF_ALU64 | BPF_MOD | BPF_X:
1817  			goto notyet;
1818  		/* dst = dst >> imm */
1819  		/* dst = dst << imm */
1820  		case BPF_ALU | BPF_RSH | BPF_K:
1821  		case BPF_ALU | BPF_LSH | BPF_K:
1822  			if (unlikely(imm32 > 31))
1823  				return -EINVAL;
1824  			/* mov ecx,imm32*/
1825  			EMIT2_off32(0xC7, add_1reg(0xC0, IA32_ECX), imm32);
1826  			emit_ia32_shift_r(BPF_OP(code), dst_lo, IA32_ECX, dstk,
1827  					  false, &prog);
1828  			if (!bpf_prog->aux->verifier_zext)
1829  				emit_ia32_mov_i(dst_hi, 0, dstk, &prog);
1830  			break;
1831  		/* dst = dst << imm */
1832  		case BPF_ALU64 | BPF_LSH | BPF_K:
1833  			if (unlikely(imm32 > 63))
1834  				return -EINVAL;
1835  			emit_ia32_lsh_i64(dst, imm32, dstk, &prog);
1836  			break;
1837  		/* dst = dst >> imm */
1838  		case BPF_ALU64 | BPF_RSH | BPF_K:
1839  			if (unlikely(imm32 > 63))
1840  				return -EINVAL;
1841  			emit_ia32_rsh_i64(dst, imm32, dstk, &prog);
1842  			break;
1843  		/* dst = dst << src */
1844  		case BPF_ALU64 | BPF_LSH | BPF_X:
1845  			emit_ia32_lsh_r64(dst, src, dstk, sstk, &prog);
1846  			break;
1847  		/* dst = dst >> src */
1848  		case BPF_ALU64 | BPF_RSH | BPF_X:
1849  			emit_ia32_rsh_r64(dst, src, dstk, sstk, &prog);
1850  			break;
1851  		/* dst = dst >> src (signed) */
1852  		case BPF_ALU64 | BPF_ARSH | BPF_X:
1853  			emit_ia32_arsh_r64(dst, src, dstk, sstk, &prog);
1854  			break;
1855  		/* dst = dst >> imm (signed) */
1856  		case BPF_ALU64 | BPF_ARSH | BPF_K:
1857  			if (unlikely(imm32 > 63))
1858  				return -EINVAL;
1859  			emit_ia32_arsh_i64(dst, imm32, dstk, &prog);
1860  			break;
1861  		/* dst = ~dst */
1862  		case BPF_ALU | BPF_NEG:
1863  			emit_ia32_alu_i(is64, false, BPF_OP(code),
1864  					dst_lo, 0, dstk, &prog);
1865  			if (!bpf_prog->aux->verifier_zext)
1866  				emit_ia32_mov_i(dst_hi, 0, dstk, &prog);
1867  			break;
1868  		/* dst = ~dst (64 bit) */
1869  		case BPF_ALU64 | BPF_NEG:
1870  			emit_ia32_neg64(dst, dstk, &prog);
1871  			break;
1872  		/* dst = dst * src/imm */
1873  		case BPF_ALU64 | BPF_MUL | BPF_X:
1874  		case BPF_ALU64 | BPF_MUL | BPF_K:
1875  			switch (BPF_SRC(code)) {
1876  			case BPF_X:
1877  				emit_ia32_mul_r64(dst, src, dstk, sstk, &prog);
1878  				break;
1879  			case BPF_K:
1880  				emit_ia32_mul_i64(dst, imm32, dstk, &prog);
1881  				break;
1882  			}
1883  			break;
1884  		/* dst = htole(dst) */
1885  		case BPF_ALU | BPF_END | BPF_FROM_LE:
1886  			emit_ia32_to_le_r64(dst, imm32, dstk, &prog,
1887  					    bpf_prog->aux);
1888  			break;
1889  		/* dst = htobe(dst) */
1890  		case BPF_ALU | BPF_END | BPF_FROM_BE:
1891  			emit_ia32_to_be_r64(dst, imm32, dstk, &prog,
1892  					    bpf_prog->aux);
1893  			break;
1894  		/* dst = imm64 */
1895  		case BPF_LD | BPF_IMM | BPF_DW: {
1896  			s32 hi, lo = imm32;
1897  
1898  			hi = insn[1].imm;
1899  			emit_ia32_mov_i(dst_lo, lo, dstk, &prog);
1900  			emit_ia32_mov_i(dst_hi, hi, dstk, &prog);
1901  			insn++;
1902  			i++;
1903  			break;
1904  		}
1905  		/* speculation barrier */
1906  		case BPF_ST | BPF_NOSPEC:
1907  			if (boot_cpu_has(X86_FEATURE_XMM2))
1908  				/* Emit 'lfence' */
1909  				EMIT3(0x0F, 0xAE, 0xE8);
1910  			break;
1911  		/* ST: *(u8*)(dst_reg + off) = imm */
1912  		case BPF_ST | BPF_MEM | BPF_H:
1913  		case BPF_ST | BPF_MEM | BPF_B:
1914  		case BPF_ST | BPF_MEM | BPF_W:
1915  		case BPF_ST | BPF_MEM | BPF_DW:
1916  			if (dstk)
1917  				/* mov eax,dword ptr [ebp+off] */
1918  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
1919  				      STACK_VAR(dst_lo));
1920  			else
1921  				/* mov eax,dst_lo */
1922  				EMIT2(0x8B, add_2reg(0xC0, dst_lo, IA32_EAX));
1923  
1924  			switch (BPF_SIZE(code)) {
1925  			case BPF_B:
1926  				EMIT(0xC6, 1); break;
1927  			case BPF_H:
1928  				EMIT2(0x66, 0xC7); break;
1929  			case BPF_W:
1930  			case BPF_DW:
1931  				EMIT(0xC7, 1); break;
1932  			}
1933  
1934  			if (is_imm8(insn->off))
1935  				EMIT2(add_1reg(0x40, IA32_EAX), insn->off);
1936  			else
1937  				EMIT1_off32(add_1reg(0x80, IA32_EAX),
1938  					    insn->off);
1939  			EMIT(imm32, bpf_size_to_x86_bytes(BPF_SIZE(code)));
1940  
1941  			if (BPF_SIZE(code) == BPF_DW) {
1942  				u32 hi;
1943  
1944  				hi = imm32 & (1<<31) ? (u32)~0 : 0;
1945  				EMIT2_off32(0xC7, add_1reg(0x80, IA32_EAX),
1946  					    insn->off + 4);
1947  				EMIT(hi, 4);
1948  			}
1949  			break;
1950  
1951  		/* STX: *(u8*)(dst_reg + off) = src_reg */
1952  		case BPF_STX | BPF_MEM | BPF_B:
1953  		case BPF_STX | BPF_MEM | BPF_H:
1954  		case BPF_STX | BPF_MEM | BPF_W:
1955  		case BPF_STX | BPF_MEM | BPF_DW:
1956  			if (dstk)
1957  				/* mov eax,dword ptr [ebp+off] */
1958  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
1959  				      STACK_VAR(dst_lo));
1960  			else
1961  				/* mov eax,dst_lo */
1962  				EMIT2(0x8B, add_2reg(0xC0, dst_lo, IA32_EAX));
1963  
1964  			if (sstk)
1965  				/* mov edx,dword ptr [ebp+off] */
1966  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX),
1967  				      STACK_VAR(src_lo));
1968  			else
1969  				/* mov edx,src_lo */
1970  				EMIT2(0x8B, add_2reg(0xC0, src_lo, IA32_EDX));
1971  
1972  			switch (BPF_SIZE(code)) {
1973  			case BPF_B:
1974  				EMIT(0x88, 1); break;
1975  			case BPF_H:
1976  				EMIT2(0x66, 0x89); break;
1977  			case BPF_W:
1978  			case BPF_DW:
1979  				EMIT(0x89, 1); break;
1980  			}
1981  
1982  			if (is_imm8(insn->off))
1983  				EMIT2(add_2reg(0x40, IA32_EAX, IA32_EDX),
1984  				      insn->off);
1985  			else
1986  				EMIT1_off32(add_2reg(0x80, IA32_EAX, IA32_EDX),
1987  					    insn->off);
1988  
1989  			if (BPF_SIZE(code) == BPF_DW) {
1990  				if (sstk)
1991  					/* mov edi,dword ptr [ebp+off] */
1992  					EMIT3(0x8B, add_2reg(0x40, IA32_EBP,
1993  							     IA32_EDX),
1994  					      STACK_VAR(src_hi));
1995  				else
1996  					/* mov edi,src_hi */
1997  					EMIT2(0x8B, add_2reg(0xC0, src_hi,
1998  							     IA32_EDX));
1999  				EMIT1(0x89);
2000  				if (is_imm8(insn->off + 4)) {
2001  					EMIT2(add_2reg(0x40, IA32_EAX,
2002  						       IA32_EDX),
2003  					      insn->off + 4);
2004  				} else {
2005  					EMIT1(add_2reg(0x80, IA32_EAX,
2006  						       IA32_EDX));
2007  					EMIT(insn->off + 4, 4);
2008  				}
2009  			}
2010  			break;
2011  
2012  		/* LDX: dst_reg = *(u8*)(src_reg + off) */
2013  		case BPF_LDX | BPF_MEM | BPF_B:
2014  		case BPF_LDX | BPF_MEM | BPF_H:
2015  		case BPF_LDX | BPF_MEM | BPF_W:
2016  		case BPF_LDX | BPF_MEM | BPF_DW:
2017  			if (sstk)
2018  				/* mov eax,dword ptr [ebp+off] */
2019  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
2020  				      STACK_VAR(src_lo));
2021  			else
2022  				/* mov eax,dword ptr [ebp+off] */
2023  				EMIT2(0x8B, add_2reg(0xC0, src_lo, IA32_EAX));
2024  
2025  			switch (BPF_SIZE(code)) {
2026  			case BPF_B:
2027  				EMIT2(0x0F, 0xB6); break;
2028  			case BPF_H:
2029  				EMIT2(0x0F, 0xB7); break;
2030  			case BPF_W:
2031  			case BPF_DW:
2032  				EMIT(0x8B, 1); break;
2033  			}
2034  
2035  			if (is_imm8(insn->off))
2036  				EMIT2(add_2reg(0x40, IA32_EAX, IA32_EDX),
2037  				      insn->off);
2038  			else
2039  				EMIT1_off32(add_2reg(0x80, IA32_EAX, IA32_EDX),
2040  					    insn->off);
2041  
2042  			if (dstk)
2043  				/* mov dword ptr [ebp+off],edx */
2044  				EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EDX),
2045  				      STACK_VAR(dst_lo));
2046  			else
2047  				/* mov dst_lo,edx */
2048  				EMIT2(0x89, add_2reg(0xC0, dst_lo, IA32_EDX));
2049  			switch (BPF_SIZE(code)) {
2050  			case BPF_B:
2051  			case BPF_H:
2052  			case BPF_W:
2053  				if (bpf_prog->aux->verifier_zext)
2054  					break;
2055  				if (dstk) {
2056  					EMIT3(0xC7, add_1reg(0x40, IA32_EBP),
2057  					      STACK_VAR(dst_hi));
2058  					EMIT(0x0, 4);
2059  				} else {
2060  					/* xor dst_hi,dst_hi */
2061  					EMIT2(0x33,
2062  					      add_2reg(0xC0, dst_hi, dst_hi));
2063  				}
2064  				break;
2065  			case BPF_DW:
2066  				EMIT2_off32(0x8B,
2067  					    add_2reg(0x80, IA32_EAX, IA32_EDX),
2068  					    insn->off + 4);
2069  				if (dstk)
2070  					EMIT3(0x89,
2071  					      add_2reg(0x40, IA32_EBP,
2072  						       IA32_EDX),
2073  					      STACK_VAR(dst_hi));
2074  				else
2075  					EMIT2(0x89,
2076  					      add_2reg(0xC0, dst_hi, IA32_EDX));
2077  				break;
2078  			default:
2079  				break;
2080  			}
2081  			break;
2082  		/* call */
2083  		case BPF_JMP | BPF_CALL:
2084  		{
2085  			const u8 *r1 = bpf2ia32[BPF_REG_1];
2086  			const u8 *r2 = bpf2ia32[BPF_REG_2];
2087  			const u8 *r3 = bpf2ia32[BPF_REG_3];
2088  			const u8 *r4 = bpf2ia32[BPF_REG_4];
2089  			const u8 *r5 = bpf2ia32[BPF_REG_5];
2090  
2091  			if (insn->src_reg == BPF_PSEUDO_CALL)
2092  				goto notyet;
2093  
2094  			if (insn->src_reg == BPF_PSEUDO_KFUNC_CALL) {
2095  				int err;
2096  
2097  				err = emit_kfunc_call(bpf_prog,
2098  						      image + addrs[i],
2099  						      insn, &prog);
2100  
2101  				if (err)
2102  					return err;
2103  				break;
2104  			}
2105  
2106  			func = (u8 *) __bpf_call_base + imm32;
2107  			jmp_offset = func - (image + addrs[i]);
2108  
2109  			if (!imm32 || !is_simm32(jmp_offset)) {
2110  				pr_err("unsupported BPF func %d addr %p image %p\n",
2111  				       imm32, func, image);
2112  				return -EINVAL;
2113  			}
2114  
2115  			/* mov eax,dword ptr [ebp+off] */
2116  			EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
2117  			      STACK_VAR(r1[0]));
2118  			/* mov edx,dword ptr [ebp+off] */
2119  			EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX),
2120  			      STACK_VAR(r1[1]));
2121  
2122  			emit_push_r64(r5, &prog);
2123  			emit_push_r64(r4, &prog);
2124  			emit_push_r64(r3, &prog);
2125  			emit_push_r64(r2, &prog);
2126  
2127  			EMIT1_off32(0xE8, jmp_offset + 9);
2128  
2129  			/* mov dword ptr [ebp+off],eax */
2130  			EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EAX),
2131  			      STACK_VAR(r0[0]));
2132  			/* mov dword ptr [ebp+off],edx */
2133  			EMIT3(0x89, add_2reg(0x40, IA32_EBP, IA32_EDX),
2134  			      STACK_VAR(r0[1]));
2135  
2136  			/* add esp,32 */
2137  			EMIT3(0x83, add_1reg(0xC0, IA32_ESP), 32);
2138  			break;
2139  		}
2140  		case BPF_JMP | BPF_TAIL_CALL:
2141  			emit_bpf_tail_call(&prog, image + addrs[i - 1]);
2142  			break;
2143  
2144  		/* cond jump */
2145  		case BPF_JMP | BPF_JEQ | BPF_X:
2146  		case BPF_JMP | BPF_JNE | BPF_X:
2147  		case BPF_JMP | BPF_JGT | BPF_X:
2148  		case BPF_JMP | BPF_JLT | BPF_X:
2149  		case BPF_JMP | BPF_JGE | BPF_X:
2150  		case BPF_JMP | BPF_JLE | BPF_X:
2151  		case BPF_JMP32 | BPF_JEQ | BPF_X:
2152  		case BPF_JMP32 | BPF_JNE | BPF_X:
2153  		case BPF_JMP32 | BPF_JGT | BPF_X:
2154  		case BPF_JMP32 | BPF_JLT | BPF_X:
2155  		case BPF_JMP32 | BPF_JGE | BPF_X:
2156  		case BPF_JMP32 | BPF_JLE | BPF_X:
2157  		case BPF_JMP32 | BPF_JSGT | BPF_X:
2158  		case BPF_JMP32 | BPF_JSLE | BPF_X:
2159  		case BPF_JMP32 | BPF_JSLT | BPF_X:
2160  		case BPF_JMP32 | BPF_JSGE | BPF_X: {
2161  			bool is_jmp64 = BPF_CLASS(insn->code) == BPF_JMP;
2162  			u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
2163  			u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
2164  			u8 sreg_lo = sstk ? IA32_ECX : src_lo;
2165  			u8 sreg_hi = sstk ? IA32_EBX : src_hi;
2166  
2167  			if (dstk) {
2168  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
2169  				      STACK_VAR(dst_lo));
2170  				if (is_jmp64)
2171  					EMIT3(0x8B,
2172  					      add_2reg(0x40, IA32_EBP,
2173  						       IA32_EDX),
2174  					      STACK_VAR(dst_hi));
2175  			}
2176  
2177  			if (sstk) {
2178  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX),
2179  				      STACK_VAR(src_lo));
2180  				if (is_jmp64)
2181  					EMIT3(0x8B,
2182  					      add_2reg(0x40, IA32_EBP,
2183  						       IA32_EBX),
2184  					      STACK_VAR(src_hi));
2185  			}
2186  
2187  			if (is_jmp64) {
2188  				/* cmp dreg_hi,sreg_hi */
2189  				EMIT2(0x39, add_2reg(0xC0, dreg_hi, sreg_hi));
2190  				EMIT2(IA32_JNE, 2);
2191  			}
2192  			/* cmp dreg_lo,sreg_lo */
2193  			EMIT2(0x39, add_2reg(0xC0, dreg_lo, sreg_lo));
2194  			goto emit_cond_jmp;
2195  		}
2196  		case BPF_JMP | BPF_JSGT | BPF_X:
2197  		case BPF_JMP | BPF_JSLE | BPF_X:
2198  		case BPF_JMP | BPF_JSLT | BPF_X:
2199  		case BPF_JMP | BPF_JSGE | BPF_X: {
2200  			u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
2201  			u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
2202  			u8 sreg_lo = sstk ? IA32_ECX : src_lo;
2203  			u8 sreg_hi = sstk ? IA32_EBX : src_hi;
2204  
2205  			if (dstk) {
2206  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
2207  				      STACK_VAR(dst_lo));
2208  				EMIT3(0x8B,
2209  				      add_2reg(0x40, IA32_EBP,
2210  					       IA32_EDX),
2211  				      STACK_VAR(dst_hi));
2212  			}
2213  
2214  			if (sstk) {
2215  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX),
2216  				      STACK_VAR(src_lo));
2217  				EMIT3(0x8B,
2218  				      add_2reg(0x40, IA32_EBP,
2219  					       IA32_EBX),
2220  				      STACK_VAR(src_hi));
2221  			}
2222  
2223  			/* cmp dreg_hi,sreg_hi */
2224  			EMIT2(0x39, add_2reg(0xC0, dreg_hi, sreg_hi));
2225  			EMIT2(IA32_JNE, 10);
2226  			/* cmp dreg_lo,sreg_lo */
2227  			EMIT2(0x39, add_2reg(0xC0, dreg_lo, sreg_lo));
2228  			goto emit_cond_jmp_signed;
2229  		}
2230  		case BPF_JMP | BPF_JSET | BPF_X:
2231  		case BPF_JMP32 | BPF_JSET | BPF_X: {
2232  			bool is_jmp64 = BPF_CLASS(insn->code) == BPF_JMP;
2233  			u8 dreg_lo = IA32_EAX;
2234  			u8 dreg_hi = IA32_EDX;
2235  			u8 sreg_lo = sstk ? IA32_ECX : src_lo;
2236  			u8 sreg_hi = sstk ? IA32_EBX : src_hi;
2237  
2238  			if (dstk) {
2239  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
2240  				      STACK_VAR(dst_lo));
2241  				if (is_jmp64)
2242  					EMIT3(0x8B,
2243  					      add_2reg(0x40, IA32_EBP,
2244  						       IA32_EDX),
2245  					      STACK_VAR(dst_hi));
2246  			} else {
2247  				/* mov dreg_lo,dst_lo */
2248  				EMIT2(0x89, add_2reg(0xC0, dreg_lo, dst_lo));
2249  				if (is_jmp64)
2250  					/* mov dreg_hi,dst_hi */
2251  					EMIT2(0x89,
2252  					      add_2reg(0xC0, dreg_hi, dst_hi));
2253  			}
2254  
2255  			if (sstk) {
2256  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX),
2257  				      STACK_VAR(src_lo));
2258  				if (is_jmp64)
2259  					EMIT3(0x8B,
2260  					      add_2reg(0x40, IA32_EBP,
2261  						       IA32_EBX),
2262  					      STACK_VAR(src_hi));
2263  			}
2264  			/* and dreg_lo,sreg_lo */
2265  			EMIT2(0x23, add_2reg(0xC0, sreg_lo, dreg_lo));
2266  			if (is_jmp64) {
2267  				/* and dreg_hi,sreg_hi */
2268  				EMIT2(0x23, add_2reg(0xC0, sreg_hi, dreg_hi));
2269  				/* or dreg_lo,dreg_hi */
2270  				EMIT2(0x09, add_2reg(0xC0, dreg_lo, dreg_hi));
2271  			}
2272  			goto emit_cond_jmp;
2273  		}
2274  		case BPF_JMP | BPF_JSET | BPF_K:
2275  		case BPF_JMP32 | BPF_JSET | BPF_K: {
2276  			bool is_jmp64 = BPF_CLASS(insn->code) == BPF_JMP;
2277  			u8 dreg_lo = IA32_EAX;
2278  			u8 dreg_hi = IA32_EDX;
2279  			u8 sreg_lo = IA32_ECX;
2280  			u8 sreg_hi = IA32_EBX;
2281  			u32 hi;
2282  
2283  			if (dstk) {
2284  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
2285  				      STACK_VAR(dst_lo));
2286  				if (is_jmp64)
2287  					EMIT3(0x8B,
2288  					      add_2reg(0x40, IA32_EBP,
2289  						       IA32_EDX),
2290  					      STACK_VAR(dst_hi));
2291  			} else {
2292  				/* mov dreg_lo,dst_lo */
2293  				EMIT2(0x89, add_2reg(0xC0, dreg_lo, dst_lo));
2294  				if (is_jmp64)
2295  					/* mov dreg_hi,dst_hi */
2296  					EMIT2(0x89,
2297  					      add_2reg(0xC0, dreg_hi, dst_hi));
2298  			}
2299  
2300  			/* mov ecx,imm32 */
2301  			EMIT2_off32(0xC7, add_1reg(0xC0, sreg_lo), imm32);
2302  
2303  			/* and dreg_lo,sreg_lo */
2304  			EMIT2(0x23, add_2reg(0xC0, sreg_lo, dreg_lo));
2305  			if (is_jmp64) {
2306  				hi = imm32 & (1 << 31) ? (u32)~0 : 0;
2307  				/* mov ebx,imm32 */
2308  				EMIT2_off32(0xC7, add_1reg(0xC0, sreg_hi), hi);
2309  				/* and dreg_hi,sreg_hi */
2310  				EMIT2(0x23, add_2reg(0xC0, sreg_hi, dreg_hi));
2311  				/* or dreg_lo,dreg_hi */
2312  				EMIT2(0x09, add_2reg(0xC0, dreg_lo, dreg_hi));
2313  			}
2314  			goto emit_cond_jmp;
2315  		}
2316  		case BPF_JMP | BPF_JEQ | BPF_K:
2317  		case BPF_JMP | BPF_JNE | BPF_K:
2318  		case BPF_JMP | BPF_JGT | BPF_K:
2319  		case BPF_JMP | BPF_JLT | BPF_K:
2320  		case BPF_JMP | BPF_JGE | BPF_K:
2321  		case BPF_JMP | BPF_JLE | BPF_K:
2322  		case BPF_JMP32 | BPF_JEQ | BPF_K:
2323  		case BPF_JMP32 | BPF_JNE | BPF_K:
2324  		case BPF_JMP32 | BPF_JGT | BPF_K:
2325  		case BPF_JMP32 | BPF_JLT | BPF_K:
2326  		case BPF_JMP32 | BPF_JGE | BPF_K:
2327  		case BPF_JMP32 | BPF_JLE | BPF_K:
2328  		case BPF_JMP32 | BPF_JSGT | BPF_K:
2329  		case BPF_JMP32 | BPF_JSLE | BPF_K:
2330  		case BPF_JMP32 | BPF_JSLT | BPF_K:
2331  		case BPF_JMP32 | BPF_JSGE | BPF_K: {
2332  			bool is_jmp64 = BPF_CLASS(insn->code) == BPF_JMP;
2333  			u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
2334  			u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
2335  			u8 sreg_lo = IA32_ECX;
2336  			u8 sreg_hi = IA32_EBX;
2337  			u32 hi;
2338  
2339  			if (dstk) {
2340  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
2341  				      STACK_VAR(dst_lo));
2342  				if (is_jmp64)
2343  					EMIT3(0x8B,
2344  					      add_2reg(0x40, IA32_EBP,
2345  						       IA32_EDX),
2346  					      STACK_VAR(dst_hi));
2347  			}
2348  
2349  			/* mov ecx,imm32 */
2350  			EMIT2_off32(0xC7, add_1reg(0xC0, IA32_ECX), imm32);
2351  			if (is_jmp64) {
2352  				hi = imm32 & (1 << 31) ? (u32)~0 : 0;
2353  				/* mov ebx,imm32 */
2354  				EMIT2_off32(0xC7, add_1reg(0xC0, IA32_EBX), hi);
2355  				/* cmp dreg_hi,sreg_hi */
2356  				EMIT2(0x39, add_2reg(0xC0, dreg_hi, sreg_hi));
2357  				EMIT2(IA32_JNE, 2);
2358  			}
2359  			/* cmp dreg_lo,sreg_lo */
2360  			EMIT2(0x39, add_2reg(0xC0, dreg_lo, sreg_lo));
2361  
2362  emit_cond_jmp:		jmp_cond = get_cond_jmp_opcode(BPF_OP(code), false);
2363  			if (jmp_cond == COND_JMP_OPCODE_INVALID)
2364  				return -EFAULT;
2365  			jmp_offset = addrs[i + insn->off] - addrs[i];
2366  			if (is_imm8(jmp_offset)) {
2367  				EMIT2(jmp_cond, jmp_offset);
2368  			} else if (is_simm32(jmp_offset)) {
2369  				EMIT2_off32(0x0F, jmp_cond + 0x10, jmp_offset);
2370  			} else {
2371  				pr_err("cond_jmp gen bug %llx\n", jmp_offset);
2372  				return -EFAULT;
2373  			}
2374  			break;
2375  		}
2376  		case BPF_JMP | BPF_JSGT | BPF_K:
2377  		case BPF_JMP | BPF_JSLE | BPF_K:
2378  		case BPF_JMP | BPF_JSLT | BPF_K:
2379  		case BPF_JMP | BPF_JSGE | BPF_K: {
2380  			u8 dreg_lo = dstk ? IA32_EAX : dst_lo;
2381  			u8 dreg_hi = dstk ? IA32_EDX : dst_hi;
2382  			u8 sreg_lo = IA32_ECX;
2383  			u8 sreg_hi = IA32_EBX;
2384  			u32 hi;
2385  
2386  			if (dstk) {
2387  				EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX),
2388  				      STACK_VAR(dst_lo));
2389  				EMIT3(0x8B,
2390  				      add_2reg(0x40, IA32_EBP,
2391  					       IA32_EDX),
2392  				      STACK_VAR(dst_hi));
2393  			}
2394  
2395  			/* mov ecx,imm32 */
2396  			EMIT2_off32(0xC7, add_1reg(0xC0, IA32_ECX), imm32);
2397  			hi = imm32 & (1 << 31) ? (u32)~0 : 0;
2398  			/* mov ebx,imm32 */
2399  			EMIT2_off32(0xC7, add_1reg(0xC0, IA32_EBX), hi);
2400  			/* cmp dreg_hi,sreg_hi */
2401  			EMIT2(0x39, add_2reg(0xC0, dreg_hi, sreg_hi));
2402  			EMIT2(IA32_JNE, 10);
2403  			/* cmp dreg_lo,sreg_lo */
2404  			EMIT2(0x39, add_2reg(0xC0, dreg_lo, sreg_lo));
2405  
2406  			/*
2407  			 * For simplicity of branch offset computation,
2408  			 * let's use fixed jump coding here.
2409  			 */
2410  emit_cond_jmp_signed:	/* Check the condition for low 32-bit comparison */
2411  			jmp_cond = get_cond_jmp_opcode(BPF_OP(code), true);
2412  			if (jmp_cond == COND_JMP_OPCODE_INVALID)
2413  				return -EFAULT;
2414  			jmp_offset = addrs[i + insn->off] - addrs[i] + 8;
2415  			if (is_simm32(jmp_offset)) {
2416  				EMIT2_off32(0x0F, jmp_cond + 0x10, jmp_offset);
2417  			} else {
2418  				pr_err("cond_jmp gen bug %llx\n", jmp_offset);
2419  				return -EFAULT;
2420  			}
2421  			EMIT2(0xEB, 6);
2422  
2423  			/* Check the condition for high 32-bit comparison */
2424  			jmp_cond = get_cond_jmp_opcode(BPF_OP(code), false);
2425  			if (jmp_cond == COND_JMP_OPCODE_INVALID)
2426  				return -EFAULT;
2427  			jmp_offset = addrs[i + insn->off] - addrs[i];
2428  			if (is_simm32(jmp_offset)) {
2429  				EMIT2_off32(0x0F, jmp_cond + 0x10, jmp_offset);
2430  			} else {
2431  				pr_err("cond_jmp gen bug %llx\n", jmp_offset);
2432  				return -EFAULT;
2433  			}
2434  			break;
2435  		}
2436  		case BPF_JMP | BPF_JA:
2437  			if (insn->off == -1)
2438  				/* -1 jmp instructions will always jump
2439  				 * backwards two bytes. Explicitly handling
2440  				 * this case avoids wasting too many passes
2441  				 * when there are long sequences of replaced
2442  				 * dead code.
2443  				 */
2444  				jmp_offset = -2;
2445  			else
2446  				jmp_offset = addrs[i + insn->off] - addrs[i];
2447  
2448  			if (!jmp_offset)
2449  				/* Optimize out nop jumps */
2450  				break;
2451  emit_jmp:
2452  			if (is_imm8(jmp_offset)) {
2453  				EMIT2(0xEB, jmp_offset);
2454  			} else if (is_simm32(jmp_offset)) {
2455  				EMIT1_off32(0xE9, jmp_offset);
2456  			} else {
2457  				pr_err("jmp gen bug %llx\n", jmp_offset);
2458  				return -EFAULT;
2459  			}
2460  			break;
2461  		case BPF_STX | BPF_ATOMIC | BPF_W:
2462  		case BPF_STX | BPF_ATOMIC | BPF_DW:
2463  			goto notyet;
2464  		case BPF_JMP | BPF_EXIT:
2465  			if (seen_exit) {
2466  				jmp_offset = ctx->cleanup_addr - addrs[i];
2467  				goto emit_jmp;
2468  			}
2469  			seen_exit = true;
2470  			/* Update cleanup_addr */
2471  			ctx->cleanup_addr = proglen;
2472  			emit_epilogue(&prog, bpf_prog->aux->stack_depth);
2473  			break;
2474  notyet:
2475  			pr_info_once("*** NOT YET: opcode %02x ***\n", code);
2476  			return -EFAULT;
2477  		default:
2478  			/*
2479  			 * This error will be seen if new instruction was added
2480  			 * to interpreter, but not to JIT or if there is junk in
2481  			 * bpf_prog
2482  			 */
2483  			pr_err("bpf_jit: unknown opcode %02x\n", code);
2484  			return -EINVAL;
2485  		}
2486  
2487  		ilen = prog - temp;
2488  		if (ilen > BPF_MAX_INSN_SIZE) {
2489  			pr_err("bpf_jit: fatal insn size error\n");
2490  			return -EFAULT;
2491  		}
2492  
2493  		if (image) {
2494  			/*
2495  			 * When populating the image, assert that:
2496  			 *
2497  			 *  i) We do not write beyond the allocated space, and
2498  			 * ii) addrs[i] did not change from the prior run, in order
2499  			 *     to validate assumptions made for computing branch
2500  			 *     displacements.
2501  			 */
2502  			if (unlikely(proglen + ilen > oldproglen ||
2503  				     proglen + ilen != addrs[i])) {
2504  				pr_err("bpf_jit: fatal error\n");
2505  				return -EFAULT;
2506  			}
2507  			memcpy(image + proglen, temp, ilen);
2508  		}
2509  		proglen += ilen;
2510  		addrs[i] = proglen;
2511  		prog = temp;
2512  	}
2513  	return proglen;
2514  }
2515  
bpf_jit_needs_zext(void)2516  bool bpf_jit_needs_zext(void)
2517  {
2518  	return true;
2519  }
2520  
bpf_int_jit_compile(struct bpf_prog * prog)2521  struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
2522  {
2523  	struct bpf_binary_header *header = NULL;
2524  	struct bpf_prog *tmp, *orig_prog = prog;
2525  	int proglen, oldproglen = 0;
2526  	struct jit_context ctx = {};
2527  	bool tmp_blinded = false;
2528  	u8 *image = NULL;
2529  	int *addrs;
2530  	int pass;
2531  	int i;
2532  
2533  	if (!prog->jit_requested)
2534  		return orig_prog;
2535  
2536  	tmp = bpf_jit_blind_constants(prog);
2537  	/*
2538  	 * If blinding was requested and we failed during blinding,
2539  	 * we must fall back to the interpreter.
2540  	 */
2541  	if (IS_ERR(tmp))
2542  		return orig_prog;
2543  	if (tmp != prog) {
2544  		tmp_blinded = true;
2545  		prog = tmp;
2546  	}
2547  
2548  	addrs = kmalloc_array(prog->len, sizeof(*addrs), GFP_KERNEL);
2549  	if (!addrs) {
2550  		prog = orig_prog;
2551  		goto out;
2552  	}
2553  
2554  	/*
2555  	 * Before first pass, make a rough estimation of addrs[]
2556  	 * each BPF instruction is translated to less than 64 bytes
2557  	 */
2558  	for (proglen = 0, i = 0; i < prog->len; i++) {
2559  		proglen += 64;
2560  		addrs[i] = proglen;
2561  	}
2562  	ctx.cleanup_addr = proglen;
2563  
2564  	/*
2565  	 * JITed image shrinks with every pass and the loop iterates
2566  	 * until the image stops shrinking. Very large BPF programs
2567  	 * may converge on the last pass. In such case do one more
2568  	 * pass to emit the final image.
2569  	 */
2570  	for (pass = 0; pass < 20 || image; pass++) {
2571  		proglen = do_jit(prog, addrs, image, oldproglen, &ctx);
2572  		if (proglen <= 0) {
2573  out_image:
2574  			image = NULL;
2575  			if (header)
2576  				bpf_jit_binary_free(header);
2577  			prog = orig_prog;
2578  			goto out_addrs;
2579  		}
2580  		if (image) {
2581  			if (proglen != oldproglen) {
2582  				pr_err("bpf_jit: proglen=%d != oldproglen=%d\n",
2583  				       proglen, oldproglen);
2584  				goto out_image;
2585  			}
2586  			break;
2587  		}
2588  		if (proglen == oldproglen) {
2589  			header = bpf_jit_binary_alloc(proglen, &image,
2590  						      1, jit_fill_hole);
2591  			if (!header) {
2592  				prog = orig_prog;
2593  				goto out_addrs;
2594  			}
2595  		}
2596  		oldproglen = proglen;
2597  		cond_resched();
2598  	}
2599  
2600  	if (bpf_jit_enable > 1)
2601  		bpf_jit_dump(prog->len, proglen, pass + 1, image);
2602  
2603  	if (image) {
2604  		bpf_jit_binary_lock_ro(header);
2605  		prog->bpf_func = (void *)image;
2606  		prog->jited = 1;
2607  		prog->jited_len = proglen;
2608  	} else {
2609  		prog = orig_prog;
2610  	}
2611  
2612  out_addrs:
2613  	kfree(addrs);
2614  out:
2615  	if (tmp_blinded)
2616  		bpf_jit_prog_release_other(prog, prog == orig_prog ?
2617  					   tmp : orig_prog);
2618  	return prog;
2619  }
2620  
bpf_jit_supports_kfunc_call(void)2621  bool bpf_jit_supports_kfunc_call(void)
2622  {
2623  	return true;
2624  }
2625