bpf_jit_comp64.c 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * bpf_jit_comp64.c: eBPF JIT compiler
  4. *
  5. * Copyright 2016 Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
  6. * IBM Corporation
  7. *
  8. * Based on the powerpc classic BPF JIT compiler by Matt Evans
  9. */
  10. #include <linux/moduleloader.h>
  11. #include <asm/cacheflush.h>
  12. #include <asm/asm-compat.h>
  13. #include <linux/netdevice.h>
  14. #include <linux/filter.h>
  15. #include <linux/if_vlan.h>
  16. #include <asm/kprobes.h>
  17. #include <linux/bpf.h>
  18. #include <asm/security_features.h>
  19. #include "bpf_jit.h"
  20. /*
  21. * Stack layout:
  22. * Ensure the top half (upto local_tmp_var) stays consistent
  23. * with our redzone usage.
  24. *
  25. * [ prev sp ] <-------------
  26. * [ nv gpr save area ] 5*8 |
  27. * [ tail_call_cnt ] 8 |
  28. * [ local_tmp_var ] 16 |
  29. * fp (r31) --> [ ebpf stack space ] upto 512 |
  30. * [ frame header ] 32/112 |
  31. * sp (r1) ---> [ stack pointer ] --------------
  32. */
  33. /* for gpr non volatile registers BPG_REG_6 to 10 */
  34. #define BPF_PPC_STACK_SAVE (5*8)
  35. /* for bpf JIT code internal usage */
  36. #define BPF_PPC_STACK_LOCALS 24
  37. /* stack frame excluding BPF stack, ensure this is quadword aligned */
  38. #define BPF_PPC_STACKFRAME (STACK_FRAME_MIN_SIZE + \
  39. BPF_PPC_STACK_LOCALS + BPF_PPC_STACK_SAVE)
  40. /* BPF register usage */
  41. #define TMP_REG_1 (MAX_BPF_JIT_REG + 0)
  42. #define TMP_REG_2 (MAX_BPF_JIT_REG + 1)
  43. /* BPF to ppc register mappings */
  44. void bpf_jit_init_reg_mapping(struct codegen_context *ctx)
  45. {
  46. /* function return value */
  47. ctx->b2p[BPF_REG_0] = _R8;
  48. /* function arguments */
  49. ctx->b2p[BPF_REG_1] = _R3;
  50. ctx->b2p[BPF_REG_2] = _R4;
  51. ctx->b2p[BPF_REG_3] = _R5;
  52. ctx->b2p[BPF_REG_4] = _R6;
  53. ctx->b2p[BPF_REG_5] = _R7;
  54. /* non volatile registers */
  55. ctx->b2p[BPF_REG_6] = _R27;
  56. ctx->b2p[BPF_REG_7] = _R28;
  57. ctx->b2p[BPF_REG_8] = _R29;
  58. ctx->b2p[BPF_REG_9] = _R30;
  59. /* frame pointer aka BPF_REG_10 */
  60. ctx->b2p[BPF_REG_FP] = _R31;
  61. /* eBPF jit internal registers */
  62. ctx->b2p[BPF_REG_AX] = _R12;
  63. ctx->b2p[TMP_REG_1] = _R9;
  64. ctx->b2p[TMP_REG_2] = _R10;
  65. }
  66. /* PPC NVR range -- update this if we ever use NVRs below r27 */
  67. #define BPF_PPC_NVR_MIN _R27
  68. static inline bool bpf_has_stack_frame(struct codegen_context *ctx)
  69. {
  70. /*
  71. * We only need a stack frame if:
  72. * - we call other functions (kernel helpers), or
  73. * - the bpf program uses its stack area
  74. * The latter condition is deduced from the usage of BPF_REG_FP
  75. */
  76. return ctx->seen & SEEN_FUNC || bpf_is_seen_register(ctx, bpf_to_ppc(BPF_REG_FP));
  77. }
  78. /*
  79. * When not setting up our own stackframe, the redzone usage is:
  80. *
  81. * [ prev sp ] <-------------
  82. * [ ... ] |
  83. * sp (r1) ---> [ stack pointer ] --------------
  84. * [ nv gpr save area ] 5*8
  85. * [ tail_call_cnt ] 8
  86. * [ local_tmp_var ] 16
  87. * [ unused red zone ] 208 bytes protected
  88. */
  89. static int bpf_jit_stack_local(struct codegen_context *ctx)
  90. {
  91. if (bpf_has_stack_frame(ctx))
  92. return STACK_FRAME_MIN_SIZE + ctx->stack_size;
  93. else
  94. return -(BPF_PPC_STACK_SAVE + 24);
  95. }
  96. static int bpf_jit_stack_tailcallcnt(struct codegen_context *ctx)
  97. {
  98. return bpf_jit_stack_local(ctx) + 16;
  99. }
  100. static int bpf_jit_stack_offsetof(struct codegen_context *ctx, int reg)
  101. {
  102. if (reg >= BPF_PPC_NVR_MIN && reg < 32)
  103. return (bpf_has_stack_frame(ctx) ?
  104. (BPF_PPC_STACKFRAME + ctx->stack_size) : 0)
  105. - (8 * (32 - reg));
  106. pr_err("BPF JIT is asking about unknown registers");
  107. BUG();
  108. }
  109. void bpf_jit_realloc_regs(struct codegen_context *ctx)
  110. {
  111. }
  112. void bpf_jit_build_prologue(u32 *image, struct codegen_context *ctx)
  113. {
  114. int i;
  115. #ifndef CONFIG_PPC_KERNEL_PCREL
  116. if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2))
  117. EMIT(PPC_RAW_LD(_R2, _R13, offsetof(struct paca_struct, kernel_toc)));
  118. #endif
  119. /*
  120. * Initialize tail_call_cnt if we do tail calls.
  121. * Otherwise, put in NOPs so that it can be skipped when we are
  122. * invoked through a tail call.
  123. */
  124. if (ctx->seen & SEEN_TAILCALL) {
  125. EMIT(PPC_RAW_LI(bpf_to_ppc(TMP_REG_1), 0));
  126. /* this goes in the redzone */
  127. EMIT(PPC_RAW_STD(bpf_to_ppc(TMP_REG_1), _R1, -(BPF_PPC_STACK_SAVE + 8)));
  128. } else {
  129. EMIT(PPC_RAW_NOP());
  130. EMIT(PPC_RAW_NOP());
  131. }
  132. if (bpf_has_stack_frame(ctx)) {
  133. /*
  134. * We need a stack frame, but we don't necessarily need to
  135. * save/restore LR unless we call other functions
  136. */
  137. if (ctx->seen & SEEN_FUNC) {
  138. EMIT(PPC_RAW_MFLR(_R0));
  139. EMIT(PPC_RAW_STD(_R0, _R1, PPC_LR_STKOFF));
  140. }
  141. EMIT(PPC_RAW_STDU(_R1, _R1, -(BPF_PPC_STACKFRAME + ctx->stack_size)));
  142. }
  143. /*
  144. * Back up non-volatile regs -- BPF registers 6-10
  145. * If we haven't created our own stack frame, we save these
  146. * in the protected zone below the previous stack frame
  147. */
  148. for (i = BPF_REG_6; i <= BPF_REG_10; i++)
  149. if (bpf_is_seen_register(ctx, bpf_to_ppc(i)))
  150. EMIT(PPC_RAW_STD(bpf_to_ppc(i), _R1, bpf_jit_stack_offsetof(ctx, bpf_to_ppc(i))));
  151. /* Setup frame pointer to point to the bpf stack area */
  152. if (bpf_is_seen_register(ctx, bpf_to_ppc(BPF_REG_FP)))
  153. EMIT(PPC_RAW_ADDI(bpf_to_ppc(BPF_REG_FP), _R1,
  154. STACK_FRAME_MIN_SIZE + ctx->stack_size));
  155. }
  156. static void bpf_jit_emit_common_epilogue(u32 *image, struct codegen_context *ctx)
  157. {
  158. int i;
  159. /* Restore NVRs */
  160. for (i = BPF_REG_6; i <= BPF_REG_10; i++)
  161. if (bpf_is_seen_register(ctx, bpf_to_ppc(i)))
  162. EMIT(PPC_RAW_LD(bpf_to_ppc(i), _R1, bpf_jit_stack_offsetof(ctx, bpf_to_ppc(i))));
  163. /* Tear down our stack frame */
  164. if (bpf_has_stack_frame(ctx)) {
  165. EMIT(PPC_RAW_ADDI(_R1, _R1, BPF_PPC_STACKFRAME + ctx->stack_size));
  166. if (ctx->seen & SEEN_FUNC) {
  167. EMIT(PPC_RAW_LD(_R0, _R1, PPC_LR_STKOFF));
  168. EMIT(PPC_RAW_MTLR(_R0));
  169. }
  170. }
  171. }
  172. void bpf_jit_build_epilogue(u32 *image, struct codegen_context *ctx)
  173. {
  174. bpf_jit_emit_common_epilogue(image, ctx);
  175. /* Move result to r3 */
  176. EMIT(PPC_RAW_MR(_R3, bpf_to_ppc(BPF_REG_0)));
  177. EMIT(PPC_RAW_BLR());
  178. }
  179. static int
  180. bpf_jit_emit_func_call_hlp(u32 *image, u32 *fimage, struct codegen_context *ctx, u64 func)
  181. {
  182. unsigned long func_addr = func ? ppc_function_entry((void *)func) : 0;
  183. long reladdr;
  184. if (WARN_ON_ONCE(!kernel_text_address(func_addr)))
  185. return -EINVAL;
  186. #ifdef CONFIG_PPC_KERNEL_PCREL
  187. reladdr = func_addr - local_paca->kernelbase;
  188. if (reladdr < (long)SZ_8G && reladdr >= -(long)SZ_8G) {
  189. EMIT(PPC_RAW_LD(_R12, _R13, offsetof(struct paca_struct, kernelbase)));
  190. /* Align for subsequent prefix instruction */
  191. if (!IS_ALIGNED((unsigned long)fimage + CTX_NIA(ctx), 8))
  192. EMIT(PPC_RAW_NOP());
  193. /* paddi r12,r12,addr */
  194. EMIT(PPC_PREFIX_MLS | __PPC_PRFX_R(0) | IMM_H18(reladdr));
  195. EMIT(PPC_INST_PADDI | ___PPC_RT(_R12) | ___PPC_RA(_R12) | IMM_L(reladdr));
  196. } else {
  197. unsigned long pc = (unsigned long)fimage + CTX_NIA(ctx);
  198. bool alignment_needed = !IS_ALIGNED(pc, 8);
  199. reladdr = func_addr - (alignment_needed ? pc + 4 : pc);
  200. if (reladdr < (long)SZ_8G && reladdr >= -(long)SZ_8G) {
  201. if (alignment_needed)
  202. EMIT(PPC_RAW_NOP());
  203. /* pla r12,addr */
  204. EMIT(PPC_PREFIX_MLS | __PPC_PRFX_R(1) | IMM_H18(reladdr));
  205. EMIT(PPC_INST_PADDI | ___PPC_RT(_R12) | IMM_L(reladdr));
  206. } else {
  207. /* We can clobber r12 */
  208. PPC_LI64(_R12, func);
  209. }
  210. }
  211. EMIT(PPC_RAW_MTCTR(_R12));
  212. EMIT(PPC_RAW_BCTRL());
  213. #else
  214. if (core_kernel_text(func_addr)) {
  215. reladdr = func_addr - kernel_toc_addr();
  216. if (reladdr > 0x7FFFFFFF || reladdr < -(0x80000000L)) {
  217. pr_err("eBPF: address of %ps out of range of kernel_toc.\n", (void *)func);
  218. return -ERANGE;
  219. }
  220. EMIT(PPC_RAW_ADDIS(_R12, _R2, PPC_HA(reladdr)));
  221. EMIT(PPC_RAW_ADDI(_R12, _R12, PPC_LO(reladdr)));
  222. EMIT(PPC_RAW_MTCTR(_R12));
  223. EMIT(PPC_RAW_BCTRL());
  224. } else {
  225. if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V1)) {
  226. /* func points to the function descriptor */
  227. PPC_LI64(bpf_to_ppc(TMP_REG_2), func);
  228. /* Load actual entry point from function descriptor */
  229. EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_2), 0));
  230. /* ... and move it to CTR */
  231. EMIT(PPC_RAW_MTCTR(bpf_to_ppc(TMP_REG_1)));
  232. /*
  233. * Load TOC from function descriptor at offset 8.
  234. * We can clobber r2 since we get called through a
  235. * function pointer (so caller will save/restore r2).
  236. */
  237. EMIT(PPC_RAW_LD(_R2, bpf_to_ppc(TMP_REG_2), 8));
  238. } else {
  239. PPC_LI64(_R12, func);
  240. EMIT(PPC_RAW_MTCTR(_R12));
  241. }
  242. EMIT(PPC_RAW_BCTRL());
  243. /*
  244. * Load r2 with kernel TOC as kernel TOC is used if function address falls
  245. * within core kernel text.
  246. */
  247. EMIT(PPC_RAW_LD(_R2, _R13, offsetof(struct paca_struct, kernel_toc)));
  248. }
  249. #endif
  250. return 0;
  251. }
  252. int bpf_jit_emit_func_call_rel(u32 *image, u32 *fimage, struct codegen_context *ctx, u64 func)
  253. {
  254. unsigned int i, ctx_idx = ctx->idx;
  255. if (WARN_ON_ONCE(func && is_module_text_address(func)))
  256. return -EINVAL;
  257. /* skip past descriptor if elf v1 */
  258. func += FUNCTION_DESCR_SIZE;
  259. /* Load function address into r12 */
  260. PPC_LI64(_R12, func);
  261. /* For bpf-to-bpf function calls, the callee's address is unknown
  262. * until the last extra pass. As seen above, we use PPC_LI64() to
  263. * load the callee's address, but this may optimize the number of
  264. * instructions required based on the nature of the address.
  265. *
  266. * Since we don't want the number of instructions emitted to increase,
  267. * we pad the optimized PPC_LI64() call with NOPs to guarantee that
  268. * we always have a five-instruction sequence, which is the maximum
  269. * that PPC_LI64() can emit.
  270. */
  271. if (!image)
  272. for (i = ctx->idx - ctx_idx; i < 5; i++)
  273. EMIT(PPC_RAW_NOP());
  274. EMIT(PPC_RAW_MTCTR(_R12));
  275. EMIT(PPC_RAW_BCTRL());
  276. return 0;
  277. }
  278. static int bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 out)
  279. {
  280. /*
  281. * By now, the eBPF program has already setup parameters in r3, r4 and r5
  282. * r3/BPF_REG_1 - pointer to ctx -- passed as is to the next bpf program
  283. * r4/BPF_REG_2 - pointer to bpf_array
  284. * r5/BPF_REG_3 - index in bpf_array
  285. */
  286. int b2p_bpf_array = bpf_to_ppc(BPF_REG_2);
  287. int b2p_index = bpf_to_ppc(BPF_REG_3);
  288. int bpf_tailcall_prologue_size = 8;
  289. if (!IS_ENABLED(CONFIG_PPC_KERNEL_PCREL) && IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2))
  290. bpf_tailcall_prologue_size += 4; /* skip past the toc load */
  291. /*
  292. * if (index >= array->map.max_entries)
  293. * goto out;
  294. */
  295. EMIT(PPC_RAW_LWZ(bpf_to_ppc(TMP_REG_1), b2p_bpf_array, offsetof(struct bpf_array, map.max_entries)));
  296. EMIT(PPC_RAW_RLWINM(b2p_index, b2p_index, 0, 0, 31));
  297. EMIT(PPC_RAW_CMPLW(b2p_index, bpf_to_ppc(TMP_REG_1)));
  298. PPC_BCC_SHORT(COND_GE, out);
  299. /*
  300. * if (tail_call_cnt >= MAX_TAIL_CALL_CNT)
  301. * goto out;
  302. */
  303. EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), _R1, bpf_jit_stack_tailcallcnt(ctx)));
  304. EMIT(PPC_RAW_CMPLWI(bpf_to_ppc(TMP_REG_1), MAX_TAIL_CALL_CNT));
  305. PPC_BCC_SHORT(COND_GE, out);
  306. /*
  307. * tail_call_cnt++;
  308. */
  309. EMIT(PPC_RAW_ADDI(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), 1));
  310. EMIT(PPC_RAW_STD(bpf_to_ppc(TMP_REG_1), _R1, bpf_jit_stack_tailcallcnt(ctx)));
  311. /* prog = array->ptrs[index]; */
  312. EMIT(PPC_RAW_MULI(bpf_to_ppc(TMP_REG_1), b2p_index, 8));
  313. EMIT(PPC_RAW_ADD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), b2p_bpf_array));
  314. EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), offsetof(struct bpf_array, ptrs)));
  315. /*
  316. * if (prog == NULL)
  317. * goto out;
  318. */
  319. EMIT(PPC_RAW_CMPLDI(bpf_to_ppc(TMP_REG_1), 0));
  320. PPC_BCC_SHORT(COND_EQ, out);
  321. /* goto *(prog->bpf_func + prologue_size); */
  322. EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), offsetof(struct bpf_prog, bpf_func)));
  323. EMIT(PPC_RAW_ADDI(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1),
  324. FUNCTION_DESCR_SIZE + bpf_tailcall_prologue_size));
  325. EMIT(PPC_RAW_MTCTR(bpf_to_ppc(TMP_REG_1)));
  326. /* tear down stack, restore NVRs, ... */
  327. bpf_jit_emit_common_epilogue(image, ctx);
  328. EMIT(PPC_RAW_BCTR());
  329. /* out: */
  330. return 0;
  331. }
  332. /*
  333. * We spill into the redzone always, even if the bpf program has its own stackframe.
  334. * Offsets hardcoded based on BPF_PPC_STACK_SAVE -- see bpf_jit_stack_local()
  335. */
  336. void bpf_stf_barrier(void);
  337. asm (
  338. " .global bpf_stf_barrier ;"
  339. " bpf_stf_barrier: ;"
  340. " std 21,-64(1) ;"
  341. " std 22,-56(1) ;"
  342. " sync ;"
  343. " ld 21,-64(1) ;"
  344. " ld 22,-56(1) ;"
  345. " ori 31,31,0 ;"
  346. " .rept 14 ;"
  347. " b 1f ;"
  348. " 1: ;"
  349. " .endr ;"
  350. " blr ;"
  351. );
  352. /* Assemble the body code between the prologue & epilogue */
  353. int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, u32 *fimage, struct codegen_context *ctx,
  354. u32 *addrs, int pass, bool extra_pass)
  355. {
  356. enum stf_barrier_type stf_barrier = stf_barrier_type_get();
  357. const struct bpf_insn *insn = fp->insnsi;
  358. int flen = fp->len;
  359. int i, ret;
  360. /* Start of epilogue code - will only be valid 2nd pass onwards */
  361. u32 exit_addr = addrs[flen];
  362. for (i = 0; i < flen; i++) {
  363. u32 code = insn[i].code;
  364. u32 dst_reg = bpf_to_ppc(insn[i].dst_reg);
  365. u32 src_reg = bpf_to_ppc(insn[i].src_reg);
  366. u32 size = BPF_SIZE(code);
  367. u32 tmp1_reg = bpf_to_ppc(TMP_REG_1);
  368. u32 tmp2_reg = bpf_to_ppc(TMP_REG_2);
  369. u32 save_reg, ret_reg;
  370. s16 off = insn[i].off;
  371. s32 imm = insn[i].imm;
  372. bool func_addr_fixed;
  373. u64 func_addr;
  374. u64 imm64;
  375. u32 true_cond;
  376. u32 tmp_idx;
  377. int j;
  378. /*
  379. * addrs[] maps a BPF bytecode address into a real offset from
  380. * the start of the body code.
  381. */
  382. addrs[i] = ctx->idx * 4;
  383. /*
  384. * As an optimization, we note down which non-volatile registers
  385. * are used so that we can only save/restore those in our
  386. * prologue and epilogue. We do this here regardless of whether
  387. * the actual BPF instruction uses src/dst registers or not
  388. * (for instance, BPF_CALL does not use them). The expectation
  389. * is that those instructions will have src_reg/dst_reg set to
  390. * 0. Even otherwise, we just lose some prologue/epilogue
  391. * optimization but everything else should work without
  392. * any issues.
  393. */
  394. if (dst_reg >= BPF_PPC_NVR_MIN && dst_reg < 32)
  395. bpf_set_seen_register(ctx, dst_reg);
  396. if (src_reg >= BPF_PPC_NVR_MIN && src_reg < 32)
  397. bpf_set_seen_register(ctx, src_reg);
  398. switch (code) {
  399. /*
  400. * Arithmetic operations: ADD/SUB/MUL/DIV/MOD/NEG
  401. */
  402. case BPF_ALU | BPF_ADD | BPF_X: /* (u32) dst += (u32) src */
  403. case BPF_ALU64 | BPF_ADD | BPF_X: /* dst += src */
  404. EMIT(PPC_RAW_ADD(dst_reg, dst_reg, src_reg));
  405. goto bpf_alu32_trunc;
  406. case BPF_ALU | BPF_SUB | BPF_X: /* (u32) dst -= (u32) src */
  407. case BPF_ALU64 | BPF_SUB | BPF_X: /* dst -= src */
  408. EMIT(PPC_RAW_SUB(dst_reg, dst_reg, src_reg));
  409. goto bpf_alu32_trunc;
  410. case BPF_ALU | BPF_ADD | BPF_K: /* (u32) dst += (u32) imm */
  411. case BPF_ALU64 | BPF_ADD | BPF_K: /* dst += imm */
  412. if (!imm) {
  413. goto bpf_alu32_trunc;
  414. } else if (imm >= -32768 && imm < 32768) {
  415. EMIT(PPC_RAW_ADDI(dst_reg, dst_reg, IMM_L(imm)));
  416. } else {
  417. PPC_LI32(tmp1_reg, imm);
  418. EMIT(PPC_RAW_ADD(dst_reg, dst_reg, tmp1_reg));
  419. }
  420. goto bpf_alu32_trunc;
  421. case BPF_ALU | BPF_SUB | BPF_K: /* (u32) dst -= (u32) imm */
  422. case BPF_ALU64 | BPF_SUB | BPF_K: /* dst -= imm */
  423. if (!imm) {
  424. goto bpf_alu32_trunc;
  425. } else if (imm > -32768 && imm <= 32768) {
  426. EMIT(PPC_RAW_ADDI(dst_reg, dst_reg, IMM_L(-imm)));
  427. } else {
  428. PPC_LI32(tmp1_reg, imm);
  429. EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
  430. }
  431. goto bpf_alu32_trunc;
  432. case BPF_ALU | BPF_MUL | BPF_X: /* (u32) dst *= (u32) src */
  433. case BPF_ALU64 | BPF_MUL | BPF_X: /* dst *= src */
  434. if (BPF_CLASS(code) == BPF_ALU)
  435. EMIT(PPC_RAW_MULW(dst_reg, dst_reg, src_reg));
  436. else
  437. EMIT(PPC_RAW_MULD(dst_reg, dst_reg, src_reg));
  438. goto bpf_alu32_trunc;
  439. case BPF_ALU | BPF_MUL | BPF_K: /* (u32) dst *= (u32) imm */
  440. case BPF_ALU64 | BPF_MUL | BPF_K: /* dst *= imm */
  441. if (imm >= -32768 && imm < 32768)
  442. EMIT(PPC_RAW_MULI(dst_reg, dst_reg, IMM_L(imm)));
  443. else {
  444. PPC_LI32(tmp1_reg, imm);
  445. if (BPF_CLASS(code) == BPF_ALU)
  446. EMIT(PPC_RAW_MULW(dst_reg, dst_reg, tmp1_reg));
  447. else
  448. EMIT(PPC_RAW_MULD(dst_reg, dst_reg, tmp1_reg));
  449. }
  450. goto bpf_alu32_trunc;
  451. case BPF_ALU | BPF_DIV | BPF_X: /* (u32) dst /= (u32) src */
  452. case BPF_ALU | BPF_MOD | BPF_X: /* (u32) dst %= (u32) src */
  453. if (BPF_OP(code) == BPF_MOD) {
  454. if (off)
  455. EMIT(PPC_RAW_DIVW(tmp1_reg, dst_reg, src_reg));
  456. else
  457. EMIT(PPC_RAW_DIVWU(tmp1_reg, dst_reg, src_reg));
  458. EMIT(PPC_RAW_MULW(tmp1_reg, src_reg, tmp1_reg));
  459. EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
  460. } else
  461. if (off)
  462. EMIT(PPC_RAW_DIVW(dst_reg, dst_reg, src_reg));
  463. else
  464. EMIT(PPC_RAW_DIVWU(dst_reg, dst_reg, src_reg));
  465. goto bpf_alu32_trunc;
  466. case BPF_ALU64 | BPF_DIV | BPF_X: /* dst /= src */
  467. case BPF_ALU64 | BPF_MOD | BPF_X: /* dst %= src */
  468. if (BPF_OP(code) == BPF_MOD) {
  469. if (off)
  470. EMIT(PPC_RAW_DIVD(tmp1_reg, dst_reg, src_reg));
  471. else
  472. EMIT(PPC_RAW_DIVDU(tmp1_reg, dst_reg, src_reg));
  473. EMIT(PPC_RAW_MULD(tmp1_reg, src_reg, tmp1_reg));
  474. EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
  475. } else
  476. if (off)
  477. EMIT(PPC_RAW_DIVD(dst_reg, dst_reg, src_reg));
  478. else
  479. EMIT(PPC_RAW_DIVDU(dst_reg, dst_reg, src_reg));
  480. break;
  481. case BPF_ALU | BPF_MOD | BPF_K: /* (u32) dst %= (u32) imm */
  482. case BPF_ALU | BPF_DIV | BPF_K: /* (u32) dst /= (u32) imm */
  483. case BPF_ALU64 | BPF_MOD | BPF_K: /* dst %= imm */
  484. case BPF_ALU64 | BPF_DIV | BPF_K: /* dst /= imm */
  485. if (imm == 0)
  486. return -EINVAL;
  487. if (imm == 1) {
  488. if (BPF_OP(code) == BPF_DIV) {
  489. goto bpf_alu32_trunc;
  490. } else {
  491. EMIT(PPC_RAW_LI(dst_reg, 0));
  492. break;
  493. }
  494. }
  495. PPC_LI32(tmp1_reg, imm);
  496. switch (BPF_CLASS(code)) {
  497. case BPF_ALU:
  498. if (BPF_OP(code) == BPF_MOD) {
  499. if (off)
  500. EMIT(PPC_RAW_DIVW(tmp2_reg, dst_reg, tmp1_reg));
  501. else
  502. EMIT(PPC_RAW_DIVWU(tmp2_reg, dst_reg, tmp1_reg));
  503. EMIT(PPC_RAW_MULW(tmp1_reg, tmp1_reg, tmp2_reg));
  504. EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
  505. } else
  506. if (off)
  507. EMIT(PPC_RAW_DIVW(dst_reg, dst_reg, tmp1_reg));
  508. else
  509. EMIT(PPC_RAW_DIVWU(dst_reg, dst_reg, tmp1_reg));
  510. break;
  511. case BPF_ALU64:
  512. if (BPF_OP(code) == BPF_MOD) {
  513. if (off)
  514. EMIT(PPC_RAW_DIVD(tmp2_reg, dst_reg, tmp1_reg));
  515. else
  516. EMIT(PPC_RAW_DIVDU(tmp2_reg, dst_reg, tmp1_reg));
  517. EMIT(PPC_RAW_MULD(tmp1_reg, tmp1_reg, tmp2_reg));
  518. EMIT(PPC_RAW_SUB(dst_reg, dst_reg, tmp1_reg));
  519. } else
  520. if (off)
  521. EMIT(PPC_RAW_DIVD(dst_reg, dst_reg, tmp1_reg));
  522. else
  523. EMIT(PPC_RAW_DIVDU(dst_reg, dst_reg, tmp1_reg));
  524. break;
  525. }
  526. goto bpf_alu32_trunc;
  527. case BPF_ALU | BPF_NEG: /* (u32) dst = -dst */
  528. case BPF_ALU64 | BPF_NEG: /* dst = -dst */
  529. EMIT(PPC_RAW_NEG(dst_reg, dst_reg));
  530. goto bpf_alu32_trunc;
  531. /*
  532. * Logical operations: AND/OR/XOR/[A]LSH/[A]RSH
  533. */
  534. case BPF_ALU | BPF_AND | BPF_X: /* (u32) dst = dst & src */
  535. case BPF_ALU64 | BPF_AND | BPF_X: /* dst = dst & src */
  536. EMIT(PPC_RAW_AND(dst_reg, dst_reg, src_reg));
  537. goto bpf_alu32_trunc;
  538. case BPF_ALU | BPF_AND | BPF_K: /* (u32) dst = dst & imm */
  539. case BPF_ALU64 | BPF_AND | BPF_K: /* dst = dst & imm */
  540. if (!IMM_H(imm))
  541. EMIT(PPC_RAW_ANDI(dst_reg, dst_reg, IMM_L(imm)));
  542. else {
  543. /* Sign-extended */
  544. PPC_LI32(tmp1_reg, imm);
  545. EMIT(PPC_RAW_AND(dst_reg, dst_reg, tmp1_reg));
  546. }
  547. goto bpf_alu32_trunc;
  548. case BPF_ALU | BPF_OR | BPF_X: /* dst = (u32) dst | (u32) src */
  549. case BPF_ALU64 | BPF_OR | BPF_X: /* dst = dst | src */
  550. EMIT(PPC_RAW_OR(dst_reg, dst_reg, src_reg));
  551. goto bpf_alu32_trunc;
  552. case BPF_ALU | BPF_OR | BPF_K:/* dst = (u32) dst | (u32) imm */
  553. case BPF_ALU64 | BPF_OR | BPF_K:/* dst = dst | imm */
  554. if (imm < 0 && BPF_CLASS(code) == BPF_ALU64) {
  555. /* Sign-extended */
  556. PPC_LI32(tmp1_reg, imm);
  557. EMIT(PPC_RAW_OR(dst_reg, dst_reg, tmp1_reg));
  558. } else {
  559. if (IMM_L(imm))
  560. EMIT(PPC_RAW_ORI(dst_reg, dst_reg, IMM_L(imm)));
  561. if (IMM_H(imm))
  562. EMIT(PPC_RAW_ORIS(dst_reg, dst_reg, IMM_H(imm)));
  563. }
  564. goto bpf_alu32_trunc;
  565. case BPF_ALU | BPF_XOR | BPF_X: /* (u32) dst ^= src */
  566. case BPF_ALU64 | BPF_XOR | BPF_X: /* dst ^= src */
  567. EMIT(PPC_RAW_XOR(dst_reg, dst_reg, src_reg));
  568. goto bpf_alu32_trunc;
  569. case BPF_ALU | BPF_XOR | BPF_K: /* (u32) dst ^= (u32) imm */
  570. case BPF_ALU64 | BPF_XOR | BPF_K: /* dst ^= imm */
  571. if (imm < 0 && BPF_CLASS(code) == BPF_ALU64) {
  572. /* Sign-extended */
  573. PPC_LI32(tmp1_reg, imm);
  574. EMIT(PPC_RAW_XOR(dst_reg, dst_reg, tmp1_reg));
  575. } else {
  576. if (IMM_L(imm))
  577. EMIT(PPC_RAW_XORI(dst_reg, dst_reg, IMM_L(imm)));
  578. if (IMM_H(imm))
  579. EMIT(PPC_RAW_XORIS(dst_reg, dst_reg, IMM_H(imm)));
  580. }
  581. goto bpf_alu32_trunc;
  582. case BPF_ALU | BPF_LSH | BPF_X: /* (u32) dst <<= (u32) src */
  583. /* slw clears top 32 bits */
  584. EMIT(PPC_RAW_SLW(dst_reg, dst_reg, src_reg));
  585. /* skip zero extension move, but set address map. */
  586. if (insn_is_zext(&insn[i + 1]))
  587. addrs[++i] = ctx->idx * 4;
  588. break;
  589. case BPF_ALU64 | BPF_LSH | BPF_X: /* dst <<= src; */
  590. EMIT(PPC_RAW_SLD(dst_reg, dst_reg, src_reg));
  591. break;
  592. case BPF_ALU | BPF_LSH | BPF_K: /* (u32) dst <<== (u32) imm */
  593. /* with imm 0, we still need to clear top 32 bits */
  594. EMIT(PPC_RAW_SLWI(dst_reg, dst_reg, imm));
  595. if (insn_is_zext(&insn[i + 1]))
  596. addrs[++i] = ctx->idx * 4;
  597. break;
  598. case BPF_ALU64 | BPF_LSH | BPF_K: /* dst <<== imm */
  599. if (imm != 0)
  600. EMIT(PPC_RAW_SLDI(dst_reg, dst_reg, imm));
  601. break;
  602. case BPF_ALU | BPF_RSH | BPF_X: /* (u32) dst >>= (u32) src */
  603. EMIT(PPC_RAW_SRW(dst_reg, dst_reg, src_reg));
  604. if (insn_is_zext(&insn[i + 1]))
  605. addrs[++i] = ctx->idx * 4;
  606. break;
  607. case BPF_ALU64 | BPF_RSH | BPF_X: /* dst >>= src */
  608. EMIT(PPC_RAW_SRD(dst_reg, dst_reg, src_reg));
  609. break;
  610. case BPF_ALU | BPF_RSH | BPF_K: /* (u32) dst >>= (u32) imm */
  611. EMIT(PPC_RAW_SRWI(dst_reg, dst_reg, imm));
  612. if (insn_is_zext(&insn[i + 1]))
  613. addrs[++i] = ctx->idx * 4;
  614. break;
  615. case BPF_ALU64 | BPF_RSH | BPF_K: /* dst >>= imm */
  616. if (imm != 0)
  617. EMIT(PPC_RAW_SRDI(dst_reg, dst_reg, imm));
  618. break;
  619. case BPF_ALU | BPF_ARSH | BPF_X: /* (s32) dst >>= src */
  620. EMIT(PPC_RAW_SRAW(dst_reg, dst_reg, src_reg));
  621. goto bpf_alu32_trunc;
  622. case BPF_ALU64 | BPF_ARSH | BPF_X: /* (s64) dst >>= src */
  623. EMIT(PPC_RAW_SRAD(dst_reg, dst_reg, src_reg));
  624. break;
  625. case BPF_ALU | BPF_ARSH | BPF_K: /* (s32) dst >>= imm */
  626. EMIT(PPC_RAW_SRAWI(dst_reg, dst_reg, imm));
  627. goto bpf_alu32_trunc;
  628. case BPF_ALU64 | BPF_ARSH | BPF_K: /* (s64) dst >>= imm */
  629. if (imm != 0)
  630. EMIT(PPC_RAW_SRADI(dst_reg, dst_reg, imm));
  631. break;
  632. /*
  633. * MOV
  634. */
  635. case BPF_ALU | BPF_MOV | BPF_X: /* (u32) dst = src */
  636. case BPF_ALU64 | BPF_MOV | BPF_X: /* dst = src */
  637. if (imm == 1) {
  638. /* special mov32 for zext */
  639. EMIT(PPC_RAW_RLWINM(dst_reg, dst_reg, 0, 0, 31));
  640. break;
  641. } else if (off == 8) {
  642. EMIT(PPC_RAW_EXTSB(dst_reg, src_reg));
  643. } else if (off == 16) {
  644. EMIT(PPC_RAW_EXTSH(dst_reg, src_reg));
  645. } else if (off == 32) {
  646. EMIT(PPC_RAW_EXTSW(dst_reg, src_reg));
  647. } else if (dst_reg != src_reg)
  648. EMIT(PPC_RAW_MR(dst_reg, src_reg));
  649. goto bpf_alu32_trunc;
  650. case BPF_ALU | BPF_MOV | BPF_K: /* (u32) dst = imm */
  651. case BPF_ALU64 | BPF_MOV | BPF_K: /* dst = (s64) imm */
  652. PPC_LI32(dst_reg, imm);
  653. if (imm < 0)
  654. goto bpf_alu32_trunc;
  655. else if (insn_is_zext(&insn[i + 1]))
  656. addrs[++i] = ctx->idx * 4;
  657. break;
  658. bpf_alu32_trunc:
  659. /* Truncate to 32-bits */
  660. if (BPF_CLASS(code) == BPF_ALU && !fp->aux->verifier_zext)
  661. EMIT(PPC_RAW_RLWINM(dst_reg, dst_reg, 0, 0, 31));
  662. break;
  663. /*
  664. * BPF_FROM_BE/LE
  665. */
  666. case BPF_ALU | BPF_END | BPF_FROM_LE:
  667. case BPF_ALU | BPF_END | BPF_FROM_BE:
  668. case BPF_ALU64 | BPF_END | BPF_FROM_LE:
  669. #ifdef __BIG_ENDIAN__
  670. if (BPF_SRC(code) == BPF_FROM_BE)
  671. goto emit_clear;
  672. #else /* !__BIG_ENDIAN__ */
  673. if (BPF_CLASS(code) == BPF_ALU && BPF_SRC(code) == BPF_FROM_LE)
  674. goto emit_clear;
  675. #endif
  676. switch (imm) {
  677. case 16:
  678. /* Rotate 8 bits left & mask with 0x0000ff00 */
  679. EMIT(PPC_RAW_RLWINM(tmp1_reg, dst_reg, 8, 16, 23));
  680. /* Rotate 8 bits right & insert LSB to reg */
  681. EMIT(PPC_RAW_RLWIMI(tmp1_reg, dst_reg, 24, 24, 31));
  682. /* Move result back to dst_reg */
  683. EMIT(PPC_RAW_MR(dst_reg, tmp1_reg));
  684. break;
  685. case 32:
  686. /*
  687. * Rotate word left by 8 bits:
  688. * 2 bytes are already in their final position
  689. * -- byte 2 and 4 (of bytes 1, 2, 3 and 4)
  690. */
  691. EMIT(PPC_RAW_RLWINM(tmp1_reg, dst_reg, 8, 0, 31));
  692. /* Rotate 24 bits and insert byte 1 */
  693. EMIT(PPC_RAW_RLWIMI(tmp1_reg, dst_reg, 24, 0, 7));
  694. /* Rotate 24 bits and insert byte 3 */
  695. EMIT(PPC_RAW_RLWIMI(tmp1_reg, dst_reg, 24, 16, 23));
  696. EMIT(PPC_RAW_MR(dst_reg, tmp1_reg));
  697. break;
  698. case 64:
  699. /* Store the value to stack and then use byte-reverse loads */
  700. EMIT(PPC_RAW_STD(dst_reg, _R1, bpf_jit_stack_local(ctx)));
  701. EMIT(PPC_RAW_ADDI(tmp1_reg, _R1, bpf_jit_stack_local(ctx)));
  702. if (cpu_has_feature(CPU_FTR_ARCH_206)) {
  703. EMIT(PPC_RAW_LDBRX(dst_reg, 0, tmp1_reg));
  704. } else {
  705. EMIT(PPC_RAW_LWBRX(dst_reg, 0, tmp1_reg));
  706. if (IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN))
  707. EMIT(PPC_RAW_SLDI(dst_reg, dst_reg, 32));
  708. EMIT(PPC_RAW_LI(tmp2_reg, 4));
  709. EMIT(PPC_RAW_LWBRX(tmp2_reg, tmp2_reg, tmp1_reg));
  710. if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN))
  711. EMIT(PPC_RAW_SLDI(tmp2_reg, tmp2_reg, 32));
  712. EMIT(PPC_RAW_OR(dst_reg, dst_reg, tmp2_reg));
  713. }
  714. break;
  715. }
  716. break;
  717. emit_clear:
  718. switch (imm) {
  719. case 16:
  720. /* zero-extend 16 bits into 64 bits */
  721. EMIT(PPC_RAW_RLDICL(dst_reg, dst_reg, 0, 48));
  722. if (insn_is_zext(&insn[i + 1]))
  723. addrs[++i] = ctx->idx * 4;
  724. break;
  725. case 32:
  726. if (!fp->aux->verifier_zext)
  727. /* zero-extend 32 bits into 64 bits */
  728. EMIT(PPC_RAW_RLDICL(dst_reg, dst_reg, 0, 32));
  729. break;
  730. case 64:
  731. /* nop */
  732. break;
  733. }
  734. break;
  735. /*
  736. * BPF_ST NOSPEC (speculation barrier)
  737. */
  738. case BPF_ST | BPF_NOSPEC:
  739. if (!security_ftr_enabled(SEC_FTR_FAVOUR_SECURITY) ||
  740. !security_ftr_enabled(SEC_FTR_STF_BARRIER))
  741. break;
  742. switch (stf_barrier) {
  743. case STF_BARRIER_EIEIO:
  744. EMIT(PPC_RAW_EIEIO() | 0x02000000);
  745. break;
  746. case STF_BARRIER_SYNC_ORI:
  747. EMIT(PPC_RAW_SYNC());
  748. EMIT(PPC_RAW_LD(tmp1_reg, _R13, 0));
  749. EMIT(PPC_RAW_ORI(_R31, _R31, 0));
  750. break;
  751. case STF_BARRIER_FALLBACK:
  752. ctx->seen |= SEEN_FUNC;
  753. PPC_LI64(_R12, dereference_kernel_function_descriptor(bpf_stf_barrier));
  754. EMIT(PPC_RAW_MTCTR(_R12));
  755. EMIT(PPC_RAW_BCTRL());
  756. break;
  757. case STF_BARRIER_NONE:
  758. break;
  759. }
  760. break;
  761. /*
  762. * BPF_ST(X)
  763. */
  764. case BPF_STX | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = src */
  765. case BPF_ST | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = imm */
  766. if (BPF_CLASS(code) == BPF_ST) {
  767. EMIT(PPC_RAW_LI(tmp1_reg, imm));
  768. src_reg = tmp1_reg;
  769. }
  770. EMIT(PPC_RAW_STB(src_reg, dst_reg, off));
  771. break;
  772. case BPF_STX | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = src */
  773. case BPF_ST | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = imm */
  774. if (BPF_CLASS(code) == BPF_ST) {
  775. EMIT(PPC_RAW_LI(tmp1_reg, imm));
  776. src_reg = tmp1_reg;
  777. }
  778. EMIT(PPC_RAW_STH(src_reg, dst_reg, off));
  779. break;
  780. case BPF_STX | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = src */
  781. case BPF_ST | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = imm */
  782. if (BPF_CLASS(code) == BPF_ST) {
  783. PPC_LI32(tmp1_reg, imm);
  784. src_reg = tmp1_reg;
  785. }
  786. EMIT(PPC_RAW_STW(src_reg, dst_reg, off));
  787. break;
  788. case BPF_STX | BPF_MEM | BPF_DW: /* (u64 *)(dst + off) = src */
  789. case BPF_ST | BPF_MEM | BPF_DW: /* *(u64 *)(dst + off) = imm */
  790. if (BPF_CLASS(code) == BPF_ST) {
  791. PPC_LI32(tmp1_reg, imm);
  792. src_reg = tmp1_reg;
  793. }
  794. if (off % 4) {
  795. EMIT(PPC_RAW_LI(tmp2_reg, off));
  796. EMIT(PPC_RAW_STDX(src_reg, dst_reg, tmp2_reg));
  797. } else {
  798. EMIT(PPC_RAW_STD(src_reg, dst_reg, off));
  799. }
  800. break;
  801. /*
  802. * BPF_STX ATOMIC (atomic ops)
  803. */
  804. case BPF_STX | BPF_ATOMIC | BPF_W:
  805. case BPF_STX | BPF_ATOMIC | BPF_DW:
  806. save_reg = tmp2_reg;
  807. ret_reg = src_reg;
  808. /* Get offset into TMP_REG_1 */
  809. EMIT(PPC_RAW_LI(tmp1_reg, off));
  810. /*
  811. * Enforce full ordering for operations with BPF_FETCH by emitting a 'sync'
  812. * before and after the operation.
  813. *
  814. * This is a requirement in the Linux Kernel Memory Model.
  815. * See __cmpxchg_u64() in asm/cmpxchg.h as an example.
  816. */
  817. if ((imm & BPF_FETCH) && IS_ENABLED(CONFIG_SMP))
  818. EMIT(PPC_RAW_SYNC());
  819. tmp_idx = ctx->idx * 4;
  820. /* load value from memory into TMP_REG_2 */
  821. if (size == BPF_DW)
  822. EMIT(PPC_RAW_LDARX(tmp2_reg, tmp1_reg, dst_reg, 0));
  823. else
  824. EMIT(PPC_RAW_LWARX(tmp2_reg, tmp1_reg, dst_reg, 0));
  825. /* Save old value in _R0 */
  826. if (imm & BPF_FETCH)
  827. EMIT(PPC_RAW_MR(_R0, tmp2_reg));
  828. switch (imm) {
  829. case BPF_ADD:
  830. case BPF_ADD | BPF_FETCH:
  831. EMIT(PPC_RAW_ADD(tmp2_reg, tmp2_reg, src_reg));
  832. break;
  833. case BPF_AND:
  834. case BPF_AND | BPF_FETCH:
  835. EMIT(PPC_RAW_AND(tmp2_reg, tmp2_reg, src_reg));
  836. break;
  837. case BPF_OR:
  838. case BPF_OR | BPF_FETCH:
  839. EMIT(PPC_RAW_OR(tmp2_reg, tmp2_reg, src_reg));
  840. break;
  841. case BPF_XOR:
  842. case BPF_XOR | BPF_FETCH:
  843. EMIT(PPC_RAW_XOR(tmp2_reg, tmp2_reg, src_reg));
  844. break;
  845. case BPF_CMPXCHG:
  846. /*
  847. * Return old value in BPF_REG_0 for BPF_CMPXCHG &
  848. * in src_reg for other cases.
  849. */
  850. ret_reg = bpf_to_ppc(BPF_REG_0);
  851. /* Compare with old value in BPF_R0 */
  852. if (size == BPF_DW)
  853. EMIT(PPC_RAW_CMPD(bpf_to_ppc(BPF_REG_0), tmp2_reg));
  854. else
  855. EMIT(PPC_RAW_CMPW(bpf_to_ppc(BPF_REG_0), tmp2_reg));
  856. /* Don't set if different from old value */
  857. PPC_BCC_SHORT(COND_NE, (ctx->idx + 3) * 4);
  858. fallthrough;
  859. case BPF_XCHG:
  860. save_reg = src_reg;
  861. break;
  862. default:
  863. pr_err_ratelimited(
  864. "eBPF filter atomic op code %02x (@%d) unsupported\n",
  865. code, i);
  866. return -EOPNOTSUPP;
  867. }
  868. /* store new value */
  869. if (size == BPF_DW)
  870. EMIT(PPC_RAW_STDCX(save_reg, tmp1_reg, dst_reg));
  871. else
  872. EMIT(PPC_RAW_STWCX(save_reg, tmp1_reg, dst_reg));
  873. /* we're done if this succeeded */
  874. PPC_BCC_SHORT(COND_NE, tmp_idx);
  875. if (imm & BPF_FETCH) {
  876. /* Emit 'sync' to enforce full ordering */
  877. if (IS_ENABLED(CONFIG_SMP))
  878. EMIT(PPC_RAW_SYNC());
  879. EMIT(PPC_RAW_MR(ret_reg, _R0));
  880. /*
  881. * Skip unnecessary zero-extension for 32-bit cmpxchg.
  882. * For context, see commit 39491867ace5.
  883. */
  884. if (size != BPF_DW && imm == BPF_CMPXCHG &&
  885. insn_is_zext(&insn[i + 1]))
  886. addrs[++i] = ctx->idx * 4;
  887. }
  888. break;
  889. /*
  890. * BPF_LDX
  891. */
  892. /* dst = *(u8 *)(ul) (src + off) */
  893. case BPF_LDX | BPF_MEM | BPF_B:
  894. case BPF_LDX | BPF_MEMSX | BPF_B:
  895. case BPF_LDX | BPF_PROBE_MEM | BPF_B:
  896. case BPF_LDX | BPF_PROBE_MEMSX | BPF_B:
  897. /* dst = *(u16 *)(ul) (src + off) */
  898. case BPF_LDX | BPF_MEM | BPF_H:
  899. case BPF_LDX | BPF_MEMSX | BPF_H:
  900. case BPF_LDX | BPF_PROBE_MEM | BPF_H:
  901. case BPF_LDX | BPF_PROBE_MEMSX | BPF_H:
  902. /* dst = *(u32 *)(ul) (src + off) */
  903. case BPF_LDX | BPF_MEM | BPF_W:
  904. case BPF_LDX | BPF_MEMSX | BPF_W:
  905. case BPF_LDX | BPF_PROBE_MEM | BPF_W:
  906. case BPF_LDX | BPF_PROBE_MEMSX | BPF_W:
  907. /* dst = *(u64 *)(ul) (src + off) */
  908. case BPF_LDX | BPF_MEM | BPF_DW:
  909. case BPF_LDX | BPF_PROBE_MEM | BPF_DW:
  910. /*
  911. * As PTR_TO_BTF_ID that uses BPF_PROBE_MEM mode could either be a valid
  912. * kernel pointer or NULL but not a userspace address, execute BPF_PROBE_MEM
  913. * load only if addr is kernel address (see is_kernel_addr()), otherwise
  914. * set dst_reg=0 and move on.
  915. */
  916. if (BPF_MODE(code) == BPF_PROBE_MEM || BPF_MODE(code) == BPF_PROBE_MEMSX) {
  917. EMIT(PPC_RAW_ADDI(tmp1_reg, src_reg, off));
  918. if (IS_ENABLED(CONFIG_PPC_BOOK3E_64))
  919. PPC_LI64(tmp2_reg, 0x8000000000000000ul);
  920. else /* BOOK3S_64 */
  921. PPC_LI64(tmp2_reg, PAGE_OFFSET);
  922. EMIT(PPC_RAW_CMPLD(tmp1_reg, tmp2_reg));
  923. PPC_BCC_SHORT(COND_GT, (ctx->idx + 3) * 4);
  924. EMIT(PPC_RAW_LI(dst_reg, 0));
  925. /*
  926. * Check if 'off' is word aligned for BPF_DW, because
  927. * we might generate two instructions.
  928. */
  929. if ((BPF_SIZE(code) == BPF_DW ||
  930. (BPF_SIZE(code) == BPF_B && BPF_MODE(code) == BPF_PROBE_MEMSX)) &&
  931. (off & 3))
  932. PPC_JMP((ctx->idx + 3) * 4);
  933. else
  934. PPC_JMP((ctx->idx + 2) * 4);
  935. }
  936. if (BPF_MODE(code) == BPF_MEMSX || BPF_MODE(code) == BPF_PROBE_MEMSX) {
  937. switch (size) {
  938. case BPF_B:
  939. EMIT(PPC_RAW_LBZ(dst_reg, src_reg, off));
  940. EMIT(PPC_RAW_EXTSB(dst_reg, dst_reg));
  941. break;
  942. case BPF_H:
  943. EMIT(PPC_RAW_LHA(dst_reg, src_reg, off));
  944. break;
  945. case BPF_W:
  946. EMIT(PPC_RAW_LWA(dst_reg, src_reg, off));
  947. break;
  948. }
  949. } else {
  950. switch (size) {
  951. case BPF_B:
  952. EMIT(PPC_RAW_LBZ(dst_reg, src_reg, off));
  953. break;
  954. case BPF_H:
  955. EMIT(PPC_RAW_LHZ(dst_reg, src_reg, off));
  956. break;
  957. case BPF_W:
  958. EMIT(PPC_RAW_LWZ(dst_reg, src_reg, off));
  959. break;
  960. case BPF_DW:
  961. if (off % 4) {
  962. EMIT(PPC_RAW_LI(tmp1_reg, off));
  963. EMIT(PPC_RAW_LDX(dst_reg, src_reg, tmp1_reg));
  964. } else {
  965. EMIT(PPC_RAW_LD(dst_reg, src_reg, off));
  966. }
  967. break;
  968. }
  969. }
  970. if (size != BPF_DW && insn_is_zext(&insn[i + 1]))
  971. addrs[++i] = ctx->idx * 4;
  972. if (BPF_MODE(code) == BPF_PROBE_MEM) {
  973. ret = bpf_add_extable_entry(fp, image, fimage, pass, ctx,
  974. ctx->idx - 1, 4, dst_reg);
  975. if (ret)
  976. return ret;
  977. }
  978. break;
  979. /*
  980. * Doubleword load
  981. * 16 byte instruction that uses two 'struct bpf_insn'
  982. */
  983. case BPF_LD | BPF_IMM | BPF_DW: /* dst = (u64) imm */
  984. imm64 = ((u64)(u32) insn[i].imm) |
  985. (((u64)(u32) insn[i+1].imm) << 32);
  986. tmp_idx = ctx->idx;
  987. PPC_LI64(dst_reg, imm64);
  988. /* padding to allow full 5 instructions for later patching */
  989. if (!image)
  990. for (j = ctx->idx - tmp_idx; j < 5; j++)
  991. EMIT(PPC_RAW_NOP());
  992. /* Adjust for two bpf instructions */
  993. addrs[++i] = ctx->idx * 4;
  994. break;
  995. /*
  996. * Return/Exit
  997. */
  998. case BPF_JMP | BPF_EXIT:
  999. /*
  1000. * If this isn't the very last instruction, branch to
  1001. * the epilogue. If we _are_ the last instruction,
  1002. * we'll just fall through to the epilogue.
  1003. */
  1004. if (i != flen - 1) {
  1005. ret = bpf_jit_emit_exit_insn(image, ctx, tmp1_reg, exit_addr);
  1006. if (ret)
  1007. return ret;
  1008. }
  1009. /* else fall through to the epilogue */
  1010. break;
  1011. /*
  1012. * Call kernel helper or bpf function
  1013. */
  1014. case BPF_JMP | BPF_CALL:
  1015. ctx->seen |= SEEN_FUNC;
  1016. ret = bpf_jit_get_func_addr(fp, &insn[i], extra_pass,
  1017. &func_addr, &func_addr_fixed);
  1018. if (ret < 0)
  1019. return ret;
  1020. if (func_addr_fixed)
  1021. ret = bpf_jit_emit_func_call_hlp(image, fimage, ctx, func_addr);
  1022. else
  1023. ret = bpf_jit_emit_func_call_rel(image, fimage, ctx, func_addr);
  1024. if (ret)
  1025. return ret;
  1026. /* move return value from r3 to BPF_REG_0 */
  1027. EMIT(PPC_RAW_MR(bpf_to_ppc(BPF_REG_0), _R3));
  1028. break;
  1029. /*
  1030. * Jumps and branches
  1031. */
  1032. case BPF_JMP | BPF_JA:
  1033. PPC_JMP(addrs[i + 1 + off]);
  1034. break;
  1035. case BPF_JMP32 | BPF_JA:
  1036. PPC_JMP(addrs[i + 1 + imm]);
  1037. break;
  1038. case BPF_JMP | BPF_JGT | BPF_K:
  1039. case BPF_JMP | BPF_JGT | BPF_X:
  1040. case BPF_JMP | BPF_JSGT | BPF_K:
  1041. case BPF_JMP | BPF_JSGT | BPF_X:
  1042. case BPF_JMP32 | BPF_JGT | BPF_K:
  1043. case BPF_JMP32 | BPF_JGT | BPF_X:
  1044. case BPF_JMP32 | BPF_JSGT | BPF_K:
  1045. case BPF_JMP32 | BPF_JSGT | BPF_X:
  1046. true_cond = COND_GT;
  1047. goto cond_branch;
  1048. case BPF_JMP | BPF_JLT | BPF_K:
  1049. case BPF_JMP | BPF_JLT | BPF_X:
  1050. case BPF_JMP | BPF_JSLT | BPF_K:
  1051. case BPF_JMP | BPF_JSLT | BPF_X:
  1052. case BPF_JMP32 | BPF_JLT | BPF_K:
  1053. case BPF_JMP32 | BPF_JLT | BPF_X:
  1054. case BPF_JMP32 | BPF_JSLT | BPF_K:
  1055. case BPF_JMP32 | BPF_JSLT | BPF_X:
  1056. true_cond = COND_LT;
  1057. goto cond_branch;
  1058. case BPF_JMP | BPF_JGE | BPF_K:
  1059. case BPF_JMP | BPF_JGE | BPF_X:
  1060. case BPF_JMP | BPF_JSGE | BPF_K:
  1061. case BPF_JMP | BPF_JSGE | BPF_X:
  1062. case BPF_JMP32 | BPF_JGE | BPF_K:
  1063. case BPF_JMP32 | BPF_JGE | BPF_X:
  1064. case BPF_JMP32 | BPF_JSGE | BPF_K:
  1065. case BPF_JMP32 | BPF_JSGE | BPF_X:
  1066. true_cond = COND_GE;
  1067. goto cond_branch;
  1068. case BPF_JMP | BPF_JLE | BPF_K:
  1069. case BPF_JMP | BPF_JLE | BPF_X:
  1070. case BPF_JMP | BPF_JSLE | BPF_K:
  1071. case BPF_JMP | BPF_JSLE | BPF_X:
  1072. case BPF_JMP32 | BPF_JLE | BPF_K:
  1073. case BPF_JMP32 | BPF_JLE | BPF_X:
  1074. case BPF_JMP32 | BPF_JSLE | BPF_K:
  1075. case BPF_JMP32 | BPF_JSLE | BPF_X:
  1076. true_cond = COND_LE;
  1077. goto cond_branch;
  1078. case BPF_JMP | BPF_JEQ | BPF_K:
  1079. case BPF_JMP | BPF_JEQ | BPF_X:
  1080. case BPF_JMP32 | BPF_JEQ | BPF_K:
  1081. case BPF_JMP32 | BPF_JEQ | BPF_X:
  1082. true_cond = COND_EQ;
  1083. goto cond_branch;
  1084. case BPF_JMP | BPF_JNE | BPF_K:
  1085. case BPF_JMP | BPF_JNE | BPF_X:
  1086. case BPF_JMP32 | BPF_JNE | BPF_K:
  1087. case BPF_JMP32 | BPF_JNE | BPF_X:
  1088. true_cond = COND_NE;
  1089. goto cond_branch;
  1090. case BPF_JMP | BPF_JSET | BPF_K:
  1091. case BPF_JMP | BPF_JSET | BPF_X:
  1092. case BPF_JMP32 | BPF_JSET | BPF_K:
  1093. case BPF_JMP32 | BPF_JSET | BPF_X:
  1094. true_cond = COND_NE;
  1095. /* Fall through */
  1096. cond_branch:
  1097. switch (code) {
  1098. case BPF_JMP | BPF_JGT | BPF_X:
  1099. case BPF_JMP | BPF_JLT | BPF_X:
  1100. case BPF_JMP | BPF_JGE | BPF_X:
  1101. case BPF_JMP | BPF_JLE | BPF_X:
  1102. case BPF_JMP | BPF_JEQ | BPF_X:
  1103. case BPF_JMP | BPF_JNE | BPF_X:
  1104. case BPF_JMP32 | BPF_JGT | BPF_X:
  1105. case BPF_JMP32 | BPF_JLT | BPF_X:
  1106. case BPF_JMP32 | BPF_JGE | BPF_X:
  1107. case BPF_JMP32 | BPF_JLE | BPF_X:
  1108. case BPF_JMP32 | BPF_JEQ | BPF_X:
  1109. case BPF_JMP32 | BPF_JNE | BPF_X:
  1110. /* unsigned comparison */
  1111. if (BPF_CLASS(code) == BPF_JMP32)
  1112. EMIT(PPC_RAW_CMPLW(dst_reg, src_reg));
  1113. else
  1114. EMIT(PPC_RAW_CMPLD(dst_reg, src_reg));
  1115. break;
  1116. case BPF_JMP | BPF_JSGT | BPF_X:
  1117. case BPF_JMP | BPF_JSLT | BPF_X:
  1118. case BPF_JMP | BPF_JSGE | BPF_X:
  1119. case BPF_JMP | BPF_JSLE | BPF_X:
  1120. case BPF_JMP32 | BPF_JSGT | BPF_X:
  1121. case BPF_JMP32 | BPF_JSLT | BPF_X:
  1122. case BPF_JMP32 | BPF_JSGE | BPF_X:
  1123. case BPF_JMP32 | BPF_JSLE | BPF_X:
  1124. /* signed comparison */
  1125. if (BPF_CLASS(code) == BPF_JMP32)
  1126. EMIT(PPC_RAW_CMPW(dst_reg, src_reg));
  1127. else
  1128. EMIT(PPC_RAW_CMPD(dst_reg, src_reg));
  1129. break;
  1130. case BPF_JMP | BPF_JSET | BPF_X:
  1131. case BPF_JMP32 | BPF_JSET | BPF_X:
  1132. if (BPF_CLASS(code) == BPF_JMP) {
  1133. EMIT(PPC_RAW_AND_DOT(tmp1_reg, dst_reg, src_reg));
  1134. } else {
  1135. EMIT(PPC_RAW_AND(tmp1_reg, dst_reg, src_reg));
  1136. EMIT(PPC_RAW_RLWINM_DOT(tmp1_reg, tmp1_reg, 0, 0, 31));
  1137. }
  1138. break;
  1139. case BPF_JMP | BPF_JNE | BPF_K:
  1140. case BPF_JMP | BPF_JEQ | BPF_K:
  1141. case BPF_JMP | BPF_JGT | BPF_K:
  1142. case BPF_JMP | BPF_JLT | BPF_K:
  1143. case BPF_JMP | BPF_JGE | BPF_K:
  1144. case BPF_JMP | BPF_JLE | BPF_K:
  1145. case BPF_JMP32 | BPF_JNE | BPF_K:
  1146. case BPF_JMP32 | BPF_JEQ | BPF_K:
  1147. case BPF_JMP32 | BPF_JGT | BPF_K:
  1148. case BPF_JMP32 | BPF_JLT | BPF_K:
  1149. case BPF_JMP32 | BPF_JGE | BPF_K:
  1150. case BPF_JMP32 | BPF_JLE | BPF_K:
  1151. {
  1152. bool is_jmp32 = BPF_CLASS(code) == BPF_JMP32;
  1153. /*
  1154. * Need sign-extended load, so only positive
  1155. * values can be used as imm in cmpldi
  1156. */
  1157. if (imm >= 0 && imm < 32768) {
  1158. if (is_jmp32)
  1159. EMIT(PPC_RAW_CMPLWI(dst_reg, imm));
  1160. else
  1161. EMIT(PPC_RAW_CMPLDI(dst_reg, imm));
  1162. } else {
  1163. /* sign-extending load */
  1164. PPC_LI32(tmp1_reg, imm);
  1165. /* ... but unsigned comparison */
  1166. if (is_jmp32)
  1167. EMIT(PPC_RAW_CMPLW(dst_reg, tmp1_reg));
  1168. else
  1169. EMIT(PPC_RAW_CMPLD(dst_reg, tmp1_reg));
  1170. }
  1171. break;
  1172. }
  1173. case BPF_JMP | BPF_JSGT | BPF_K:
  1174. case BPF_JMP | BPF_JSLT | BPF_K:
  1175. case BPF_JMP | BPF_JSGE | BPF_K:
  1176. case BPF_JMP | BPF_JSLE | BPF_K:
  1177. case BPF_JMP32 | BPF_JSGT | BPF_K:
  1178. case BPF_JMP32 | BPF_JSLT | BPF_K:
  1179. case BPF_JMP32 | BPF_JSGE | BPF_K:
  1180. case BPF_JMP32 | BPF_JSLE | BPF_K:
  1181. {
  1182. bool is_jmp32 = BPF_CLASS(code) == BPF_JMP32;
  1183. /*
  1184. * signed comparison, so any 16-bit value
  1185. * can be used in cmpdi
  1186. */
  1187. if (imm >= -32768 && imm < 32768) {
  1188. if (is_jmp32)
  1189. EMIT(PPC_RAW_CMPWI(dst_reg, imm));
  1190. else
  1191. EMIT(PPC_RAW_CMPDI(dst_reg, imm));
  1192. } else {
  1193. PPC_LI32(tmp1_reg, imm);
  1194. if (is_jmp32)
  1195. EMIT(PPC_RAW_CMPW(dst_reg, tmp1_reg));
  1196. else
  1197. EMIT(PPC_RAW_CMPD(dst_reg, tmp1_reg));
  1198. }
  1199. break;
  1200. }
  1201. case BPF_JMP | BPF_JSET | BPF_K:
  1202. case BPF_JMP32 | BPF_JSET | BPF_K:
  1203. /* andi does not sign-extend the immediate */
  1204. if (imm >= 0 && imm < 32768)
  1205. /* PPC_ANDI is _only/always_ dot-form */
  1206. EMIT(PPC_RAW_ANDI(tmp1_reg, dst_reg, imm));
  1207. else {
  1208. PPC_LI32(tmp1_reg, imm);
  1209. if (BPF_CLASS(code) == BPF_JMP) {
  1210. EMIT(PPC_RAW_AND_DOT(tmp1_reg, dst_reg,
  1211. tmp1_reg));
  1212. } else {
  1213. EMIT(PPC_RAW_AND(tmp1_reg, dst_reg, tmp1_reg));
  1214. EMIT(PPC_RAW_RLWINM_DOT(tmp1_reg, tmp1_reg,
  1215. 0, 0, 31));
  1216. }
  1217. }
  1218. break;
  1219. }
  1220. PPC_BCC(true_cond, addrs[i + 1 + off]);
  1221. break;
  1222. /*
  1223. * Tail call
  1224. */
  1225. case BPF_JMP | BPF_TAIL_CALL:
  1226. ctx->seen |= SEEN_TAILCALL;
  1227. ret = bpf_jit_emit_tail_call(image, ctx, addrs[i + 1]);
  1228. if (ret < 0)
  1229. return ret;
  1230. break;
  1231. default:
  1232. /*
  1233. * The filter contains something cruel & unusual.
  1234. * We don't handle it, but also there shouldn't be
  1235. * anything missing from our list.
  1236. */
  1237. pr_err_ratelimited("eBPF filter opcode %04x (@%d) unsupported\n",
  1238. code, i);
  1239. return -ENOTSUPP;
  1240. }
  1241. }
  1242. /* Set end-of-body-code address for exit. */
  1243. addrs[i] = ctx->idx * 4;
  1244. return 0;
  1245. }