bpf_jit_comp.c 80 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * BPF Jit compiler for s390.
  4. *
  5. * Minimum build requirements:
  6. *
  7. * - HAVE_MARCH_Z196_FEATURES: laal, laalg
  8. * - HAVE_MARCH_Z10_FEATURES: msfi, cgrj, clgrj
  9. * - HAVE_MARCH_Z9_109_FEATURES: alfi, llilf, clfi, oilf, nilf
  10. * - 64BIT
  11. *
  12. * Copyright IBM Corp. 2012,2015
  13. *
  14. * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
  15. * Michael Holzheu <holzheu@linux.vnet.ibm.com>
  16. */
  17. #define KMSG_COMPONENT "bpf_jit"
  18. #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
  19. #include <linux/netdevice.h>
  20. #include <linux/filter.h>
  21. #include <linux/init.h>
  22. #include <linux/bpf.h>
  23. #include <linux/mm.h>
  24. #include <linux/kernel.h>
  25. #include <asm/cacheflush.h>
  26. #include <asm/extable.h>
  27. #include <asm/dis.h>
  28. #include <asm/facility.h>
  29. #include <asm/nospec-branch.h>
  30. #include <asm/set_memory.h>
  31. #include <asm/text-patching.h>
  32. #include <asm/unwind.h>
  33. struct bpf_jit {
  34. u32 seen; /* Flags to remember seen eBPF instructions */
  35. u16 seen_regs; /* Mask to remember which registers are used */
  36. u32 *addrs; /* Array with relative instruction addresses */
  37. u8 *prg_buf; /* Start of program */
  38. int size; /* Size of program and literal pool */
  39. int size_prg; /* Size of program */
  40. int prg; /* Current position in program */
  41. int lit32_start; /* Start of 32-bit literal pool */
  42. int lit32; /* Current position in 32-bit literal pool */
  43. int lit64_start; /* Start of 64-bit literal pool */
  44. int lit64; /* Current position in 64-bit literal pool */
  45. int base_ip; /* Base address for literal pool */
  46. int exit_ip; /* Address of exit */
  47. int r1_thunk_ip; /* Address of expoline thunk for 'br %r1' */
  48. int r14_thunk_ip; /* Address of expoline thunk for 'br %r14' */
  49. int tail_call_start; /* Tail call start offset */
  50. int excnt; /* Number of exception table entries */
  51. int prologue_plt_ret; /* Return address for prologue hotpatch PLT */
  52. int prologue_plt; /* Start of prologue hotpatch PLT */
  53. int kern_arena; /* Pool offset of kernel arena address */
  54. u64 user_arena; /* User arena address */
  55. u32 frame_off; /* Offset of struct bpf_prog from %r15 */
  56. };
  57. #define SEEN_MEM BIT(0) /* use mem[] for temporary storage */
  58. #define SEEN_LITERAL BIT(1) /* code uses literals */
  59. #define SEEN_FUNC BIT(2) /* calls C functions */
  60. #define SEEN_STACK (SEEN_FUNC | SEEN_MEM)
  61. #define NVREGS 0xffc0 /* %r6-%r15 */
  62. /*
  63. * s390 registers
  64. */
  65. #define REG_W0 (MAX_BPF_JIT_REG + 0) /* Work register 1 (even) */
  66. #define REG_W1 (MAX_BPF_JIT_REG + 1) /* Work register 2 (odd) */
  67. #define REG_L (MAX_BPF_JIT_REG + 2) /* Literal pool register */
  68. #define REG_15 (MAX_BPF_JIT_REG + 3) /* Register 15 */
  69. #define REG_0 REG_W0 /* Register 0 */
  70. #define REG_1 REG_W1 /* Register 1 */
  71. #define REG_2 BPF_REG_1 /* Register 2 */
  72. #define REG_3 BPF_REG_2 /* Register 3 */
  73. #define REG_4 BPF_REG_3 /* Register 4 */
  74. #define REG_7 BPF_REG_6 /* Register 7 */
  75. #define REG_8 BPF_REG_7 /* Register 8 */
  76. #define REG_14 BPF_REG_0 /* Register 14 */
  77. /*
  78. * Mapping of BPF registers to s390 registers
  79. */
  80. static const int reg2hex[] = {
  81. /* Return code */
  82. [BPF_REG_0] = 14,
  83. /* Function parameters */
  84. [BPF_REG_1] = 2,
  85. [BPF_REG_2] = 3,
  86. [BPF_REG_3] = 4,
  87. [BPF_REG_4] = 5,
  88. [BPF_REG_5] = 6,
  89. /* Call saved registers */
  90. [BPF_REG_6] = 7,
  91. [BPF_REG_7] = 8,
  92. [BPF_REG_8] = 9,
  93. [BPF_REG_9] = 10,
  94. /* BPF stack pointer */
  95. [BPF_REG_FP] = 13,
  96. /* Register for blinding */
  97. [BPF_REG_AX] = 12,
  98. /* Work registers for s390x backend */
  99. [REG_W0] = 0,
  100. [REG_W1] = 1,
  101. [REG_L] = 11,
  102. [REG_15] = 15,
  103. };
  104. static inline u32 reg(u32 dst_reg, u32 src_reg)
  105. {
  106. return reg2hex[dst_reg] << 4 | reg2hex[src_reg];
  107. }
  108. static inline u32 reg_high(u32 reg)
  109. {
  110. return reg2hex[reg] << 4;
  111. }
  112. static inline void reg_set_seen(struct bpf_jit *jit, u32 b1)
  113. {
  114. u32 r1 = reg2hex[b1];
  115. if (r1 >= 6 && r1 <= 15)
  116. jit->seen_regs |= (1 << r1);
  117. }
  118. #define REG_SET_SEEN(b1) \
  119. ({ \
  120. reg_set_seen(jit, b1); \
  121. })
  122. /*
  123. * EMIT macros for code generation
  124. */
  125. #define _EMIT2(op) \
  126. ({ \
  127. if (jit->prg_buf) \
  128. *(u16 *) (jit->prg_buf + jit->prg) = (op); \
  129. jit->prg += 2; \
  130. })
  131. #define EMIT2(op, b1, b2) \
  132. ({ \
  133. _EMIT2((op) | reg(b1, b2)); \
  134. REG_SET_SEEN(b1); \
  135. REG_SET_SEEN(b2); \
  136. })
  137. #define _EMIT4(op) \
  138. ({ \
  139. if (jit->prg_buf) \
  140. *(u32 *) (jit->prg_buf + jit->prg) = (op); \
  141. jit->prg += 4; \
  142. })
  143. #define EMIT4(op, b1, b2) \
  144. ({ \
  145. _EMIT4((op) | reg(b1, b2)); \
  146. REG_SET_SEEN(b1); \
  147. REG_SET_SEEN(b2); \
  148. })
  149. #define EMIT4_RRF(op, b1, b2, b3) \
  150. ({ \
  151. _EMIT4((op) | reg_high(b3) << 8 | reg(b1, b2)); \
  152. REG_SET_SEEN(b1); \
  153. REG_SET_SEEN(b2); \
  154. REG_SET_SEEN(b3); \
  155. })
  156. #define _EMIT4_DISP(op, disp) \
  157. ({ \
  158. unsigned int __disp = (disp) & 0xfff; \
  159. _EMIT4((op) | __disp); \
  160. })
  161. #define EMIT4_DISP(op, b1, b2, disp) \
  162. ({ \
  163. _EMIT4_DISP((op) | reg_high(b1) << 16 | \
  164. reg_high(b2) << 8, (disp)); \
  165. REG_SET_SEEN(b1); \
  166. REG_SET_SEEN(b2); \
  167. })
  168. #define EMIT4_IMM(op, b1, imm) \
  169. ({ \
  170. unsigned int __imm = (imm) & 0xffff; \
  171. _EMIT4((op) | reg_high(b1) << 16 | __imm); \
  172. REG_SET_SEEN(b1); \
  173. })
  174. #define EMIT4_PCREL(op, pcrel) \
  175. ({ \
  176. long __pcrel = ((pcrel) >> 1) & 0xffff; \
  177. _EMIT4((op) | __pcrel); \
  178. })
  179. #define EMIT4_PCREL_RIC(op, mask, target) \
  180. ({ \
  181. int __rel = ((target) - jit->prg) / 2; \
  182. _EMIT4((op) | (mask) << 20 | (__rel & 0xffff)); \
  183. })
  184. #define _EMIT6(op1, op2) \
  185. ({ \
  186. if (jit->prg_buf) { \
  187. *(u32 *) (jit->prg_buf + jit->prg) = (op1); \
  188. *(u16 *) (jit->prg_buf + jit->prg + 4) = (op2); \
  189. } \
  190. jit->prg += 6; \
  191. })
  192. #define _EMIT6_DISP(op1, op2, disp) \
  193. ({ \
  194. unsigned int __disp = (disp) & 0xfff; \
  195. _EMIT6((op1) | __disp, op2); \
  196. })
  197. #define _EMIT6_DISP_LH(op1, op2, disp) \
  198. ({ \
  199. u32 _disp = (u32) (disp); \
  200. unsigned int __disp_h = _disp & 0xff000; \
  201. unsigned int __disp_l = _disp & 0x00fff; \
  202. _EMIT6((op1) | __disp_l, (op2) | __disp_h >> 4); \
  203. })
  204. #define EMIT6_DISP_LH(op1, op2, b1, b2, b3, disp) \
  205. ({ \
  206. _EMIT6_DISP_LH((op1) | reg(b1, b2) << 16 | \
  207. reg_high(b3) << 8, op2, disp); \
  208. REG_SET_SEEN(b1); \
  209. REG_SET_SEEN(b2); \
  210. REG_SET_SEEN(b3); \
  211. })
  212. #define EMIT6_PCREL_RIEB(op1, op2, b1, b2, mask, target) \
  213. ({ \
  214. unsigned int rel = (int)((target) - jit->prg) / 2; \
  215. _EMIT6((op1) | reg(b1, b2) << 16 | (rel & 0xffff), \
  216. (op2) | (mask) << 12); \
  217. REG_SET_SEEN(b1); \
  218. REG_SET_SEEN(b2); \
  219. })
  220. #define EMIT6_PCREL_RIEC(op1, op2, b1, imm, mask, target) \
  221. ({ \
  222. unsigned int rel = (int)((target) - jit->prg) / 2; \
  223. _EMIT6((op1) | (reg_high(b1) | (mask)) << 16 | \
  224. (rel & 0xffff), (op2) | ((imm) & 0xff) << 8); \
  225. REG_SET_SEEN(b1); \
  226. BUILD_BUG_ON(((unsigned long) (imm)) > 0xff); \
  227. })
  228. #define EMIT6_PCREL(op1, op2, b1, b2, i, off, mask) \
  229. ({ \
  230. int rel = (addrs[(i) + (off) + 1] - jit->prg) / 2; \
  231. _EMIT6((op1) | reg(b1, b2) << 16 | (rel & 0xffff), (op2) | (mask));\
  232. REG_SET_SEEN(b1); \
  233. REG_SET_SEEN(b2); \
  234. })
  235. #define EMIT6_PCREL_RILB(op, b, target) \
  236. ({ \
  237. unsigned int rel = (int)((target) - jit->prg) / 2; \
  238. _EMIT6((op) | reg_high(b) << 16 | rel >> 16, rel & 0xffff);\
  239. REG_SET_SEEN(b); \
  240. })
  241. #define EMIT6_PCREL_RIL(op, target) \
  242. ({ \
  243. unsigned int rel = (int)((target) - jit->prg) / 2; \
  244. _EMIT6((op) | rel >> 16, rel & 0xffff); \
  245. })
  246. #define EMIT6_PCREL_RILC(op, mask, target) \
  247. ({ \
  248. EMIT6_PCREL_RIL((op) | (mask) << 20, (target)); \
  249. })
  250. #define _EMIT6_IMM(op, imm) \
  251. ({ \
  252. unsigned int __imm = (imm); \
  253. _EMIT6((op) | (__imm >> 16), __imm & 0xffff); \
  254. })
  255. #define EMIT6_IMM(op, b1, imm) \
  256. ({ \
  257. _EMIT6_IMM((op) | reg_high(b1) << 16, imm); \
  258. REG_SET_SEEN(b1); \
  259. })
  260. #define _EMIT_CONST_U32(val) \
  261. ({ \
  262. unsigned int ret; \
  263. ret = jit->lit32; \
  264. if (jit->prg_buf) \
  265. *(u32 *)(jit->prg_buf + jit->lit32) = (u32)(val);\
  266. jit->lit32 += 4; \
  267. ret; \
  268. })
  269. #define EMIT_CONST_U32(val) \
  270. ({ \
  271. jit->seen |= SEEN_LITERAL; \
  272. _EMIT_CONST_U32(val) - jit->base_ip; \
  273. })
  274. #define _EMIT_CONST_U64(val) \
  275. ({ \
  276. unsigned int ret; \
  277. ret = jit->lit64; \
  278. if (jit->prg_buf) \
  279. *(u64 *)(jit->prg_buf + jit->lit64) = (u64)(val);\
  280. jit->lit64 += 8; \
  281. ret; \
  282. })
  283. #define EMIT_CONST_U64(val) \
  284. ({ \
  285. jit->seen |= SEEN_LITERAL; \
  286. _EMIT_CONST_U64(val) - jit->base_ip; \
  287. })
  288. #define EMIT_ZERO(b1) \
  289. ({ \
  290. if (!fp->aux->verifier_zext) { \
  291. /* llgfr %dst,%dst (zero extend to 64 bit) */ \
  292. EMIT4(0xb9160000, b1, b1); \
  293. REG_SET_SEEN(b1); \
  294. } \
  295. })
  296. /*
  297. * Return whether this is the first pass. The first pass is special, since we
  298. * don't know any sizes yet, and thus must be conservative.
  299. */
  300. static bool is_first_pass(struct bpf_jit *jit)
  301. {
  302. return jit->size == 0;
  303. }
  304. /*
  305. * Return whether this is the code generation pass. The code generation pass is
  306. * special, since we should change as little as possible.
  307. */
  308. static bool is_codegen_pass(struct bpf_jit *jit)
  309. {
  310. return jit->prg_buf;
  311. }
  312. /*
  313. * Return whether "rel" can be encoded as a short PC-relative offset
  314. */
  315. static bool is_valid_rel(int rel)
  316. {
  317. return rel >= -65536 && rel <= 65534;
  318. }
  319. /*
  320. * Return whether "off" can be reached using a short PC-relative offset
  321. */
  322. static bool can_use_rel(struct bpf_jit *jit, int off)
  323. {
  324. return is_valid_rel(off - jit->prg);
  325. }
  326. /*
  327. * Return whether given displacement can be encoded using
  328. * Long-Displacement Facility
  329. */
  330. static bool is_valid_ldisp(int disp)
  331. {
  332. return disp >= -524288 && disp <= 524287;
  333. }
  334. /*
  335. * Return whether the next 32-bit literal pool entry can be referenced using
  336. * Long-Displacement Facility
  337. */
  338. static bool can_use_ldisp_for_lit32(struct bpf_jit *jit)
  339. {
  340. return is_valid_ldisp(jit->lit32 - jit->base_ip);
  341. }
  342. /*
  343. * Return whether the next 64-bit literal pool entry can be referenced using
  344. * Long-Displacement Facility
  345. */
  346. static bool can_use_ldisp_for_lit64(struct bpf_jit *jit)
  347. {
  348. return is_valid_ldisp(jit->lit64 - jit->base_ip);
  349. }
  350. /*
  351. * Fill whole space with illegal instructions
  352. */
  353. static void jit_fill_hole(void *area, unsigned int size)
  354. {
  355. memset(area, 0, size);
  356. }
  357. /*
  358. * Caller-allocated part of the frame.
  359. * Thanks to packed stack, its otherwise unused initial part can be used for
  360. * the BPF stack and for the next frame.
  361. */
  362. struct prog_frame {
  363. u64 unused[8];
  364. /* BPF stack starts here and grows towards 0 */
  365. u32 tail_call_cnt;
  366. u32 pad;
  367. u64 r6[10]; /* r6 - r15 */
  368. u64 backchain;
  369. } __packed;
  370. /*
  371. * Save registers from "rs" (register start) to "re" (register end) on stack
  372. */
  373. static void save_regs(struct bpf_jit *jit, u32 rs, u32 re)
  374. {
  375. u32 off = offsetof(struct prog_frame, r6) + (rs - 6) * 8;
  376. if (rs == re)
  377. /* stg %rs,off(%r15) */
  378. _EMIT6(0xe300f000 | rs << 20 | off, 0x0024);
  379. else
  380. /* stmg %rs,%re,off(%r15) */
  381. _EMIT6_DISP(0xeb00f000 | rs << 20 | re << 16, 0x0024, off);
  382. }
  383. /*
  384. * Restore registers from "rs" (register start) to "re" (register end) on stack
  385. */
  386. static void restore_regs(struct bpf_jit *jit, u32 rs, u32 re)
  387. {
  388. u32 off = jit->frame_off + offsetof(struct prog_frame, r6) + (rs - 6) * 8;
  389. if (rs == re)
  390. /* lg %rs,off(%r15) */
  391. _EMIT6(0xe300f000 | rs << 20 | off, 0x0004);
  392. else
  393. /* lmg %rs,%re,off(%r15) */
  394. _EMIT6_DISP(0xeb00f000 | rs << 20 | re << 16, 0x0004, off);
  395. }
  396. /*
  397. * Return first seen register (from start)
  398. */
  399. static int get_start(u16 seen_regs, int start)
  400. {
  401. int i;
  402. for (i = start; i <= 15; i++) {
  403. if (seen_regs & (1 << i))
  404. return i;
  405. }
  406. return 0;
  407. }
  408. /*
  409. * Return last seen register (from start) (gap >= 2)
  410. */
  411. static int get_end(u16 seen_regs, int start)
  412. {
  413. int i;
  414. for (i = start; i < 15; i++) {
  415. if (!(seen_regs & (3 << i)))
  416. return i - 1;
  417. }
  418. return (seen_regs & (1 << 15)) ? 15 : 14;
  419. }
  420. #define REGS_SAVE 1
  421. #define REGS_RESTORE 0
  422. /*
  423. * Save and restore clobbered registers (6-15) on stack.
  424. * We save/restore registers in chunks with gap >= 2 registers.
  425. */
  426. static void save_restore_regs(struct bpf_jit *jit, int op, u16 extra_regs)
  427. {
  428. u16 seen_regs = jit->seen_regs | extra_regs;
  429. const int last = 15, save_restore_size = 6;
  430. int re = 6, rs;
  431. if (is_first_pass(jit)) {
  432. /*
  433. * We don't know yet which registers are used. Reserve space
  434. * conservatively.
  435. */
  436. jit->prg += (last - re + 1) * save_restore_size;
  437. return;
  438. }
  439. do {
  440. rs = get_start(seen_regs, re);
  441. if (!rs)
  442. break;
  443. re = get_end(seen_regs, rs + 1);
  444. if (op == REGS_SAVE)
  445. save_regs(jit, rs, re);
  446. else
  447. restore_regs(jit, rs, re);
  448. re++;
  449. } while (re <= last);
  450. }
  451. static void bpf_skip(struct bpf_jit *jit, int size)
  452. {
  453. if (size >= 6 && !is_valid_rel(size)) {
  454. /* brcl 0xf,size */
  455. EMIT6_PCREL_RIL(0xc0f4000000, size);
  456. size -= 6;
  457. } else if (size >= 4 && is_valid_rel(size)) {
  458. /* brc 0xf,size */
  459. EMIT4_PCREL(0xa7f40000, size);
  460. size -= 4;
  461. }
  462. while (size >= 2) {
  463. /* bcr 0,%0 */
  464. _EMIT2(0x0700);
  465. size -= 2;
  466. }
  467. }
  468. /*
  469. * PLT for hotpatchable calls. The calling convention is the same as for the
  470. * ftrace hotpatch trampolines: %r0 is return address, %r1 is clobbered.
  471. */
  472. struct bpf_plt {
  473. char code[16];
  474. void *ret;
  475. void *target;
  476. } __packed;
  477. extern const struct bpf_plt bpf_plt;
  478. asm(
  479. ".pushsection .rodata\n"
  480. " .balign 8\n"
  481. "bpf_plt:\n"
  482. " lgrl %r0,bpf_plt_ret\n"
  483. " lgrl %r1,bpf_plt_target\n"
  484. " br %r1\n"
  485. " .balign 8\n"
  486. "bpf_plt_ret: .quad 0\n"
  487. "bpf_plt_target: .quad 0\n"
  488. " .popsection\n"
  489. );
  490. static void bpf_jit_plt(struct bpf_plt *plt, void *ret, void *target)
  491. {
  492. memcpy(plt, &bpf_plt, sizeof(*plt));
  493. plt->ret = ret;
  494. /*
  495. * (target == NULL) implies that the branch to this PLT entry was
  496. * patched and became a no-op. However, some CPU could have jumped
  497. * to this PLT entry before patching and may be still executing it.
  498. *
  499. * Since the intention in this case is to make the PLT entry a no-op,
  500. * make the target point to the return label instead of NULL.
  501. */
  502. plt->target = target ?: ret;
  503. }
  504. /*
  505. * Emit function prologue
  506. *
  507. * Save registers and create stack frame if necessary.
  508. * Stack frame layout is described by struct prog_frame.
  509. */
  510. static void bpf_jit_prologue(struct bpf_jit *jit, struct bpf_prog *fp)
  511. {
  512. BUILD_BUG_ON(sizeof(struct prog_frame) != STACK_FRAME_OVERHEAD);
  513. /* No-op for hotpatching */
  514. /* brcl 0,prologue_plt */
  515. EMIT6_PCREL_RILC(0xc0040000, 0, jit->prologue_plt);
  516. jit->prologue_plt_ret = jit->prg;
  517. if (!bpf_is_subprog(fp)) {
  518. /* Initialize the tail call counter in the main program. */
  519. /* xc tail_call_cnt(4,%r15),tail_call_cnt(%r15) */
  520. _EMIT6(0xd703f000 | offsetof(struct prog_frame, tail_call_cnt),
  521. 0xf000 | offsetof(struct prog_frame, tail_call_cnt));
  522. } else {
  523. /*
  524. * Skip the tail call counter initialization in subprograms.
  525. * Insert nops in order to have tail_call_start at a
  526. * predictable offset.
  527. */
  528. bpf_skip(jit, 6);
  529. }
  530. /* Tail calls have to skip above initialization */
  531. jit->tail_call_start = jit->prg;
  532. if (fp->aux->exception_cb) {
  533. /*
  534. * Switch stack, the new address is in the 2nd parameter.
  535. *
  536. * Arrange the restoration of %r6-%r15 in the epilogue.
  537. * Do not restore them now, the prog does not need them.
  538. */
  539. /* lgr %r15,%r3 */
  540. EMIT4(0xb9040000, REG_15, REG_3);
  541. jit->seen_regs |= NVREGS;
  542. } else {
  543. /* Save registers */
  544. save_restore_regs(jit, REGS_SAVE,
  545. fp->aux->exception_boundary ? NVREGS : 0);
  546. }
  547. /* Setup literal pool */
  548. if (is_first_pass(jit) || (jit->seen & SEEN_LITERAL)) {
  549. if (!is_first_pass(jit) &&
  550. is_valid_ldisp(jit->size - (jit->prg + 2))) {
  551. /* basr %l,0 */
  552. EMIT2(0x0d00, REG_L, REG_0);
  553. jit->base_ip = jit->prg;
  554. } else {
  555. /* larl %l,lit32_start */
  556. EMIT6_PCREL_RILB(0xc0000000, REG_L, jit->lit32_start);
  557. jit->base_ip = jit->lit32_start;
  558. }
  559. }
  560. /* Setup stack and backchain */
  561. if (is_first_pass(jit) || (jit->seen & SEEN_STACK)) {
  562. /* lgr %w1,%r15 (backchain) */
  563. EMIT4(0xb9040000, REG_W1, REG_15);
  564. /* la %bfp,unused_end(%r15) (BPF frame pointer) */
  565. EMIT4_DISP(0x41000000, BPF_REG_FP, REG_15,
  566. offsetofend(struct prog_frame, unused));
  567. /* aghi %r15,-frame_off */
  568. EMIT4_IMM(0xa70b0000, REG_15, -jit->frame_off);
  569. /* stg %w1,backchain(%r15) */
  570. EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W1, REG_0,
  571. REG_15,
  572. offsetof(struct prog_frame, backchain));
  573. }
  574. }
  575. /*
  576. * Emit an expoline for a jump that follows
  577. */
  578. static void emit_expoline(struct bpf_jit *jit)
  579. {
  580. /* exrl %r0,.+10 */
  581. EMIT6_PCREL_RIL(0xc6000000, jit->prg + 10);
  582. /* j . */
  583. EMIT4_PCREL(0xa7f40000, 0);
  584. }
  585. /*
  586. * Emit __s390_indirect_jump_r1 thunk if necessary
  587. */
  588. static void emit_r1_thunk(struct bpf_jit *jit)
  589. {
  590. if (nospec_uses_trampoline()) {
  591. jit->r1_thunk_ip = jit->prg;
  592. emit_expoline(jit);
  593. /* br %r1 */
  594. _EMIT2(0x07f1);
  595. }
  596. }
  597. /*
  598. * Call r1 either directly or via __s390_indirect_jump_r1 thunk
  599. */
  600. static void call_r1(struct bpf_jit *jit)
  601. {
  602. if (nospec_uses_trampoline())
  603. /* brasl %r14,__s390_indirect_jump_r1 */
  604. EMIT6_PCREL_RILB(0xc0050000, REG_14, jit->r1_thunk_ip);
  605. else
  606. /* basr %r14,%r1 */
  607. EMIT2(0x0d00, REG_14, REG_1);
  608. }
  609. /*
  610. * Function epilogue
  611. */
  612. static void bpf_jit_epilogue(struct bpf_jit *jit)
  613. {
  614. jit->exit_ip = jit->prg;
  615. /* Load exit code: lgr %r2,%b0 */
  616. EMIT4(0xb9040000, REG_2, BPF_REG_0);
  617. /* Restore registers */
  618. save_restore_regs(jit, REGS_RESTORE, 0);
  619. if (nospec_uses_trampoline()) {
  620. jit->r14_thunk_ip = jit->prg;
  621. /* Generate __s390_indirect_jump_r14 thunk */
  622. emit_expoline(jit);
  623. }
  624. /* br %r14 */
  625. _EMIT2(0x07fe);
  626. if (is_first_pass(jit) || (jit->seen & SEEN_FUNC))
  627. emit_r1_thunk(jit);
  628. jit->prg = ALIGN(jit->prg, 8);
  629. jit->prologue_plt = jit->prg;
  630. if (jit->prg_buf)
  631. bpf_jit_plt((struct bpf_plt *)(jit->prg_buf + jit->prg),
  632. jit->prg_buf + jit->prologue_plt_ret, NULL);
  633. jit->prg += sizeof(struct bpf_plt);
  634. }
  635. bool ex_handler_bpf(const struct exception_table_entry *x, struct pt_regs *regs)
  636. {
  637. regs->psw.addr = extable_fixup(x);
  638. if (x->data != -1)
  639. regs->gprs[x->data] = 0;
  640. return true;
  641. }
  642. /*
  643. * A single BPF probe instruction
  644. */
  645. struct bpf_jit_probe {
  646. int prg; /* JITed instruction offset */
  647. int nop_prg; /* JITed nop offset */
  648. int reg; /* Register to clear on exception */
  649. int arena_reg; /* Register to use for arena addressing */
  650. };
  651. static void bpf_jit_probe_init(struct bpf_jit_probe *probe)
  652. {
  653. probe->prg = -1;
  654. probe->nop_prg = -1;
  655. probe->reg = -1;
  656. probe->arena_reg = REG_0;
  657. }
  658. /*
  659. * Handlers of certain exceptions leave psw.addr pointing to the instruction
  660. * directly after the failing one. Therefore, create two exception table
  661. * entries and also add a nop in case two probing instructions come directly
  662. * after each other.
  663. */
  664. static void bpf_jit_probe_emit_nop(struct bpf_jit *jit,
  665. struct bpf_jit_probe *probe)
  666. {
  667. if (probe->prg == -1 || probe->nop_prg != -1)
  668. /* The probe is not armed or nop is already emitted. */
  669. return;
  670. probe->nop_prg = jit->prg;
  671. /* bcr 0,%0 */
  672. _EMIT2(0x0700);
  673. }
  674. static void bpf_jit_probe_load_pre(struct bpf_jit *jit, struct bpf_insn *insn,
  675. struct bpf_jit_probe *probe)
  676. {
  677. if (BPF_MODE(insn->code) != BPF_PROBE_MEM &&
  678. BPF_MODE(insn->code) != BPF_PROBE_MEMSX &&
  679. BPF_MODE(insn->code) != BPF_PROBE_MEM32)
  680. return;
  681. if (BPF_MODE(insn->code) == BPF_PROBE_MEM32) {
  682. /* lgrl %r1,kern_arena */
  683. EMIT6_PCREL_RILB(0xc4080000, REG_W1, jit->kern_arena);
  684. probe->arena_reg = REG_W1;
  685. }
  686. probe->prg = jit->prg;
  687. probe->reg = reg2hex[insn->dst_reg];
  688. }
  689. static void bpf_jit_probe_store_pre(struct bpf_jit *jit, struct bpf_insn *insn,
  690. struct bpf_jit_probe *probe)
  691. {
  692. if (BPF_MODE(insn->code) != BPF_PROBE_MEM32)
  693. return;
  694. /* lgrl %r1,kern_arena */
  695. EMIT6_PCREL_RILB(0xc4080000, REG_W1, jit->kern_arena);
  696. probe->arena_reg = REG_W1;
  697. probe->prg = jit->prg;
  698. }
  699. static void bpf_jit_probe_atomic_pre(struct bpf_jit *jit,
  700. struct bpf_insn *insn,
  701. struct bpf_jit_probe *probe)
  702. {
  703. if (BPF_MODE(insn->code) != BPF_PROBE_ATOMIC)
  704. return;
  705. /* lgrl %r1,kern_arena */
  706. EMIT6_PCREL_RILB(0xc4080000, REG_W1, jit->kern_arena);
  707. /* agr %r1,%dst */
  708. EMIT4(0xb9080000, REG_W1, insn->dst_reg);
  709. probe->arena_reg = REG_W1;
  710. probe->prg = jit->prg;
  711. }
  712. static int bpf_jit_probe_post(struct bpf_jit *jit, struct bpf_prog *fp,
  713. struct bpf_jit_probe *probe)
  714. {
  715. struct exception_table_entry *ex;
  716. int i, prg;
  717. s64 delta;
  718. u8 *insn;
  719. if (probe->prg == -1)
  720. /* The probe is not armed. */
  721. return 0;
  722. bpf_jit_probe_emit_nop(jit, probe);
  723. if (!fp->aux->extable)
  724. /* Do nothing during early JIT passes. */
  725. return 0;
  726. insn = jit->prg_buf + probe->prg;
  727. if (WARN_ON_ONCE(probe->prg + insn_length(*insn) != probe->nop_prg))
  728. /* JIT bug - gap between probe and nop instructions. */
  729. return -1;
  730. for (i = 0; i < 2; i++) {
  731. if (WARN_ON_ONCE(jit->excnt >= fp->aux->num_exentries))
  732. /* Verifier bug - not enough entries. */
  733. return -1;
  734. ex = &fp->aux->extable[jit->excnt];
  735. /* Add extable entries for probe and nop instructions. */
  736. prg = i == 0 ? probe->prg : probe->nop_prg;
  737. delta = jit->prg_buf + prg - (u8 *)&ex->insn;
  738. if (WARN_ON_ONCE(delta < INT_MIN || delta > INT_MAX))
  739. /* JIT bug - code and extable must be close. */
  740. return -1;
  741. ex->insn = delta;
  742. /*
  743. * Land on the current instruction. Note that the extable
  744. * infrastructure ignores the fixup field; it is handled by
  745. * ex_handler_bpf().
  746. */
  747. delta = jit->prg_buf + jit->prg - (u8 *)&ex->fixup;
  748. if (WARN_ON_ONCE(delta < INT_MIN || delta > INT_MAX))
  749. /* JIT bug - landing pad and extable must be close. */
  750. return -1;
  751. ex->fixup = delta;
  752. ex->type = EX_TYPE_BPF;
  753. ex->data = probe->reg;
  754. jit->excnt++;
  755. }
  756. return 0;
  757. }
  758. /*
  759. * Sign-extend the register if necessary
  760. */
  761. static int sign_extend(struct bpf_jit *jit, int r, u8 size, u8 flags)
  762. {
  763. if (!(flags & BTF_FMODEL_SIGNED_ARG))
  764. return 0;
  765. switch (size) {
  766. case 1:
  767. /* lgbr %r,%r */
  768. EMIT4(0xb9060000, r, r);
  769. return 0;
  770. case 2:
  771. /* lghr %r,%r */
  772. EMIT4(0xb9070000, r, r);
  773. return 0;
  774. case 4:
  775. /* lgfr %r,%r */
  776. EMIT4(0xb9140000, r, r);
  777. return 0;
  778. case 8:
  779. return 0;
  780. default:
  781. return -1;
  782. }
  783. }
  784. /*
  785. * Compile one eBPF instruction into s390x code
  786. *
  787. * NOTE: Use noinline because for gcov (-fprofile-arcs) gcc allocates a lot of
  788. * stack space for the large switch statement.
  789. */
  790. static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp,
  791. int i, bool extra_pass)
  792. {
  793. struct bpf_insn *insn = &fp->insnsi[i];
  794. s32 branch_oc_off = insn->off;
  795. u32 dst_reg = insn->dst_reg;
  796. u32 src_reg = insn->src_reg;
  797. struct bpf_jit_probe probe;
  798. int last, insn_count = 1;
  799. u32 *addrs = jit->addrs;
  800. s32 imm = insn->imm;
  801. s16 off = insn->off;
  802. unsigned int mask;
  803. int err;
  804. bpf_jit_probe_init(&probe);
  805. switch (insn->code) {
  806. /*
  807. * BPF_MOV
  808. */
  809. case BPF_ALU | BPF_MOV | BPF_X:
  810. switch (insn->off) {
  811. case 0: /* DST = (u32) SRC */
  812. /* llgfr %dst,%src */
  813. EMIT4(0xb9160000, dst_reg, src_reg);
  814. if (insn_is_zext(&insn[1]))
  815. insn_count = 2;
  816. break;
  817. case 8: /* DST = (u32)(s8) SRC */
  818. /* lbr %dst,%src */
  819. EMIT4(0xb9260000, dst_reg, src_reg);
  820. /* llgfr %dst,%dst */
  821. EMIT4(0xb9160000, dst_reg, dst_reg);
  822. break;
  823. case 16: /* DST = (u32)(s16) SRC */
  824. /* lhr %dst,%src */
  825. EMIT4(0xb9270000, dst_reg, src_reg);
  826. /* llgfr %dst,%dst */
  827. EMIT4(0xb9160000, dst_reg, dst_reg);
  828. break;
  829. }
  830. break;
  831. case BPF_ALU64 | BPF_MOV | BPF_X:
  832. if (insn_is_cast_user(insn)) {
  833. int patch_brc;
  834. /* ltgr %dst,%src */
  835. EMIT4(0xb9020000, dst_reg, src_reg);
  836. /* brc 8,0f */
  837. patch_brc = jit->prg;
  838. EMIT4_PCREL_RIC(0xa7040000, 8, 0);
  839. /* iihf %dst,user_arena>>32 */
  840. EMIT6_IMM(0xc0080000, dst_reg, jit->user_arena >> 32);
  841. /* 0: */
  842. if (jit->prg_buf)
  843. *(u16 *)(jit->prg_buf + patch_brc + 2) =
  844. (jit->prg - patch_brc) >> 1;
  845. break;
  846. }
  847. switch (insn->off) {
  848. case 0: /* DST = SRC */
  849. /* lgr %dst,%src */
  850. EMIT4(0xb9040000, dst_reg, src_reg);
  851. break;
  852. case 8: /* DST = (s8) SRC */
  853. /* lgbr %dst,%src */
  854. EMIT4(0xb9060000, dst_reg, src_reg);
  855. break;
  856. case 16: /* DST = (s16) SRC */
  857. /* lghr %dst,%src */
  858. EMIT4(0xb9070000, dst_reg, src_reg);
  859. break;
  860. case 32: /* DST = (s32) SRC */
  861. /* lgfr %dst,%src */
  862. EMIT4(0xb9140000, dst_reg, src_reg);
  863. break;
  864. }
  865. break;
  866. case BPF_ALU | BPF_MOV | BPF_K: /* dst = (u32) imm */
  867. /* llilf %dst,imm */
  868. EMIT6_IMM(0xc00f0000, dst_reg, imm);
  869. if (insn_is_zext(&insn[1]))
  870. insn_count = 2;
  871. break;
  872. case BPF_ALU64 | BPF_MOV | BPF_K: /* dst = imm */
  873. /* lgfi %dst,imm */
  874. EMIT6_IMM(0xc0010000, dst_reg, imm);
  875. break;
  876. /*
  877. * BPF_LD 64
  878. */
  879. case BPF_LD | BPF_IMM | BPF_DW: /* dst = (u64) imm */
  880. {
  881. /* 16 byte instruction that uses two 'struct bpf_insn' */
  882. u64 imm64;
  883. imm64 = (u64)(u32) insn[0].imm | ((u64)(u32) insn[1].imm) << 32;
  884. /* lgrl %dst,imm */
  885. EMIT6_PCREL_RILB(0xc4080000, dst_reg, _EMIT_CONST_U64(imm64));
  886. insn_count = 2;
  887. break;
  888. }
  889. /*
  890. * BPF_ADD
  891. */
  892. case BPF_ALU | BPF_ADD | BPF_X: /* dst = (u32) dst + (u32) src */
  893. /* ar %dst,%src */
  894. EMIT2(0x1a00, dst_reg, src_reg);
  895. EMIT_ZERO(dst_reg);
  896. break;
  897. case BPF_ALU64 | BPF_ADD | BPF_X: /* dst = dst + src */
  898. /* agr %dst,%src */
  899. EMIT4(0xb9080000, dst_reg, src_reg);
  900. break;
  901. case BPF_ALU | BPF_ADD | BPF_K: /* dst = (u32) dst + (u32) imm */
  902. if (imm != 0) {
  903. /* alfi %dst,imm */
  904. EMIT6_IMM(0xc20b0000, dst_reg, imm);
  905. }
  906. EMIT_ZERO(dst_reg);
  907. break;
  908. case BPF_ALU64 | BPF_ADD | BPF_K: /* dst = dst + imm */
  909. if (!imm)
  910. break;
  911. /* agfi %dst,imm */
  912. EMIT6_IMM(0xc2080000, dst_reg, imm);
  913. break;
  914. /*
  915. * BPF_SUB
  916. */
  917. case BPF_ALU | BPF_SUB | BPF_X: /* dst = (u32) dst - (u32) src */
  918. /* sr %dst,%src */
  919. EMIT2(0x1b00, dst_reg, src_reg);
  920. EMIT_ZERO(dst_reg);
  921. break;
  922. case BPF_ALU64 | BPF_SUB | BPF_X: /* dst = dst - src */
  923. /* sgr %dst,%src */
  924. EMIT4(0xb9090000, dst_reg, src_reg);
  925. break;
  926. case BPF_ALU | BPF_SUB | BPF_K: /* dst = (u32) dst - (u32) imm */
  927. if (imm != 0) {
  928. /* alfi %dst,-imm */
  929. EMIT6_IMM(0xc20b0000, dst_reg, -imm);
  930. }
  931. EMIT_ZERO(dst_reg);
  932. break;
  933. case BPF_ALU64 | BPF_SUB | BPF_K: /* dst = dst - imm */
  934. if (!imm)
  935. break;
  936. if (imm == -0x80000000) {
  937. /* algfi %dst,0x80000000 */
  938. EMIT6_IMM(0xc20a0000, dst_reg, 0x80000000);
  939. } else {
  940. /* agfi %dst,-imm */
  941. EMIT6_IMM(0xc2080000, dst_reg, -imm);
  942. }
  943. break;
  944. /*
  945. * BPF_MUL
  946. */
  947. case BPF_ALU | BPF_MUL | BPF_X: /* dst = (u32) dst * (u32) src */
  948. /* msr %dst,%src */
  949. EMIT4(0xb2520000, dst_reg, src_reg);
  950. EMIT_ZERO(dst_reg);
  951. break;
  952. case BPF_ALU64 | BPF_MUL | BPF_X: /* dst = dst * src */
  953. /* msgr %dst,%src */
  954. EMIT4(0xb90c0000, dst_reg, src_reg);
  955. break;
  956. case BPF_ALU | BPF_MUL | BPF_K: /* dst = (u32) dst * (u32) imm */
  957. if (imm != 1) {
  958. /* msfi %r5,imm */
  959. EMIT6_IMM(0xc2010000, dst_reg, imm);
  960. }
  961. EMIT_ZERO(dst_reg);
  962. break;
  963. case BPF_ALU64 | BPF_MUL | BPF_K: /* dst = dst * imm */
  964. if (imm == 1)
  965. break;
  966. /* msgfi %dst,imm */
  967. EMIT6_IMM(0xc2000000, dst_reg, imm);
  968. break;
  969. /*
  970. * BPF_DIV / BPF_MOD
  971. */
  972. case BPF_ALU | BPF_DIV | BPF_X:
  973. case BPF_ALU | BPF_MOD | BPF_X:
  974. {
  975. int rc_reg = BPF_OP(insn->code) == BPF_DIV ? REG_W1 : REG_W0;
  976. switch (off) {
  977. case 0: /* dst = (u32) dst {/,%} (u32) src */
  978. /* xr %w0,%w0 */
  979. EMIT2(0x1700, REG_W0, REG_W0);
  980. /* lr %w1,%dst */
  981. EMIT2(0x1800, REG_W1, dst_reg);
  982. /* dlr %w0,%src */
  983. EMIT4(0xb9970000, REG_W0, src_reg);
  984. break;
  985. case 1: /* dst = (u32) ((s32) dst {/,%} (s32) src) */
  986. /* lgfr %r1,%dst */
  987. EMIT4(0xb9140000, REG_W1, dst_reg);
  988. /* dsgfr %r0,%src */
  989. EMIT4(0xb91d0000, REG_W0, src_reg);
  990. break;
  991. }
  992. /* llgfr %dst,%rc */
  993. EMIT4(0xb9160000, dst_reg, rc_reg);
  994. if (insn_is_zext(&insn[1]))
  995. insn_count = 2;
  996. break;
  997. }
  998. case BPF_ALU64 | BPF_DIV | BPF_X:
  999. case BPF_ALU64 | BPF_MOD | BPF_X:
  1000. {
  1001. int rc_reg = BPF_OP(insn->code) == BPF_DIV ? REG_W1 : REG_W0;
  1002. switch (off) {
  1003. case 0: /* dst = dst {/,%} src */
  1004. /* lghi %w0,0 */
  1005. EMIT4_IMM(0xa7090000, REG_W0, 0);
  1006. /* lgr %w1,%dst */
  1007. EMIT4(0xb9040000, REG_W1, dst_reg);
  1008. /* dlgr %w0,%src */
  1009. EMIT4(0xb9870000, REG_W0, src_reg);
  1010. break;
  1011. case 1: /* dst = (s64) dst {/,%} (s64) src */
  1012. /* lgr %w1,%dst */
  1013. EMIT4(0xb9040000, REG_W1, dst_reg);
  1014. /* dsgr %w0,%src */
  1015. EMIT4(0xb90d0000, REG_W0, src_reg);
  1016. break;
  1017. }
  1018. /* lgr %dst,%rc */
  1019. EMIT4(0xb9040000, dst_reg, rc_reg);
  1020. break;
  1021. }
  1022. case BPF_ALU | BPF_DIV | BPF_K:
  1023. case BPF_ALU | BPF_MOD | BPF_K:
  1024. {
  1025. int rc_reg = BPF_OP(insn->code) == BPF_DIV ? REG_W1 : REG_W0;
  1026. if (imm == 1) {
  1027. if (BPF_OP(insn->code) == BPF_MOD)
  1028. /* lghi %dst,0 */
  1029. EMIT4_IMM(0xa7090000, dst_reg, 0);
  1030. else
  1031. EMIT_ZERO(dst_reg);
  1032. break;
  1033. }
  1034. if (!is_first_pass(jit) && can_use_ldisp_for_lit32(jit)) {
  1035. switch (off) {
  1036. case 0: /* dst = (u32) dst {/,%} (u32) imm */
  1037. /* xr %w0,%w0 */
  1038. EMIT2(0x1700, REG_W0, REG_W0);
  1039. /* lr %w1,%dst */
  1040. EMIT2(0x1800, REG_W1, dst_reg);
  1041. /* dl %w0,<d(imm)>(%l) */
  1042. EMIT6_DISP_LH(0xe3000000, 0x0097, REG_W0, REG_0,
  1043. REG_L, EMIT_CONST_U32(imm));
  1044. break;
  1045. case 1: /* dst = (s32) dst {/,%} (s32) imm */
  1046. /* lgfr %r1,%dst */
  1047. EMIT4(0xb9140000, REG_W1, dst_reg);
  1048. /* dsgf %r0,<d(imm)>(%l) */
  1049. EMIT6_DISP_LH(0xe3000000, 0x001d, REG_W0, REG_0,
  1050. REG_L, EMIT_CONST_U32(imm));
  1051. break;
  1052. }
  1053. } else {
  1054. switch (off) {
  1055. case 0: /* dst = (u32) dst {/,%} (u32) imm */
  1056. /* xr %w0,%w0 */
  1057. EMIT2(0x1700, REG_W0, REG_W0);
  1058. /* lr %w1,%dst */
  1059. EMIT2(0x1800, REG_W1, dst_reg);
  1060. /* lrl %dst,imm */
  1061. EMIT6_PCREL_RILB(0xc40d0000, dst_reg,
  1062. _EMIT_CONST_U32(imm));
  1063. jit->seen |= SEEN_LITERAL;
  1064. /* dlr %w0,%dst */
  1065. EMIT4(0xb9970000, REG_W0, dst_reg);
  1066. break;
  1067. case 1: /* dst = (s32) dst {/,%} (s32) imm */
  1068. /* lgfr %w1,%dst */
  1069. EMIT4(0xb9140000, REG_W1, dst_reg);
  1070. /* lgfrl %dst,imm */
  1071. EMIT6_PCREL_RILB(0xc40c0000, dst_reg,
  1072. _EMIT_CONST_U32(imm));
  1073. jit->seen |= SEEN_LITERAL;
  1074. /* dsgr %w0,%dst */
  1075. EMIT4(0xb90d0000, REG_W0, dst_reg);
  1076. break;
  1077. }
  1078. }
  1079. /* llgfr %dst,%rc */
  1080. EMIT4(0xb9160000, dst_reg, rc_reg);
  1081. if (insn_is_zext(&insn[1]))
  1082. insn_count = 2;
  1083. break;
  1084. }
  1085. case BPF_ALU64 | BPF_DIV | BPF_K:
  1086. case BPF_ALU64 | BPF_MOD | BPF_K:
  1087. {
  1088. int rc_reg = BPF_OP(insn->code) == BPF_DIV ? REG_W1 : REG_W0;
  1089. if (imm == 1) {
  1090. if (BPF_OP(insn->code) == BPF_MOD)
  1091. /* lhgi %dst,0 */
  1092. EMIT4_IMM(0xa7090000, dst_reg, 0);
  1093. break;
  1094. }
  1095. if (!is_first_pass(jit) && can_use_ldisp_for_lit64(jit)) {
  1096. switch (off) {
  1097. case 0: /* dst = dst {/,%} imm */
  1098. /* lghi %w0,0 */
  1099. EMIT4_IMM(0xa7090000, REG_W0, 0);
  1100. /* lgr %w1,%dst */
  1101. EMIT4(0xb9040000, REG_W1, dst_reg);
  1102. /* dlg %w0,<d(imm)>(%l) */
  1103. EMIT6_DISP_LH(0xe3000000, 0x0087, REG_W0, REG_0,
  1104. REG_L, EMIT_CONST_U64(imm));
  1105. break;
  1106. case 1: /* dst = (s64) dst {/,%} (s64) imm */
  1107. /* lgr %w1,%dst */
  1108. EMIT4(0xb9040000, REG_W1, dst_reg);
  1109. /* dsg %w0,<d(imm)>(%l) */
  1110. EMIT6_DISP_LH(0xe3000000, 0x000d, REG_W0, REG_0,
  1111. REG_L, EMIT_CONST_U64(imm));
  1112. break;
  1113. }
  1114. } else {
  1115. switch (off) {
  1116. case 0: /* dst = dst {/,%} imm */
  1117. /* lghi %w0,0 */
  1118. EMIT4_IMM(0xa7090000, REG_W0, 0);
  1119. /* lgr %w1,%dst */
  1120. EMIT4(0xb9040000, REG_W1, dst_reg);
  1121. /* lgrl %dst,imm */
  1122. EMIT6_PCREL_RILB(0xc4080000, dst_reg,
  1123. _EMIT_CONST_U64(imm));
  1124. jit->seen |= SEEN_LITERAL;
  1125. /* dlgr %w0,%dst */
  1126. EMIT4(0xb9870000, REG_W0, dst_reg);
  1127. break;
  1128. case 1: /* dst = (s64) dst {/,%} (s64) imm */
  1129. /* lgr %w1,%dst */
  1130. EMIT4(0xb9040000, REG_W1, dst_reg);
  1131. /* lgrl %dst,imm */
  1132. EMIT6_PCREL_RILB(0xc4080000, dst_reg,
  1133. _EMIT_CONST_U64(imm));
  1134. jit->seen |= SEEN_LITERAL;
  1135. /* dsgr %w0,%dst */
  1136. EMIT4(0xb90d0000, REG_W0, dst_reg);
  1137. break;
  1138. }
  1139. }
  1140. /* lgr %dst,%rc */
  1141. EMIT4(0xb9040000, dst_reg, rc_reg);
  1142. break;
  1143. }
  1144. /*
  1145. * BPF_AND
  1146. */
  1147. case BPF_ALU | BPF_AND | BPF_X: /* dst = (u32) dst & (u32) src */
  1148. /* nr %dst,%src */
  1149. EMIT2(0x1400, dst_reg, src_reg);
  1150. EMIT_ZERO(dst_reg);
  1151. break;
  1152. case BPF_ALU64 | BPF_AND | BPF_X: /* dst = dst & src */
  1153. /* ngr %dst,%src */
  1154. EMIT4(0xb9800000, dst_reg, src_reg);
  1155. break;
  1156. case BPF_ALU | BPF_AND | BPF_K: /* dst = (u32) dst & (u32) imm */
  1157. /* nilf %dst,imm */
  1158. EMIT6_IMM(0xc00b0000, dst_reg, imm);
  1159. EMIT_ZERO(dst_reg);
  1160. break;
  1161. case BPF_ALU64 | BPF_AND | BPF_K: /* dst = dst & imm */
  1162. if (!is_first_pass(jit) && can_use_ldisp_for_lit64(jit)) {
  1163. /* ng %dst,<d(imm)>(%l) */
  1164. EMIT6_DISP_LH(0xe3000000, 0x0080,
  1165. dst_reg, REG_0, REG_L,
  1166. EMIT_CONST_U64(imm));
  1167. } else {
  1168. /* lgrl %w0,imm */
  1169. EMIT6_PCREL_RILB(0xc4080000, REG_W0,
  1170. _EMIT_CONST_U64(imm));
  1171. jit->seen |= SEEN_LITERAL;
  1172. /* ngr %dst,%w0 */
  1173. EMIT4(0xb9800000, dst_reg, REG_W0);
  1174. }
  1175. break;
  1176. /*
  1177. * BPF_OR
  1178. */
  1179. case BPF_ALU | BPF_OR | BPF_X: /* dst = (u32) dst | (u32) src */
  1180. /* or %dst,%src */
  1181. EMIT2(0x1600, dst_reg, src_reg);
  1182. EMIT_ZERO(dst_reg);
  1183. break;
  1184. case BPF_ALU64 | BPF_OR | BPF_X: /* dst = dst | src */
  1185. /* ogr %dst,%src */
  1186. EMIT4(0xb9810000, dst_reg, src_reg);
  1187. break;
  1188. case BPF_ALU | BPF_OR | BPF_K: /* dst = (u32) dst | (u32) imm */
  1189. /* oilf %dst,imm */
  1190. EMIT6_IMM(0xc00d0000, dst_reg, imm);
  1191. EMIT_ZERO(dst_reg);
  1192. break;
  1193. case BPF_ALU64 | BPF_OR | BPF_K: /* dst = dst | imm */
  1194. if (!is_first_pass(jit) && can_use_ldisp_for_lit64(jit)) {
  1195. /* og %dst,<d(imm)>(%l) */
  1196. EMIT6_DISP_LH(0xe3000000, 0x0081,
  1197. dst_reg, REG_0, REG_L,
  1198. EMIT_CONST_U64(imm));
  1199. } else {
  1200. /* lgrl %w0,imm */
  1201. EMIT6_PCREL_RILB(0xc4080000, REG_W0,
  1202. _EMIT_CONST_U64(imm));
  1203. jit->seen |= SEEN_LITERAL;
  1204. /* ogr %dst,%w0 */
  1205. EMIT4(0xb9810000, dst_reg, REG_W0);
  1206. }
  1207. break;
  1208. /*
  1209. * BPF_XOR
  1210. */
  1211. case BPF_ALU | BPF_XOR | BPF_X: /* dst = (u32) dst ^ (u32) src */
  1212. /* xr %dst,%src */
  1213. EMIT2(0x1700, dst_reg, src_reg);
  1214. EMIT_ZERO(dst_reg);
  1215. break;
  1216. case BPF_ALU64 | BPF_XOR | BPF_X: /* dst = dst ^ src */
  1217. /* xgr %dst,%src */
  1218. EMIT4(0xb9820000, dst_reg, src_reg);
  1219. break;
  1220. case BPF_ALU | BPF_XOR | BPF_K: /* dst = (u32) dst ^ (u32) imm */
  1221. if (imm != 0) {
  1222. /* xilf %dst,imm */
  1223. EMIT6_IMM(0xc0070000, dst_reg, imm);
  1224. }
  1225. EMIT_ZERO(dst_reg);
  1226. break;
  1227. case BPF_ALU64 | BPF_XOR | BPF_K: /* dst = dst ^ imm */
  1228. if (!is_first_pass(jit) && can_use_ldisp_for_lit64(jit)) {
  1229. /* xg %dst,<d(imm)>(%l) */
  1230. EMIT6_DISP_LH(0xe3000000, 0x0082,
  1231. dst_reg, REG_0, REG_L,
  1232. EMIT_CONST_U64(imm));
  1233. } else {
  1234. /* lgrl %w0,imm */
  1235. EMIT6_PCREL_RILB(0xc4080000, REG_W0,
  1236. _EMIT_CONST_U64(imm));
  1237. jit->seen |= SEEN_LITERAL;
  1238. /* xgr %dst,%w0 */
  1239. EMIT4(0xb9820000, dst_reg, REG_W0);
  1240. }
  1241. break;
  1242. /*
  1243. * BPF_LSH
  1244. */
  1245. case BPF_ALU | BPF_LSH | BPF_X: /* dst = (u32) dst << (u32) src */
  1246. /* sll %dst,0(%src) */
  1247. EMIT4_DISP(0x89000000, dst_reg, src_reg, 0);
  1248. EMIT_ZERO(dst_reg);
  1249. break;
  1250. case BPF_ALU64 | BPF_LSH | BPF_X: /* dst = dst << src */
  1251. /* sllg %dst,%dst,0(%src) */
  1252. EMIT6_DISP_LH(0xeb000000, 0x000d, dst_reg, dst_reg, src_reg, 0);
  1253. break;
  1254. case BPF_ALU | BPF_LSH | BPF_K: /* dst = (u32) dst << (u32) imm */
  1255. if (imm != 0) {
  1256. /* sll %dst,imm(%r0) */
  1257. EMIT4_DISP(0x89000000, dst_reg, REG_0, imm);
  1258. }
  1259. EMIT_ZERO(dst_reg);
  1260. break;
  1261. case BPF_ALU64 | BPF_LSH | BPF_K: /* dst = dst << imm */
  1262. if (imm == 0)
  1263. break;
  1264. /* sllg %dst,%dst,imm(%r0) */
  1265. EMIT6_DISP_LH(0xeb000000, 0x000d, dst_reg, dst_reg, REG_0, imm);
  1266. break;
  1267. /*
  1268. * BPF_RSH
  1269. */
  1270. case BPF_ALU | BPF_RSH | BPF_X: /* dst = (u32) dst >> (u32) src */
  1271. /* srl %dst,0(%src) */
  1272. EMIT4_DISP(0x88000000, dst_reg, src_reg, 0);
  1273. EMIT_ZERO(dst_reg);
  1274. break;
  1275. case BPF_ALU64 | BPF_RSH | BPF_X: /* dst = dst >> src */
  1276. /* srlg %dst,%dst,0(%src) */
  1277. EMIT6_DISP_LH(0xeb000000, 0x000c, dst_reg, dst_reg, src_reg, 0);
  1278. break;
  1279. case BPF_ALU | BPF_RSH | BPF_K: /* dst = (u32) dst >> (u32) imm */
  1280. if (imm != 0) {
  1281. /* srl %dst,imm(%r0) */
  1282. EMIT4_DISP(0x88000000, dst_reg, REG_0, imm);
  1283. }
  1284. EMIT_ZERO(dst_reg);
  1285. break;
  1286. case BPF_ALU64 | BPF_RSH | BPF_K: /* dst = dst >> imm */
  1287. if (imm == 0)
  1288. break;
  1289. /* srlg %dst,%dst,imm(%r0) */
  1290. EMIT6_DISP_LH(0xeb000000, 0x000c, dst_reg, dst_reg, REG_0, imm);
  1291. break;
  1292. /*
  1293. * BPF_ARSH
  1294. */
  1295. case BPF_ALU | BPF_ARSH | BPF_X: /* ((s32) dst) >>= src */
  1296. /* sra %dst,%dst,0(%src) */
  1297. EMIT4_DISP(0x8a000000, dst_reg, src_reg, 0);
  1298. EMIT_ZERO(dst_reg);
  1299. break;
  1300. case BPF_ALU64 | BPF_ARSH | BPF_X: /* ((s64) dst) >>= src */
  1301. /* srag %dst,%dst,0(%src) */
  1302. EMIT6_DISP_LH(0xeb000000, 0x000a, dst_reg, dst_reg, src_reg, 0);
  1303. break;
  1304. case BPF_ALU | BPF_ARSH | BPF_K: /* ((s32) dst >> imm */
  1305. if (imm != 0) {
  1306. /* sra %dst,imm(%r0) */
  1307. EMIT4_DISP(0x8a000000, dst_reg, REG_0, imm);
  1308. }
  1309. EMIT_ZERO(dst_reg);
  1310. break;
  1311. case BPF_ALU64 | BPF_ARSH | BPF_K: /* ((s64) dst) >>= imm */
  1312. if (imm == 0)
  1313. break;
  1314. /* srag %dst,%dst,imm(%r0) */
  1315. EMIT6_DISP_LH(0xeb000000, 0x000a, dst_reg, dst_reg, REG_0, imm);
  1316. break;
  1317. /*
  1318. * BPF_NEG
  1319. */
  1320. case BPF_ALU | BPF_NEG: /* dst = (u32) -dst */
  1321. /* lcr %dst,%dst */
  1322. EMIT2(0x1300, dst_reg, dst_reg);
  1323. EMIT_ZERO(dst_reg);
  1324. break;
  1325. case BPF_ALU64 | BPF_NEG: /* dst = -dst */
  1326. /* lcgr %dst,%dst */
  1327. EMIT4(0xb9030000, dst_reg, dst_reg);
  1328. break;
  1329. /*
  1330. * BPF_FROM_BE/LE
  1331. */
  1332. case BPF_ALU | BPF_END | BPF_FROM_BE:
  1333. /* s390 is big endian, therefore only clear high order bytes */
  1334. switch (imm) {
  1335. case 16: /* dst = (u16) cpu_to_be16(dst) */
  1336. /* llghr %dst,%dst */
  1337. EMIT4(0xb9850000, dst_reg, dst_reg);
  1338. if (insn_is_zext(&insn[1]))
  1339. insn_count = 2;
  1340. break;
  1341. case 32: /* dst = (u32) cpu_to_be32(dst) */
  1342. if (!fp->aux->verifier_zext)
  1343. /* llgfr %dst,%dst */
  1344. EMIT4(0xb9160000, dst_reg, dst_reg);
  1345. break;
  1346. case 64: /* dst = (u64) cpu_to_be64(dst) */
  1347. break;
  1348. }
  1349. break;
  1350. case BPF_ALU | BPF_END | BPF_FROM_LE:
  1351. case BPF_ALU64 | BPF_END | BPF_FROM_LE:
  1352. switch (imm) {
  1353. case 16: /* dst = (u16) cpu_to_le16(dst) */
  1354. /* lrvr %dst,%dst */
  1355. EMIT4(0xb91f0000, dst_reg, dst_reg);
  1356. /* srl %dst,16(%r0) */
  1357. EMIT4_DISP(0x88000000, dst_reg, REG_0, 16);
  1358. /* llghr %dst,%dst */
  1359. EMIT4(0xb9850000, dst_reg, dst_reg);
  1360. if (insn_is_zext(&insn[1]))
  1361. insn_count = 2;
  1362. break;
  1363. case 32: /* dst = (u32) cpu_to_le32(dst) */
  1364. /* lrvr %dst,%dst */
  1365. EMIT4(0xb91f0000, dst_reg, dst_reg);
  1366. if (!fp->aux->verifier_zext)
  1367. /* llgfr %dst,%dst */
  1368. EMIT4(0xb9160000, dst_reg, dst_reg);
  1369. break;
  1370. case 64: /* dst = (u64) cpu_to_le64(dst) */
  1371. /* lrvgr %dst,%dst */
  1372. EMIT4(0xb90f0000, dst_reg, dst_reg);
  1373. break;
  1374. }
  1375. break;
  1376. /*
  1377. * BPF_NOSPEC (speculation barrier)
  1378. */
  1379. case BPF_ST | BPF_NOSPEC:
  1380. break;
  1381. /*
  1382. * BPF_ST(X)
  1383. */
  1384. case BPF_STX | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = src_reg */
  1385. case BPF_STX | BPF_PROBE_MEM32 | BPF_B:
  1386. bpf_jit_probe_store_pre(jit, insn, &probe);
  1387. /* stcy %src,off(%dst,%arena) */
  1388. EMIT6_DISP_LH(0xe3000000, 0x0072, src_reg, dst_reg,
  1389. probe.arena_reg, off);
  1390. err = bpf_jit_probe_post(jit, fp, &probe);
  1391. if (err < 0)
  1392. return err;
  1393. jit->seen |= SEEN_MEM;
  1394. break;
  1395. case BPF_STX | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = src */
  1396. case BPF_STX | BPF_PROBE_MEM32 | BPF_H:
  1397. bpf_jit_probe_store_pre(jit, insn, &probe);
  1398. /* sthy %src,off(%dst,%arena) */
  1399. EMIT6_DISP_LH(0xe3000000, 0x0070, src_reg, dst_reg,
  1400. probe.arena_reg, off);
  1401. err = bpf_jit_probe_post(jit, fp, &probe);
  1402. if (err < 0)
  1403. return err;
  1404. jit->seen |= SEEN_MEM;
  1405. break;
  1406. case BPF_STX | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = src */
  1407. case BPF_STX | BPF_PROBE_MEM32 | BPF_W:
  1408. bpf_jit_probe_store_pre(jit, insn, &probe);
  1409. /* sty %src,off(%dst,%arena) */
  1410. EMIT6_DISP_LH(0xe3000000, 0x0050, src_reg, dst_reg,
  1411. probe.arena_reg, off);
  1412. err = bpf_jit_probe_post(jit, fp, &probe);
  1413. if (err < 0)
  1414. return err;
  1415. jit->seen |= SEEN_MEM;
  1416. break;
  1417. case BPF_STX | BPF_MEM | BPF_DW: /* (u64 *)(dst + off) = src */
  1418. case BPF_STX | BPF_PROBE_MEM32 | BPF_DW:
  1419. bpf_jit_probe_store_pre(jit, insn, &probe);
  1420. /* stg %src,off(%dst,%arena) */
  1421. EMIT6_DISP_LH(0xe3000000, 0x0024, src_reg, dst_reg,
  1422. probe.arena_reg, off);
  1423. err = bpf_jit_probe_post(jit, fp, &probe);
  1424. if (err < 0)
  1425. return err;
  1426. jit->seen |= SEEN_MEM;
  1427. break;
  1428. case BPF_ST | BPF_MEM | BPF_B: /* *(u8 *)(dst + off) = imm */
  1429. case BPF_ST | BPF_PROBE_MEM32 | BPF_B:
  1430. /* lhi %w0,imm */
  1431. EMIT4_IMM(0xa7080000, REG_W0, (u8) imm);
  1432. bpf_jit_probe_store_pre(jit, insn, &probe);
  1433. /* stcy %w0,off(%dst,%arena) */
  1434. EMIT6_DISP_LH(0xe3000000, 0x0072, REG_W0, dst_reg,
  1435. probe.arena_reg, off);
  1436. err = bpf_jit_probe_post(jit, fp, &probe);
  1437. if (err < 0)
  1438. return err;
  1439. jit->seen |= SEEN_MEM;
  1440. break;
  1441. case BPF_ST | BPF_MEM | BPF_H: /* (u16 *)(dst + off) = imm */
  1442. case BPF_ST | BPF_PROBE_MEM32 | BPF_H:
  1443. /* lhi %w0,imm */
  1444. EMIT4_IMM(0xa7080000, REG_W0, (u16) imm);
  1445. bpf_jit_probe_store_pre(jit, insn, &probe);
  1446. /* sthy %w0,off(%dst,%arena) */
  1447. EMIT6_DISP_LH(0xe3000000, 0x0070, REG_W0, dst_reg,
  1448. probe.arena_reg, off);
  1449. err = bpf_jit_probe_post(jit, fp, &probe);
  1450. if (err < 0)
  1451. return err;
  1452. jit->seen |= SEEN_MEM;
  1453. break;
  1454. case BPF_ST | BPF_MEM | BPF_W: /* *(u32 *)(dst + off) = imm */
  1455. case BPF_ST | BPF_PROBE_MEM32 | BPF_W:
  1456. /* llilf %w0,imm */
  1457. EMIT6_IMM(0xc00f0000, REG_W0, (u32) imm);
  1458. bpf_jit_probe_store_pre(jit, insn, &probe);
  1459. /* sty %w0,off(%dst,%arena) */
  1460. EMIT6_DISP_LH(0xe3000000, 0x0050, REG_W0, dst_reg,
  1461. probe.arena_reg, off);
  1462. err = bpf_jit_probe_post(jit, fp, &probe);
  1463. if (err < 0)
  1464. return err;
  1465. jit->seen |= SEEN_MEM;
  1466. break;
  1467. case BPF_ST | BPF_MEM | BPF_DW: /* *(u64 *)(dst + off) = imm */
  1468. case BPF_ST | BPF_PROBE_MEM32 | BPF_DW:
  1469. /* lgfi %w0,imm */
  1470. EMIT6_IMM(0xc0010000, REG_W0, imm);
  1471. bpf_jit_probe_store_pre(jit, insn, &probe);
  1472. /* stg %w0,off(%dst,%arena) */
  1473. EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W0, dst_reg,
  1474. probe.arena_reg, off);
  1475. err = bpf_jit_probe_post(jit, fp, &probe);
  1476. if (err < 0)
  1477. return err;
  1478. jit->seen |= SEEN_MEM;
  1479. break;
  1480. /*
  1481. * BPF_ATOMIC
  1482. */
  1483. case BPF_STX | BPF_ATOMIC | BPF_DW:
  1484. case BPF_STX | BPF_ATOMIC | BPF_W:
  1485. case BPF_STX | BPF_PROBE_ATOMIC | BPF_DW:
  1486. case BPF_STX | BPF_PROBE_ATOMIC | BPF_W:
  1487. {
  1488. bool is32 = BPF_SIZE(insn->code) == BPF_W;
  1489. /*
  1490. * Unlike loads and stores, atomics have only a base register,
  1491. * but no index register. For the non-arena case, simply use
  1492. * %dst as a base. For the arena case, use the work register
  1493. * %r1: first, load the arena base into it, and then add %dst
  1494. * to it.
  1495. */
  1496. probe.arena_reg = dst_reg;
  1497. switch (insn->imm) {
  1498. #define EMIT_ATOMIC(op32, op64) do { \
  1499. bpf_jit_probe_atomic_pre(jit, insn, &probe); \
  1500. /* {op32|op64} {%w0|%src},%src,off(%arena) */ \
  1501. EMIT6_DISP_LH(0xeb000000, is32 ? (op32) : (op64), \
  1502. (insn->imm & BPF_FETCH) ? src_reg : REG_W0, \
  1503. src_reg, probe.arena_reg, off); \
  1504. err = bpf_jit_probe_post(jit, fp, &probe); \
  1505. if (err < 0) \
  1506. return err; \
  1507. if (insn->imm & BPF_FETCH) { \
  1508. /* bcr 14,0 - see atomic_fetch_{add,and,or,xor}() */ \
  1509. _EMIT2(0x07e0); \
  1510. if (is32) \
  1511. EMIT_ZERO(src_reg); \
  1512. } \
  1513. } while (0)
  1514. case BPF_ADD:
  1515. case BPF_ADD | BPF_FETCH:
  1516. /* {laal|laalg} */
  1517. EMIT_ATOMIC(0x00fa, 0x00ea);
  1518. break;
  1519. case BPF_AND:
  1520. case BPF_AND | BPF_FETCH:
  1521. /* {lan|lang} */
  1522. EMIT_ATOMIC(0x00f4, 0x00e4);
  1523. break;
  1524. case BPF_OR:
  1525. case BPF_OR | BPF_FETCH:
  1526. /* {lao|laog} */
  1527. EMIT_ATOMIC(0x00f6, 0x00e6);
  1528. break;
  1529. case BPF_XOR:
  1530. case BPF_XOR | BPF_FETCH:
  1531. /* {lax|laxg} */
  1532. EMIT_ATOMIC(0x00f7, 0x00e7);
  1533. break;
  1534. #undef EMIT_ATOMIC
  1535. case BPF_XCHG: {
  1536. struct bpf_jit_probe load_probe = probe;
  1537. int loop_start;
  1538. bpf_jit_probe_atomic_pre(jit, insn, &load_probe);
  1539. /* {ly|lg} %w0,off(%arena) */
  1540. EMIT6_DISP_LH(0xe3000000,
  1541. is32 ? 0x0058 : 0x0004, REG_W0, REG_0,
  1542. load_probe.arena_reg, off);
  1543. bpf_jit_probe_emit_nop(jit, &load_probe);
  1544. /* Reuse {ly|lg}'s arena_reg for {csy|csg}. */
  1545. if (load_probe.prg != -1) {
  1546. probe.prg = jit->prg;
  1547. probe.arena_reg = load_probe.arena_reg;
  1548. }
  1549. loop_start = jit->prg;
  1550. /* 0: {csy|csg} %w0,%src,off(%arena) */
  1551. EMIT6_DISP_LH(0xeb000000, is32 ? 0x0014 : 0x0030,
  1552. REG_W0, src_reg, probe.arena_reg, off);
  1553. bpf_jit_probe_emit_nop(jit, &probe);
  1554. /* brc 4,0b */
  1555. EMIT4_PCREL_RIC(0xa7040000, 4, loop_start);
  1556. /* {llgfr|lgr} %src,%w0 */
  1557. EMIT4(is32 ? 0xb9160000 : 0xb9040000, src_reg, REG_W0);
  1558. /* Both probes should land here on exception. */
  1559. err = bpf_jit_probe_post(jit, fp, &load_probe);
  1560. if (err < 0)
  1561. return err;
  1562. err = bpf_jit_probe_post(jit, fp, &probe);
  1563. if (err < 0)
  1564. return err;
  1565. if (is32 && insn_is_zext(&insn[1]))
  1566. insn_count = 2;
  1567. break;
  1568. }
  1569. case BPF_CMPXCHG:
  1570. bpf_jit_probe_atomic_pre(jit, insn, &probe);
  1571. /* 0: {csy|csg} %b0,%src,off(%arena) */
  1572. EMIT6_DISP_LH(0xeb000000, is32 ? 0x0014 : 0x0030,
  1573. BPF_REG_0, src_reg,
  1574. probe.arena_reg, off);
  1575. err = bpf_jit_probe_post(jit, fp, &probe);
  1576. if (err < 0)
  1577. return err;
  1578. break;
  1579. default:
  1580. pr_err("Unknown atomic operation %02x\n", insn->imm);
  1581. return -1;
  1582. }
  1583. jit->seen |= SEEN_MEM;
  1584. break;
  1585. }
  1586. /*
  1587. * BPF_LDX
  1588. */
  1589. case BPF_LDX | BPF_MEM | BPF_B: /* dst = *(u8 *)(ul) (src + off) */
  1590. case BPF_LDX | BPF_PROBE_MEM | BPF_B:
  1591. case BPF_LDX | BPF_PROBE_MEM32 | BPF_B:
  1592. bpf_jit_probe_load_pre(jit, insn, &probe);
  1593. /* llgc %dst,off(%src,%arena) */
  1594. EMIT6_DISP_LH(0xe3000000, 0x0090, dst_reg, src_reg,
  1595. probe.arena_reg, off);
  1596. err = bpf_jit_probe_post(jit, fp, &probe);
  1597. if (err < 0)
  1598. return err;
  1599. jit->seen |= SEEN_MEM;
  1600. if (insn_is_zext(&insn[1]))
  1601. insn_count = 2;
  1602. break;
  1603. case BPF_LDX | BPF_MEMSX | BPF_B: /* dst = *(s8 *)(ul) (src + off) */
  1604. case BPF_LDX | BPF_PROBE_MEMSX | BPF_B:
  1605. bpf_jit_probe_load_pre(jit, insn, &probe);
  1606. /* lgb %dst,off(%src) */
  1607. EMIT6_DISP_LH(0xe3000000, 0x0077, dst_reg, src_reg, REG_0, off);
  1608. err = bpf_jit_probe_post(jit, fp, &probe);
  1609. if (err < 0)
  1610. return err;
  1611. jit->seen |= SEEN_MEM;
  1612. break;
  1613. case BPF_LDX | BPF_MEM | BPF_H: /* dst = *(u16 *)(ul) (src + off) */
  1614. case BPF_LDX | BPF_PROBE_MEM | BPF_H:
  1615. case BPF_LDX | BPF_PROBE_MEM32 | BPF_H:
  1616. bpf_jit_probe_load_pre(jit, insn, &probe);
  1617. /* llgh %dst,off(%src,%arena) */
  1618. EMIT6_DISP_LH(0xe3000000, 0x0091, dst_reg, src_reg,
  1619. probe.arena_reg, off);
  1620. err = bpf_jit_probe_post(jit, fp, &probe);
  1621. if (err < 0)
  1622. return err;
  1623. jit->seen |= SEEN_MEM;
  1624. if (insn_is_zext(&insn[1]))
  1625. insn_count = 2;
  1626. break;
  1627. case BPF_LDX | BPF_MEMSX | BPF_H: /* dst = *(s16 *)(ul) (src + off) */
  1628. case BPF_LDX | BPF_PROBE_MEMSX | BPF_H:
  1629. bpf_jit_probe_load_pre(jit, insn, &probe);
  1630. /* lgh %dst,off(%src) */
  1631. EMIT6_DISP_LH(0xe3000000, 0x0015, dst_reg, src_reg, REG_0, off);
  1632. err = bpf_jit_probe_post(jit, fp, &probe);
  1633. if (err < 0)
  1634. return err;
  1635. jit->seen |= SEEN_MEM;
  1636. break;
  1637. case BPF_LDX | BPF_MEM | BPF_W: /* dst = *(u32 *)(ul) (src + off) */
  1638. case BPF_LDX | BPF_PROBE_MEM | BPF_W:
  1639. case BPF_LDX | BPF_PROBE_MEM32 | BPF_W:
  1640. bpf_jit_probe_load_pre(jit, insn, &probe);
  1641. /* llgf %dst,off(%src) */
  1642. jit->seen |= SEEN_MEM;
  1643. EMIT6_DISP_LH(0xe3000000, 0x0016, dst_reg, src_reg,
  1644. probe.arena_reg, off);
  1645. err = bpf_jit_probe_post(jit, fp, &probe);
  1646. if (err < 0)
  1647. return err;
  1648. if (insn_is_zext(&insn[1]))
  1649. insn_count = 2;
  1650. break;
  1651. case BPF_LDX | BPF_MEMSX | BPF_W: /* dst = *(s32 *)(ul) (src + off) */
  1652. case BPF_LDX | BPF_PROBE_MEMSX | BPF_W:
  1653. bpf_jit_probe_load_pre(jit, insn, &probe);
  1654. /* lgf %dst,off(%src) */
  1655. jit->seen |= SEEN_MEM;
  1656. EMIT6_DISP_LH(0xe3000000, 0x0014, dst_reg, src_reg, REG_0, off);
  1657. err = bpf_jit_probe_post(jit, fp, &probe);
  1658. if (err < 0)
  1659. return err;
  1660. break;
  1661. case BPF_LDX | BPF_MEM | BPF_DW: /* dst = *(u64 *)(ul) (src + off) */
  1662. case BPF_LDX | BPF_PROBE_MEM | BPF_DW:
  1663. case BPF_LDX | BPF_PROBE_MEM32 | BPF_DW:
  1664. bpf_jit_probe_load_pre(jit, insn, &probe);
  1665. /* lg %dst,off(%src,%arena) */
  1666. jit->seen |= SEEN_MEM;
  1667. EMIT6_DISP_LH(0xe3000000, 0x0004, dst_reg, src_reg,
  1668. probe.arena_reg, off);
  1669. err = bpf_jit_probe_post(jit, fp, &probe);
  1670. if (err < 0)
  1671. return err;
  1672. break;
  1673. /*
  1674. * BPF_JMP / CALL
  1675. */
  1676. case BPF_JMP | BPF_CALL:
  1677. {
  1678. const struct btf_func_model *m;
  1679. bool func_addr_fixed;
  1680. int j, ret;
  1681. u64 func;
  1682. ret = bpf_jit_get_func_addr(fp, insn, extra_pass,
  1683. &func, &func_addr_fixed);
  1684. if (ret < 0)
  1685. return -1;
  1686. REG_SET_SEEN(BPF_REG_5);
  1687. jit->seen |= SEEN_FUNC;
  1688. /*
  1689. * Copy the tail call counter to where the callee expects it.
  1690. */
  1691. /* mvc tail_call_cnt(4,%r15),frame_off+tail_call_cnt(%r15) */
  1692. _EMIT6(0xd203f000 | offsetof(struct prog_frame, tail_call_cnt),
  1693. 0xf000 | (jit->frame_off +
  1694. offsetof(struct prog_frame, tail_call_cnt)));
  1695. /* Sign-extend the kfunc arguments. */
  1696. if (insn->src_reg == BPF_PSEUDO_KFUNC_CALL) {
  1697. m = bpf_jit_find_kfunc_model(fp, insn);
  1698. if (!m)
  1699. return -1;
  1700. for (j = 0; j < m->nr_args; j++) {
  1701. if (sign_extend(jit, BPF_REG_1 + j,
  1702. m->arg_size[j],
  1703. m->arg_flags[j]))
  1704. return -1;
  1705. }
  1706. }
  1707. /* lgrl %w1,func */
  1708. EMIT6_PCREL_RILB(0xc4080000, REG_W1, _EMIT_CONST_U64(func));
  1709. /* %r1() */
  1710. call_r1(jit);
  1711. /* lgr %b0,%r2: load return value into %b0 */
  1712. EMIT4(0xb9040000, BPF_REG_0, REG_2);
  1713. /*
  1714. * Copy the potentially updated tail call counter back.
  1715. */
  1716. if (insn->src_reg == BPF_PSEUDO_CALL)
  1717. /*
  1718. * mvc frame_off+tail_call_cnt(%r15),
  1719. * tail_call_cnt(4,%r15)
  1720. */
  1721. _EMIT6(0xd203f000 | (jit->frame_off +
  1722. offsetof(struct prog_frame,
  1723. tail_call_cnt)),
  1724. 0xf000 | offsetof(struct prog_frame,
  1725. tail_call_cnt));
  1726. break;
  1727. }
  1728. case BPF_JMP | BPF_TAIL_CALL: {
  1729. int patch_1_clrj, patch_2_clij, patch_3_brc;
  1730. /*
  1731. * Implicit input:
  1732. * B1: pointer to ctx
  1733. * B2: pointer to bpf_array
  1734. * B3: index in bpf_array
  1735. *
  1736. * if (index >= array->map.max_entries)
  1737. * goto out;
  1738. */
  1739. /* llgf %w1,map.max_entries(%b2) */
  1740. EMIT6_DISP_LH(0xe3000000, 0x0016, REG_W1, REG_0, BPF_REG_2,
  1741. offsetof(struct bpf_array, map.max_entries));
  1742. /* if ((u32)%b3 >= (u32)%w1) goto out; */
  1743. /* clrj %b3,%w1,0xa,out */
  1744. patch_1_clrj = jit->prg;
  1745. EMIT6_PCREL_RIEB(0xec000000, 0x0077, BPF_REG_3, REG_W1, 0xa,
  1746. jit->prg);
  1747. /*
  1748. * if (tail_call_cnt++ >= MAX_TAIL_CALL_CNT)
  1749. * goto out;
  1750. */
  1751. off = jit->frame_off +
  1752. offsetof(struct prog_frame, tail_call_cnt);
  1753. /* lhi %w0,1 */
  1754. EMIT4_IMM(0xa7080000, REG_W0, 1);
  1755. /* laal %w1,%w0,off(%r15) */
  1756. EMIT6_DISP_LH(0xeb000000, 0x00fa, REG_W1, REG_W0, REG_15, off);
  1757. /* clij %w1,MAX_TAIL_CALL_CNT-1,0x2,out */
  1758. patch_2_clij = jit->prg;
  1759. EMIT6_PCREL_RIEC(0xec000000, 0x007f, REG_W1, MAX_TAIL_CALL_CNT - 1,
  1760. 2, jit->prg);
  1761. /*
  1762. * prog = array->ptrs[index];
  1763. * if (prog == NULL)
  1764. * goto out;
  1765. */
  1766. /* llgfr %r1,%b3: %r1 = (u32) index */
  1767. EMIT4(0xb9160000, REG_1, BPF_REG_3);
  1768. /* sllg %r1,%r1,3: %r1 *= 8 */
  1769. EMIT6_DISP_LH(0xeb000000, 0x000d, REG_1, REG_1, REG_0, 3);
  1770. /* ltg %r1,prog(%b2,%r1) */
  1771. EMIT6_DISP_LH(0xe3000000, 0x0002, REG_1, BPF_REG_2,
  1772. REG_1, offsetof(struct bpf_array, ptrs));
  1773. /* brc 0x8,out */
  1774. patch_3_brc = jit->prg;
  1775. EMIT4_PCREL_RIC(0xa7040000, 8, jit->prg);
  1776. /*
  1777. * Restore registers before calling function
  1778. */
  1779. save_restore_regs(jit, REGS_RESTORE, 0);
  1780. /*
  1781. * goto *(prog->bpf_func + tail_call_start);
  1782. */
  1783. /* lg %r1,bpf_func(%r1) */
  1784. EMIT6_DISP_LH(0xe3000000, 0x0004, REG_1, REG_1, REG_0,
  1785. offsetof(struct bpf_prog, bpf_func));
  1786. if (nospec_uses_trampoline()) {
  1787. jit->seen |= SEEN_FUNC;
  1788. /* aghi %r1,tail_call_start */
  1789. EMIT4_IMM(0xa70b0000, REG_1, jit->tail_call_start);
  1790. /* brcl 0xf,__s390_indirect_jump_r1 */
  1791. EMIT6_PCREL_RILC(0xc0040000, 0xf, jit->r1_thunk_ip);
  1792. } else {
  1793. /* bc 0xf,tail_call_start(%r1) */
  1794. _EMIT4(0x47f01000 + jit->tail_call_start);
  1795. }
  1796. /* out: */
  1797. if (jit->prg_buf) {
  1798. *(u16 *)(jit->prg_buf + patch_1_clrj + 2) =
  1799. (jit->prg - patch_1_clrj) >> 1;
  1800. *(u16 *)(jit->prg_buf + patch_2_clij + 2) =
  1801. (jit->prg - patch_2_clij) >> 1;
  1802. *(u16 *)(jit->prg_buf + patch_3_brc + 2) =
  1803. (jit->prg - patch_3_brc) >> 1;
  1804. }
  1805. break;
  1806. }
  1807. case BPF_JMP | BPF_EXIT: /* return b0 */
  1808. last = (i == fp->len - 1) ? 1 : 0;
  1809. if (last)
  1810. break;
  1811. if (!is_first_pass(jit) && can_use_rel(jit, jit->exit_ip))
  1812. /* brc 0xf, <exit> */
  1813. EMIT4_PCREL_RIC(0xa7040000, 0xf, jit->exit_ip);
  1814. else
  1815. /* brcl 0xf, <exit> */
  1816. EMIT6_PCREL_RILC(0xc0040000, 0xf, jit->exit_ip);
  1817. break;
  1818. /*
  1819. * Branch relative (number of skipped instructions) to offset on
  1820. * condition.
  1821. *
  1822. * Condition code to mask mapping:
  1823. *
  1824. * CC | Description | Mask
  1825. * ------------------------------
  1826. * 0 | Operands equal | 8
  1827. * 1 | First operand low | 4
  1828. * 2 | First operand high | 2
  1829. * 3 | Unused | 1
  1830. *
  1831. * For s390x relative branches: ip = ip + off_bytes
  1832. * For BPF relative branches: insn = insn + off_insns + 1
  1833. *
  1834. * For example for s390x with offset 0 we jump to the branch
  1835. * instruction itself (loop) and for BPF with offset 0 we
  1836. * branch to the instruction behind the branch.
  1837. */
  1838. case BPF_JMP32 | BPF_JA: /* if (true) */
  1839. branch_oc_off = imm;
  1840. fallthrough;
  1841. case BPF_JMP | BPF_JA: /* if (true) */
  1842. mask = 0xf000; /* j */
  1843. goto branch_oc;
  1844. case BPF_JMP | BPF_JSGT | BPF_K: /* ((s64) dst > (s64) imm) */
  1845. case BPF_JMP32 | BPF_JSGT | BPF_K: /* ((s32) dst > (s32) imm) */
  1846. mask = 0x2000; /* jh */
  1847. goto branch_ks;
  1848. case BPF_JMP | BPF_JSLT | BPF_K: /* ((s64) dst < (s64) imm) */
  1849. case BPF_JMP32 | BPF_JSLT | BPF_K: /* ((s32) dst < (s32) imm) */
  1850. mask = 0x4000; /* jl */
  1851. goto branch_ks;
  1852. case BPF_JMP | BPF_JSGE | BPF_K: /* ((s64) dst >= (s64) imm) */
  1853. case BPF_JMP32 | BPF_JSGE | BPF_K: /* ((s32) dst >= (s32) imm) */
  1854. mask = 0xa000; /* jhe */
  1855. goto branch_ks;
  1856. case BPF_JMP | BPF_JSLE | BPF_K: /* ((s64) dst <= (s64) imm) */
  1857. case BPF_JMP32 | BPF_JSLE | BPF_K: /* ((s32) dst <= (s32) imm) */
  1858. mask = 0xc000; /* jle */
  1859. goto branch_ks;
  1860. case BPF_JMP | BPF_JGT | BPF_K: /* (dst_reg > imm) */
  1861. case BPF_JMP32 | BPF_JGT | BPF_K: /* ((u32) dst_reg > (u32) imm) */
  1862. mask = 0x2000; /* jh */
  1863. goto branch_ku;
  1864. case BPF_JMP | BPF_JLT | BPF_K: /* (dst_reg < imm) */
  1865. case BPF_JMP32 | BPF_JLT | BPF_K: /* ((u32) dst_reg < (u32) imm) */
  1866. mask = 0x4000; /* jl */
  1867. goto branch_ku;
  1868. case BPF_JMP | BPF_JGE | BPF_K: /* (dst_reg >= imm) */
  1869. case BPF_JMP32 | BPF_JGE | BPF_K: /* ((u32) dst_reg >= (u32) imm) */
  1870. mask = 0xa000; /* jhe */
  1871. goto branch_ku;
  1872. case BPF_JMP | BPF_JLE | BPF_K: /* (dst_reg <= imm) */
  1873. case BPF_JMP32 | BPF_JLE | BPF_K: /* ((u32) dst_reg <= (u32) imm) */
  1874. mask = 0xc000; /* jle */
  1875. goto branch_ku;
  1876. case BPF_JMP | BPF_JNE | BPF_K: /* (dst_reg != imm) */
  1877. case BPF_JMP32 | BPF_JNE | BPF_K: /* ((u32) dst_reg != (u32) imm) */
  1878. mask = 0x7000; /* jne */
  1879. goto branch_ku;
  1880. case BPF_JMP | BPF_JEQ | BPF_K: /* (dst_reg == imm) */
  1881. case BPF_JMP32 | BPF_JEQ | BPF_K: /* ((u32) dst_reg == (u32) imm) */
  1882. mask = 0x8000; /* je */
  1883. goto branch_ku;
  1884. case BPF_JMP | BPF_JSET | BPF_K: /* (dst_reg & imm) */
  1885. case BPF_JMP32 | BPF_JSET | BPF_K: /* ((u32) dst_reg & (u32) imm) */
  1886. mask = 0x7000; /* jnz */
  1887. if (BPF_CLASS(insn->code) == BPF_JMP32) {
  1888. /* llilf %w1,imm (load zero extend imm) */
  1889. EMIT6_IMM(0xc00f0000, REG_W1, imm);
  1890. /* nr %w1,%dst */
  1891. EMIT2(0x1400, REG_W1, dst_reg);
  1892. } else {
  1893. /* lgfi %w1,imm (load sign extend imm) */
  1894. EMIT6_IMM(0xc0010000, REG_W1, imm);
  1895. /* ngr %w1,%dst */
  1896. EMIT4(0xb9800000, REG_W1, dst_reg);
  1897. }
  1898. goto branch_oc;
  1899. case BPF_JMP | BPF_JSGT | BPF_X: /* ((s64) dst > (s64) src) */
  1900. case BPF_JMP32 | BPF_JSGT | BPF_X: /* ((s32) dst > (s32) src) */
  1901. mask = 0x2000; /* jh */
  1902. goto branch_xs;
  1903. case BPF_JMP | BPF_JSLT | BPF_X: /* ((s64) dst < (s64) src) */
  1904. case BPF_JMP32 | BPF_JSLT | BPF_X: /* ((s32) dst < (s32) src) */
  1905. mask = 0x4000; /* jl */
  1906. goto branch_xs;
  1907. case BPF_JMP | BPF_JSGE | BPF_X: /* ((s64) dst >= (s64) src) */
  1908. case BPF_JMP32 | BPF_JSGE | BPF_X: /* ((s32) dst >= (s32) src) */
  1909. mask = 0xa000; /* jhe */
  1910. goto branch_xs;
  1911. case BPF_JMP | BPF_JSLE | BPF_X: /* ((s64) dst <= (s64) src) */
  1912. case BPF_JMP32 | BPF_JSLE | BPF_X: /* ((s32) dst <= (s32) src) */
  1913. mask = 0xc000; /* jle */
  1914. goto branch_xs;
  1915. case BPF_JMP | BPF_JGT | BPF_X: /* (dst > src) */
  1916. case BPF_JMP32 | BPF_JGT | BPF_X: /* ((u32) dst > (u32) src) */
  1917. mask = 0x2000; /* jh */
  1918. goto branch_xu;
  1919. case BPF_JMP | BPF_JLT | BPF_X: /* (dst < src) */
  1920. case BPF_JMP32 | BPF_JLT | BPF_X: /* ((u32) dst < (u32) src) */
  1921. mask = 0x4000; /* jl */
  1922. goto branch_xu;
  1923. case BPF_JMP | BPF_JGE | BPF_X: /* (dst >= src) */
  1924. case BPF_JMP32 | BPF_JGE | BPF_X: /* ((u32) dst >= (u32) src) */
  1925. mask = 0xa000; /* jhe */
  1926. goto branch_xu;
  1927. case BPF_JMP | BPF_JLE | BPF_X: /* (dst <= src) */
  1928. case BPF_JMP32 | BPF_JLE | BPF_X: /* ((u32) dst <= (u32) src) */
  1929. mask = 0xc000; /* jle */
  1930. goto branch_xu;
  1931. case BPF_JMP | BPF_JNE | BPF_X: /* (dst != src) */
  1932. case BPF_JMP32 | BPF_JNE | BPF_X: /* ((u32) dst != (u32) src) */
  1933. mask = 0x7000; /* jne */
  1934. goto branch_xu;
  1935. case BPF_JMP | BPF_JEQ | BPF_X: /* (dst == src) */
  1936. case BPF_JMP32 | BPF_JEQ | BPF_X: /* ((u32) dst == (u32) src) */
  1937. mask = 0x8000; /* je */
  1938. goto branch_xu;
  1939. case BPF_JMP | BPF_JSET | BPF_X: /* (dst & src) */
  1940. case BPF_JMP32 | BPF_JSET | BPF_X: /* ((u32) dst & (u32) src) */
  1941. {
  1942. bool is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
  1943. mask = 0x7000; /* jnz */
  1944. /* nrk or ngrk %w1,%dst,%src */
  1945. EMIT4_RRF((is_jmp32 ? 0xb9f40000 : 0xb9e40000),
  1946. REG_W1, dst_reg, src_reg);
  1947. goto branch_oc;
  1948. branch_ks:
  1949. is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
  1950. /* cfi or cgfi %dst,imm */
  1951. EMIT6_IMM(is_jmp32 ? 0xc20d0000 : 0xc20c0000,
  1952. dst_reg, imm);
  1953. if (!is_first_pass(jit) &&
  1954. can_use_rel(jit, addrs[i + off + 1])) {
  1955. /* brc mask,off */
  1956. EMIT4_PCREL_RIC(0xa7040000,
  1957. mask >> 12, addrs[i + off + 1]);
  1958. } else {
  1959. /* brcl mask,off */
  1960. EMIT6_PCREL_RILC(0xc0040000,
  1961. mask >> 12, addrs[i + off + 1]);
  1962. }
  1963. break;
  1964. branch_ku:
  1965. /* lgfi %w1,imm (load sign extend imm) */
  1966. src_reg = REG_1;
  1967. EMIT6_IMM(0xc0010000, src_reg, imm);
  1968. goto branch_xu;
  1969. branch_xs:
  1970. is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
  1971. if (!is_first_pass(jit) &&
  1972. can_use_rel(jit, addrs[i + off + 1])) {
  1973. /* crj or cgrj %dst,%src,mask,off */
  1974. EMIT6_PCREL(0xec000000, (is_jmp32 ? 0x0076 : 0x0064),
  1975. dst_reg, src_reg, i, off, mask);
  1976. } else {
  1977. /* cr or cgr %dst,%src */
  1978. if (is_jmp32)
  1979. EMIT2(0x1900, dst_reg, src_reg);
  1980. else
  1981. EMIT4(0xb9200000, dst_reg, src_reg);
  1982. /* brcl mask,off */
  1983. EMIT6_PCREL_RILC(0xc0040000,
  1984. mask >> 12, addrs[i + off + 1]);
  1985. }
  1986. break;
  1987. branch_xu:
  1988. is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
  1989. if (!is_first_pass(jit) &&
  1990. can_use_rel(jit, addrs[i + off + 1])) {
  1991. /* clrj or clgrj %dst,%src,mask,off */
  1992. EMIT6_PCREL(0xec000000, (is_jmp32 ? 0x0077 : 0x0065),
  1993. dst_reg, src_reg, i, off, mask);
  1994. } else {
  1995. /* clr or clgr %dst,%src */
  1996. if (is_jmp32)
  1997. EMIT2(0x1500, dst_reg, src_reg);
  1998. else
  1999. EMIT4(0xb9210000, dst_reg, src_reg);
  2000. /* brcl mask,off */
  2001. EMIT6_PCREL_RILC(0xc0040000,
  2002. mask >> 12, addrs[i + off + 1]);
  2003. }
  2004. break;
  2005. branch_oc:
  2006. if (!is_first_pass(jit) &&
  2007. can_use_rel(jit, addrs[i + branch_oc_off + 1])) {
  2008. /* brc mask,off */
  2009. EMIT4_PCREL_RIC(0xa7040000,
  2010. mask >> 12,
  2011. addrs[i + branch_oc_off + 1]);
  2012. } else {
  2013. /* brcl mask,off */
  2014. EMIT6_PCREL_RILC(0xc0040000,
  2015. mask >> 12,
  2016. addrs[i + branch_oc_off + 1]);
  2017. }
  2018. break;
  2019. }
  2020. default: /* too complex, give up */
  2021. pr_err("Unknown opcode %02x\n", insn->code);
  2022. return -1;
  2023. }
  2024. return insn_count;
  2025. }
  2026. /*
  2027. * Return whether new i-th instruction address does not violate any invariant
  2028. */
  2029. static bool bpf_is_new_addr_sane(struct bpf_jit *jit, int i)
  2030. {
  2031. /* On the first pass anything goes */
  2032. if (is_first_pass(jit))
  2033. return true;
  2034. /* The codegen pass must not change anything */
  2035. if (is_codegen_pass(jit))
  2036. return jit->addrs[i] == jit->prg;
  2037. /* Passes in between must not increase code size */
  2038. return jit->addrs[i] >= jit->prg;
  2039. }
  2040. /*
  2041. * Update the address of i-th instruction
  2042. */
  2043. static int bpf_set_addr(struct bpf_jit *jit, int i)
  2044. {
  2045. int delta;
  2046. if (is_codegen_pass(jit)) {
  2047. delta = jit->prg - jit->addrs[i];
  2048. if (delta < 0)
  2049. bpf_skip(jit, -delta);
  2050. }
  2051. if (WARN_ON_ONCE(!bpf_is_new_addr_sane(jit, i)))
  2052. return -1;
  2053. jit->addrs[i] = jit->prg;
  2054. return 0;
  2055. }
  2056. /*
  2057. * Compile eBPF program into s390x code
  2058. */
  2059. static int bpf_jit_prog(struct bpf_jit *jit, struct bpf_prog *fp,
  2060. bool extra_pass)
  2061. {
  2062. int i, insn_count, lit32_size, lit64_size;
  2063. u64 kern_arena;
  2064. jit->lit32 = jit->lit32_start;
  2065. jit->lit64 = jit->lit64_start;
  2066. jit->prg = 0;
  2067. jit->excnt = 0;
  2068. if (is_first_pass(jit) || (jit->seen & SEEN_STACK))
  2069. jit->frame_off = sizeof(struct prog_frame) -
  2070. offsetofend(struct prog_frame, unused) +
  2071. round_up(fp->aux->stack_depth, 8);
  2072. else
  2073. jit->frame_off = 0;
  2074. kern_arena = bpf_arena_get_kern_vm_start(fp->aux->arena);
  2075. if (kern_arena)
  2076. jit->kern_arena = _EMIT_CONST_U64(kern_arena);
  2077. jit->user_arena = bpf_arena_get_user_vm_start(fp->aux->arena);
  2078. bpf_jit_prologue(jit, fp);
  2079. if (bpf_set_addr(jit, 0) < 0)
  2080. return -1;
  2081. for (i = 0; i < fp->len; i += insn_count) {
  2082. insn_count = bpf_jit_insn(jit, fp, i, extra_pass);
  2083. if (insn_count < 0)
  2084. return -1;
  2085. /* Next instruction address */
  2086. if (bpf_set_addr(jit, i + insn_count) < 0)
  2087. return -1;
  2088. }
  2089. bpf_jit_epilogue(jit);
  2090. lit32_size = jit->lit32 - jit->lit32_start;
  2091. lit64_size = jit->lit64 - jit->lit64_start;
  2092. jit->lit32_start = jit->prg;
  2093. if (lit32_size)
  2094. jit->lit32_start = ALIGN(jit->lit32_start, 4);
  2095. jit->lit64_start = jit->lit32_start + lit32_size;
  2096. if (lit64_size)
  2097. jit->lit64_start = ALIGN(jit->lit64_start, 8);
  2098. jit->size = jit->lit64_start + lit64_size;
  2099. jit->size_prg = jit->prg;
  2100. if (WARN_ON_ONCE(fp->aux->extable &&
  2101. jit->excnt != fp->aux->num_exentries))
  2102. /* Verifier bug - too many entries. */
  2103. return -1;
  2104. return 0;
  2105. }
  2106. bool bpf_jit_needs_zext(void)
  2107. {
  2108. return true;
  2109. }
  2110. struct s390_jit_data {
  2111. struct bpf_binary_header *header;
  2112. struct bpf_jit ctx;
  2113. int pass;
  2114. };
  2115. static struct bpf_binary_header *bpf_jit_alloc(struct bpf_jit *jit,
  2116. struct bpf_prog *fp)
  2117. {
  2118. struct bpf_binary_header *header;
  2119. struct bpf_insn *insn;
  2120. u32 extable_size;
  2121. u32 code_size;
  2122. int i;
  2123. for (i = 0; i < fp->len; i++) {
  2124. insn = &fp->insnsi[i];
  2125. if (BPF_CLASS(insn->code) == BPF_STX &&
  2126. BPF_MODE(insn->code) == BPF_PROBE_ATOMIC &&
  2127. (BPF_SIZE(insn->code) == BPF_DW ||
  2128. BPF_SIZE(insn->code) == BPF_W) &&
  2129. insn->imm == BPF_XCHG)
  2130. /*
  2131. * bpf_jit_insn() emits a load and a compare-and-swap,
  2132. * both of which need to be probed.
  2133. */
  2134. fp->aux->num_exentries += 1;
  2135. }
  2136. /* We need two entries per insn. */
  2137. fp->aux->num_exentries *= 2;
  2138. code_size = roundup(jit->size,
  2139. __alignof__(struct exception_table_entry));
  2140. extable_size = fp->aux->num_exentries *
  2141. sizeof(struct exception_table_entry);
  2142. header = bpf_jit_binary_alloc(code_size + extable_size, &jit->prg_buf,
  2143. 8, jit_fill_hole);
  2144. if (!header)
  2145. return NULL;
  2146. fp->aux->extable = (struct exception_table_entry *)
  2147. (jit->prg_buf + code_size);
  2148. return header;
  2149. }
  2150. /*
  2151. * Compile eBPF program "fp"
  2152. */
  2153. struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
  2154. {
  2155. struct bpf_prog *tmp, *orig_fp = fp;
  2156. struct bpf_binary_header *header;
  2157. struct s390_jit_data *jit_data;
  2158. bool tmp_blinded = false;
  2159. bool extra_pass = false;
  2160. struct bpf_jit jit;
  2161. int pass;
  2162. if (!fp->jit_requested)
  2163. return orig_fp;
  2164. tmp = bpf_jit_blind_constants(fp);
  2165. /*
  2166. * If blinding was requested and we failed during blinding,
  2167. * we must fall back to the interpreter.
  2168. */
  2169. if (IS_ERR(tmp))
  2170. return orig_fp;
  2171. if (tmp != fp) {
  2172. tmp_blinded = true;
  2173. fp = tmp;
  2174. }
  2175. jit_data = fp->aux->jit_data;
  2176. if (!jit_data) {
  2177. jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
  2178. if (!jit_data) {
  2179. fp = orig_fp;
  2180. goto out;
  2181. }
  2182. fp->aux->jit_data = jit_data;
  2183. }
  2184. if (jit_data->ctx.addrs) {
  2185. jit = jit_data->ctx;
  2186. header = jit_data->header;
  2187. extra_pass = true;
  2188. pass = jit_data->pass + 1;
  2189. goto skip_init_ctx;
  2190. }
  2191. memset(&jit, 0, sizeof(jit));
  2192. jit.addrs = kvcalloc(fp->len + 1, sizeof(*jit.addrs), GFP_KERNEL);
  2193. if (jit.addrs == NULL) {
  2194. fp = orig_fp;
  2195. goto free_addrs;
  2196. }
  2197. /*
  2198. * Three initial passes:
  2199. * - 1/2: Determine clobbered registers
  2200. * - 3: Calculate program size and addrs array
  2201. */
  2202. for (pass = 1; pass <= 3; pass++) {
  2203. if (bpf_jit_prog(&jit, fp, extra_pass)) {
  2204. fp = orig_fp;
  2205. goto free_addrs;
  2206. }
  2207. }
  2208. /*
  2209. * Final pass: Allocate and generate program
  2210. */
  2211. header = bpf_jit_alloc(&jit, fp);
  2212. if (!header) {
  2213. fp = orig_fp;
  2214. goto free_addrs;
  2215. }
  2216. skip_init_ctx:
  2217. if (bpf_jit_prog(&jit, fp, extra_pass)) {
  2218. bpf_jit_binary_free(header);
  2219. fp = orig_fp;
  2220. goto free_addrs;
  2221. }
  2222. if (bpf_jit_enable > 1) {
  2223. bpf_jit_dump(fp->len, jit.size, pass, jit.prg_buf);
  2224. print_fn_code(jit.prg_buf, jit.size_prg);
  2225. }
  2226. if (!fp->is_func || extra_pass) {
  2227. if (bpf_jit_binary_lock_ro(header)) {
  2228. bpf_jit_binary_free(header);
  2229. fp = orig_fp;
  2230. goto free_addrs;
  2231. }
  2232. } else {
  2233. jit_data->header = header;
  2234. jit_data->ctx = jit;
  2235. jit_data->pass = pass;
  2236. }
  2237. fp->bpf_func = (void *) jit.prg_buf;
  2238. fp->jited = 1;
  2239. fp->jited_len = jit.size;
  2240. if (!fp->is_func || extra_pass) {
  2241. bpf_prog_fill_jited_linfo(fp, jit.addrs + 1);
  2242. free_addrs:
  2243. kvfree(jit.addrs);
  2244. kfree(jit_data);
  2245. fp->aux->jit_data = NULL;
  2246. }
  2247. out:
  2248. if (tmp_blinded)
  2249. bpf_jit_prog_release_other(fp, fp == orig_fp ?
  2250. tmp : orig_fp);
  2251. return fp;
  2252. }
  2253. bool bpf_jit_supports_kfunc_call(void)
  2254. {
  2255. return true;
  2256. }
  2257. bool bpf_jit_supports_far_kfunc_call(void)
  2258. {
  2259. return true;
  2260. }
  2261. int bpf_arch_text_poke(void *ip, enum bpf_text_poke_type t,
  2262. void *old_addr, void *new_addr)
  2263. {
  2264. struct bpf_plt expected_plt, current_plt, new_plt, *plt;
  2265. struct {
  2266. u16 opc;
  2267. s32 disp;
  2268. } __packed insn;
  2269. char *ret;
  2270. int err;
  2271. /* Verify the branch to be patched. */
  2272. err = copy_from_kernel_nofault(&insn, ip, sizeof(insn));
  2273. if (err < 0)
  2274. return err;
  2275. if (insn.opc != (0xc004 | (old_addr ? 0xf0 : 0)))
  2276. return -EINVAL;
  2277. if (t == BPF_MOD_JUMP &&
  2278. insn.disp == ((char *)new_addr - (char *)ip) >> 1) {
  2279. /*
  2280. * The branch already points to the destination,
  2281. * there is no PLT.
  2282. */
  2283. } else {
  2284. /* Verify the PLT. */
  2285. plt = ip + (insn.disp << 1);
  2286. err = copy_from_kernel_nofault(&current_plt, plt,
  2287. sizeof(current_plt));
  2288. if (err < 0)
  2289. return err;
  2290. ret = (char *)ip + 6;
  2291. bpf_jit_plt(&expected_plt, ret, old_addr);
  2292. if (memcmp(&current_plt, &expected_plt, sizeof(current_plt)))
  2293. return -EINVAL;
  2294. /* Adjust the call address. */
  2295. bpf_jit_plt(&new_plt, ret, new_addr);
  2296. s390_kernel_write(&plt->target, &new_plt.target,
  2297. sizeof(void *));
  2298. }
  2299. /* Adjust the mask of the branch. */
  2300. insn.opc = 0xc004 | (new_addr ? 0xf0 : 0);
  2301. s390_kernel_write((char *)ip + 1, (char *)&insn.opc + 1, 1);
  2302. /* Make the new code visible to the other CPUs. */
  2303. text_poke_sync_lock();
  2304. return 0;
  2305. }
  2306. struct bpf_tramp_jit {
  2307. struct bpf_jit common;
  2308. int orig_stack_args_off;/* Offset of arguments placed on stack by the
  2309. * func_addr's original caller
  2310. */
  2311. int stack_size; /* Trampoline stack size */
  2312. int backchain_off; /* Offset of backchain */
  2313. int stack_args_off; /* Offset of stack arguments for calling
  2314. * func_addr, has to be at the top
  2315. */
  2316. int reg_args_off; /* Offset of register arguments for calling
  2317. * func_addr
  2318. */
  2319. int ip_off; /* For bpf_get_func_ip(), has to be at
  2320. * (ctx - 16)
  2321. */
  2322. int arg_cnt_off; /* For bpf_get_func_arg_cnt(), has to be at
  2323. * (ctx - 8)
  2324. */
  2325. int bpf_args_off; /* Offset of BPF_PROG context, which consists
  2326. * of BPF arguments followed by return value
  2327. */
  2328. int retval_off; /* Offset of return value (see above) */
  2329. int r7_r8_off; /* Offset of saved %r7 and %r8, which are used
  2330. * for __bpf_prog_enter() return value and
  2331. * func_addr respectively
  2332. */
  2333. int run_ctx_off; /* Offset of struct bpf_tramp_run_ctx */
  2334. int tccnt_off; /* Offset of saved tailcall counter */
  2335. int r14_off; /* Offset of saved %r14, has to be at the
  2336. * bottom */
  2337. int do_fexit; /* do_fexit: label */
  2338. };
  2339. static void load_imm64(struct bpf_jit *jit, int dst_reg, u64 val)
  2340. {
  2341. /* llihf %dst_reg,val_hi */
  2342. EMIT6_IMM(0xc00e0000, dst_reg, (val >> 32));
  2343. /* oilf %rdst_reg,val_lo */
  2344. EMIT6_IMM(0xc00d0000, dst_reg, val);
  2345. }
  2346. static int invoke_bpf_prog(struct bpf_tramp_jit *tjit,
  2347. const struct btf_func_model *m,
  2348. struct bpf_tramp_link *tlink, bool save_ret)
  2349. {
  2350. struct bpf_jit *jit = &tjit->common;
  2351. int cookie_off = tjit->run_ctx_off +
  2352. offsetof(struct bpf_tramp_run_ctx, bpf_cookie);
  2353. struct bpf_prog *p = tlink->link.prog;
  2354. int patch;
  2355. /*
  2356. * run_ctx.cookie = tlink->cookie;
  2357. */
  2358. /* %r0 = tlink->cookie */
  2359. load_imm64(jit, REG_W0, tlink->cookie);
  2360. /* stg %r0,cookie_off(%r15) */
  2361. EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W0, REG_0, REG_15, cookie_off);
  2362. /*
  2363. * if ((start = __bpf_prog_enter(p, &run_ctx)) == 0)
  2364. * goto skip;
  2365. */
  2366. /* %r1 = __bpf_prog_enter */
  2367. load_imm64(jit, REG_1, (u64)bpf_trampoline_enter(p));
  2368. /* %r2 = p */
  2369. load_imm64(jit, REG_2, (u64)p);
  2370. /* la %r3,run_ctx_off(%r15) */
  2371. EMIT4_DISP(0x41000000, REG_3, REG_15, tjit->run_ctx_off);
  2372. /* %r1() */
  2373. call_r1(jit);
  2374. /* ltgr %r7,%r2 */
  2375. EMIT4(0xb9020000, REG_7, REG_2);
  2376. /* brcl 8,skip */
  2377. patch = jit->prg;
  2378. EMIT6_PCREL_RILC(0xc0040000, 8, 0);
  2379. /*
  2380. * retval = bpf_func(args, p->insnsi);
  2381. */
  2382. /* %r1 = p->bpf_func */
  2383. load_imm64(jit, REG_1, (u64)p->bpf_func);
  2384. /* la %r2,bpf_args_off(%r15) */
  2385. EMIT4_DISP(0x41000000, REG_2, REG_15, tjit->bpf_args_off);
  2386. /* %r3 = p->insnsi */
  2387. if (!p->jited)
  2388. load_imm64(jit, REG_3, (u64)p->insnsi);
  2389. /* %r1() */
  2390. call_r1(jit);
  2391. /* stg %r2,retval_off(%r15) */
  2392. if (save_ret) {
  2393. if (sign_extend(jit, REG_2, m->ret_size, m->ret_flags))
  2394. return -1;
  2395. EMIT6_DISP_LH(0xe3000000, 0x0024, REG_2, REG_0, REG_15,
  2396. tjit->retval_off);
  2397. }
  2398. /* skip: */
  2399. if (jit->prg_buf)
  2400. *(u32 *)&jit->prg_buf[patch + 2] = (jit->prg - patch) >> 1;
  2401. /*
  2402. * __bpf_prog_exit(p, start, &run_ctx);
  2403. */
  2404. /* %r1 = __bpf_prog_exit */
  2405. load_imm64(jit, REG_1, (u64)bpf_trampoline_exit(p));
  2406. /* %r2 = p */
  2407. load_imm64(jit, REG_2, (u64)p);
  2408. /* lgr %r3,%r7 */
  2409. EMIT4(0xb9040000, REG_3, REG_7);
  2410. /* la %r4,run_ctx_off(%r15) */
  2411. EMIT4_DISP(0x41000000, REG_4, REG_15, tjit->run_ctx_off);
  2412. /* %r1() */
  2413. call_r1(jit);
  2414. return 0;
  2415. }
  2416. static int alloc_stack(struct bpf_tramp_jit *tjit, size_t size)
  2417. {
  2418. int stack_offset = tjit->stack_size;
  2419. tjit->stack_size += size;
  2420. return stack_offset;
  2421. }
  2422. /* ABI uses %r2 - %r6 for parameter passing. */
  2423. #define MAX_NR_REG_ARGS 5
  2424. /* The "L" field of the "mvc" instruction is 8 bits. */
  2425. #define MAX_MVC_SIZE 256
  2426. #define MAX_NR_STACK_ARGS (MAX_MVC_SIZE / sizeof(u64))
  2427. /* -mfentry generates a 6-byte nop on s390x. */
  2428. #define S390X_PATCH_SIZE 6
  2429. static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im,
  2430. struct bpf_tramp_jit *tjit,
  2431. const struct btf_func_model *m,
  2432. u32 flags,
  2433. struct bpf_tramp_links *tlinks,
  2434. void *func_addr)
  2435. {
  2436. struct bpf_tramp_links *fmod_ret = &tlinks[BPF_TRAMP_MODIFY_RETURN];
  2437. struct bpf_tramp_links *fentry = &tlinks[BPF_TRAMP_FENTRY];
  2438. struct bpf_tramp_links *fexit = &tlinks[BPF_TRAMP_FEXIT];
  2439. int nr_bpf_args, nr_reg_args, nr_stack_args;
  2440. struct bpf_jit *jit = &tjit->common;
  2441. int arg, bpf_arg_off;
  2442. int i, j;
  2443. /* Support as many stack arguments as "mvc" instruction can handle. */
  2444. nr_reg_args = min_t(int, m->nr_args, MAX_NR_REG_ARGS);
  2445. nr_stack_args = m->nr_args - nr_reg_args;
  2446. if (nr_stack_args > MAX_NR_STACK_ARGS)
  2447. return -ENOTSUPP;
  2448. /* Return to %r14, since func_addr and %r0 are not available. */
  2449. if ((!func_addr && !(flags & BPF_TRAMP_F_ORIG_STACK)) ||
  2450. (flags & BPF_TRAMP_F_INDIRECT))
  2451. flags |= BPF_TRAMP_F_SKIP_FRAME;
  2452. /*
  2453. * Compute how many arguments we need to pass to BPF programs.
  2454. * BPF ABI mirrors that of x86_64: arguments that are 16 bytes or
  2455. * smaller are packed into 1 or 2 registers; larger arguments are
  2456. * passed via pointers.
  2457. * In s390x ABI, arguments that are 8 bytes or smaller are packed into
  2458. * a register; larger arguments are passed via pointers.
  2459. * We need to deal with this difference.
  2460. */
  2461. nr_bpf_args = 0;
  2462. for (i = 0; i < m->nr_args; i++) {
  2463. if (m->arg_size[i] <= 8)
  2464. nr_bpf_args += 1;
  2465. else if (m->arg_size[i] <= 16)
  2466. nr_bpf_args += 2;
  2467. else
  2468. return -ENOTSUPP;
  2469. }
  2470. /*
  2471. * Calculate the stack layout.
  2472. */
  2473. /*
  2474. * Allocate STACK_FRAME_OVERHEAD bytes for the callees. As the s390x
  2475. * ABI requires, put our backchain at the end of the allocated memory.
  2476. */
  2477. tjit->stack_size = STACK_FRAME_OVERHEAD;
  2478. tjit->backchain_off = tjit->stack_size - sizeof(u64);
  2479. tjit->stack_args_off = alloc_stack(tjit, nr_stack_args * sizeof(u64));
  2480. tjit->reg_args_off = alloc_stack(tjit, nr_reg_args * sizeof(u64));
  2481. tjit->ip_off = alloc_stack(tjit, sizeof(u64));
  2482. tjit->arg_cnt_off = alloc_stack(tjit, sizeof(u64));
  2483. tjit->bpf_args_off = alloc_stack(tjit, nr_bpf_args * sizeof(u64));
  2484. tjit->retval_off = alloc_stack(tjit, sizeof(u64));
  2485. tjit->r7_r8_off = alloc_stack(tjit, 2 * sizeof(u64));
  2486. tjit->run_ctx_off = alloc_stack(tjit,
  2487. sizeof(struct bpf_tramp_run_ctx));
  2488. tjit->tccnt_off = alloc_stack(tjit, sizeof(u64));
  2489. tjit->r14_off = alloc_stack(tjit, sizeof(u64) * 2);
  2490. /*
  2491. * In accordance with the s390x ABI, the caller has allocated
  2492. * STACK_FRAME_OVERHEAD bytes for us. 8 of them contain the caller's
  2493. * backchain, and the rest we can use.
  2494. */
  2495. tjit->stack_size -= STACK_FRAME_OVERHEAD - sizeof(u64);
  2496. tjit->orig_stack_args_off = tjit->stack_size + STACK_FRAME_OVERHEAD;
  2497. /* lgr %r1,%r15 */
  2498. EMIT4(0xb9040000, REG_1, REG_15);
  2499. /* aghi %r15,-stack_size */
  2500. EMIT4_IMM(0xa70b0000, REG_15, -tjit->stack_size);
  2501. /* stg %r1,backchain_off(%r15) */
  2502. EMIT6_DISP_LH(0xe3000000, 0x0024, REG_1, REG_0, REG_15,
  2503. tjit->backchain_off);
  2504. /* mvc tccnt_off(4,%r15),stack_size+tail_call_cnt(%r15) */
  2505. _EMIT6(0xd203f000 | tjit->tccnt_off,
  2506. 0xf000 | (tjit->stack_size +
  2507. offsetof(struct prog_frame, tail_call_cnt)));
  2508. /* stmg %r2,%rN,fwd_reg_args_off(%r15) */
  2509. if (nr_reg_args)
  2510. EMIT6_DISP_LH(0xeb000000, 0x0024, REG_2,
  2511. REG_2 + (nr_reg_args - 1), REG_15,
  2512. tjit->reg_args_off);
  2513. for (i = 0, j = 0; i < m->nr_args; i++) {
  2514. if (i < MAX_NR_REG_ARGS)
  2515. arg = REG_2 + i;
  2516. else
  2517. arg = tjit->orig_stack_args_off +
  2518. (i - MAX_NR_REG_ARGS) * sizeof(u64);
  2519. bpf_arg_off = tjit->bpf_args_off + j * sizeof(u64);
  2520. if (m->arg_size[i] <= 8) {
  2521. if (i < MAX_NR_REG_ARGS)
  2522. /* stg %arg,bpf_arg_off(%r15) */
  2523. EMIT6_DISP_LH(0xe3000000, 0x0024, arg,
  2524. REG_0, REG_15, bpf_arg_off);
  2525. else
  2526. /* mvc bpf_arg_off(8,%r15),arg(%r15) */
  2527. _EMIT6(0xd207f000 | bpf_arg_off,
  2528. 0xf000 | arg);
  2529. j += 1;
  2530. } else {
  2531. if (i < MAX_NR_REG_ARGS) {
  2532. /* mvc bpf_arg_off(16,%r15),0(%arg) */
  2533. _EMIT6(0xd20ff000 | bpf_arg_off,
  2534. reg2hex[arg] << 12);
  2535. } else {
  2536. /* lg %r1,arg(%r15) */
  2537. EMIT6_DISP_LH(0xe3000000, 0x0004, REG_1, REG_0,
  2538. REG_15, arg);
  2539. /* mvc bpf_arg_off(16,%r15),0(%r1) */
  2540. _EMIT6(0xd20ff000 | bpf_arg_off, 0x1000);
  2541. }
  2542. j += 2;
  2543. }
  2544. }
  2545. /* stmg %r7,%r8,r7_r8_off(%r15) */
  2546. EMIT6_DISP_LH(0xeb000000, 0x0024, REG_7, REG_8, REG_15,
  2547. tjit->r7_r8_off);
  2548. /* stg %r14,r14_off(%r15) */
  2549. EMIT6_DISP_LH(0xe3000000, 0x0024, REG_14, REG_0, REG_15, tjit->r14_off);
  2550. if (flags & BPF_TRAMP_F_ORIG_STACK) {
  2551. /*
  2552. * The ftrace trampoline puts the return address (which is the
  2553. * address of the original function + S390X_PATCH_SIZE) into
  2554. * %r0; see ftrace_shared_hotpatch_trampoline_br and
  2555. * ftrace_init_nop() for details.
  2556. */
  2557. /* lgr %r8,%r0 */
  2558. EMIT4(0xb9040000, REG_8, REG_0);
  2559. } else {
  2560. /* %r8 = func_addr + S390X_PATCH_SIZE */
  2561. load_imm64(jit, REG_8, (u64)func_addr + S390X_PATCH_SIZE);
  2562. }
  2563. /*
  2564. * ip = func_addr;
  2565. * arg_cnt = m->nr_args;
  2566. */
  2567. if (flags & BPF_TRAMP_F_IP_ARG) {
  2568. /* %r0 = func_addr */
  2569. load_imm64(jit, REG_0, (u64)func_addr);
  2570. /* stg %r0,ip_off(%r15) */
  2571. EMIT6_DISP_LH(0xe3000000, 0x0024, REG_0, REG_0, REG_15,
  2572. tjit->ip_off);
  2573. }
  2574. /* lghi %r0,nr_bpf_args */
  2575. EMIT4_IMM(0xa7090000, REG_0, nr_bpf_args);
  2576. /* stg %r0,arg_cnt_off(%r15) */
  2577. EMIT6_DISP_LH(0xe3000000, 0x0024, REG_0, REG_0, REG_15,
  2578. tjit->arg_cnt_off);
  2579. if (flags & BPF_TRAMP_F_CALL_ORIG) {
  2580. /*
  2581. * __bpf_tramp_enter(im);
  2582. */
  2583. /* %r1 = __bpf_tramp_enter */
  2584. load_imm64(jit, REG_1, (u64)__bpf_tramp_enter);
  2585. /* %r2 = im */
  2586. load_imm64(jit, REG_2, (u64)im);
  2587. /* %r1() */
  2588. call_r1(jit);
  2589. }
  2590. for (i = 0; i < fentry->nr_links; i++)
  2591. if (invoke_bpf_prog(tjit, m, fentry->links[i],
  2592. flags & BPF_TRAMP_F_RET_FENTRY_RET))
  2593. return -EINVAL;
  2594. if (fmod_ret->nr_links) {
  2595. /*
  2596. * retval = 0;
  2597. */
  2598. /* xc retval_off(8,%r15),retval_off(%r15) */
  2599. _EMIT6(0xd707f000 | tjit->retval_off,
  2600. 0xf000 | tjit->retval_off);
  2601. for (i = 0; i < fmod_ret->nr_links; i++) {
  2602. if (invoke_bpf_prog(tjit, m, fmod_ret->links[i], true))
  2603. return -EINVAL;
  2604. /*
  2605. * if (retval)
  2606. * goto do_fexit;
  2607. */
  2608. /* ltg %r0,retval_off(%r15) */
  2609. EMIT6_DISP_LH(0xe3000000, 0x0002, REG_0, REG_0, REG_15,
  2610. tjit->retval_off);
  2611. /* brcl 7,do_fexit */
  2612. EMIT6_PCREL_RILC(0xc0040000, 7, tjit->do_fexit);
  2613. }
  2614. }
  2615. if (flags & BPF_TRAMP_F_CALL_ORIG) {
  2616. /*
  2617. * retval = func_addr(args);
  2618. */
  2619. /* lmg %r2,%rN,reg_args_off(%r15) */
  2620. if (nr_reg_args)
  2621. EMIT6_DISP_LH(0xeb000000, 0x0004, REG_2,
  2622. REG_2 + (nr_reg_args - 1), REG_15,
  2623. tjit->reg_args_off);
  2624. /* mvc stack_args_off(N,%r15),orig_stack_args_off(%r15) */
  2625. if (nr_stack_args)
  2626. _EMIT6(0xd200f000 |
  2627. (nr_stack_args * sizeof(u64) - 1) << 16 |
  2628. tjit->stack_args_off,
  2629. 0xf000 | tjit->orig_stack_args_off);
  2630. /* mvc tail_call_cnt(4,%r15),tccnt_off(%r15) */
  2631. _EMIT6(0xd203f000 | offsetof(struct prog_frame, tail_call_cnt),
  2632. 0xf000 | tjit->tccnt_off);
  2633. /* lgr %r1,%r8 */
  2634. EMIT4(0xb9040000, REG_1, REG_8);
  2635. /* %r1() */
  2636. call_r1(jit);
  2637. /* stg %r2,retval_off(%r15) */
  2638. EMIT6_DISP_LH(0xe3000000, 0x0024, REG_2, REG_0, REG_15,
  2639. tjit->retval_off);
  2640. /* mvc tccnt_off(%r15),tail_call_cnt(4,%r15) */
  2641. _EMIT6(0xd203f000 | tjit->tccnt_off,
  2642. 0xf000 | offsetof(struct prog_frame, tail_call_cnt));
  2643. im->ip_after_call = jit->prg_buf + jit->prg;
  2644. /*
  2645. * The following nop will be patched by bpf_tramp_image_put().
  2646. */
  2647. /* brcl 0,im->ip_epilogue */
  2648. EMIT6_PCREL_RILC(0xc0040000, 0, (u64)im->ip_epilogue);
  2649. }
  2650. /* do_fexit: */
  2651. tjit->do_fexit = jit->prg;
  2652. for (i = 0; i < fexit->nr_links; i++)
  2653. if (invoke_bpf_prog(tjit, m, fexit->links[i], false))
  2654. return -EINVAL;
  2655. if (flags & BPF_TRAMP_F_CALL_ORIG) {
  2656. im->ip_epilogue = jit->prg_buf + jit->prg;
  2657. /*
  2658. * __bpf_tramp_exit(im);
  2659. */
  2660. /* %r1 = __bpf_tramp_exit */
  2661. load_imm64(jit, REG_1, (u64)__bpf_tramp_exit);
  2662. /* %r2 = im */
  2663. load_imm64(jit, REG_2, (u64)im);
  2664. /* %r1() */
  2665. call_r1(jit);
  2666. }
  2667. /* lmg %r2,%rN,reg_args_off(%r15) */
  2668. if ((flags & BPF_TRAMP_F_RESTORE_REGS) && nr_reg_args)
  2669. EMIT6_DISP_LH(0xeb000000, 0x0004, REG_2,
  2670. REG_2 + (nr_reg_args - 1), REG_15,
  2671. tjit->reg_args_off);
  2672. /* lgr %r1,%r8 */
  2673. if (!(flags & BPF_TRAMP_F_SKIP_FRAME))
  2674. EMIT4(0xb9040000, REG_1, REG_8);
  2675. /* lmg %r7,%r8,r7_r8_off(%r15) */
  2676. EMIT6_DISP_LH(0xeb000000, 0x0004, REG_7, REG_8, REG_15,
  2677. tjit->r7_r8_off);
  2678. /* lg %r14,r14_off(%r15) */
  2679. EMIT6_DISP_LH(0xe3000000, 0x0004, REG_14, REG_0, REG_15, tjit->r14_off);
  2680. /* lg %r2,retval_off(%r15) */
  2681. if (flags & (BPF_TRAMP_F_CALL_ORIG | BPF_TRAMP_F_RET_FENTRY_RET))
  2682. EMIT6_DISP_LH(0xe3000000, 0x0004, REG_2, REG_0, REG_15,
  2683. tjit->retval_off);
  2684. /* mvc stack_size+tail_call_cnt(4,%r15),tccnt_off(%r15) */
  2685. _EMIT6(0xd203f000 | (tjit->stack_size +
  2686. offsetof(struct prog_frame, tail_call_cnt)),
  2687. 0xf000 | tjit->tccnt_off);
  2688. /* aghi %r15,stack_size */
  2689. EMIT4_IMM(0xa70b0000, REG_15, tjit->stack_size);
  2690. /* Emit an expoline for the following indirect jump. */
  2691. if (nospec_uses_trampoline())
  2692. emit_expoline(jit);
  2693. if (flags & BPF_TRAMP_F_SKIP_FRAME)
  2694. /* br %r14 */
  2695. _EMIT2(0x07fe);
  2696. else
  2697. /* br %r1 */
  2698. _EMIT2(0x07f1);
  2699. emit_r1_thunk(jit);
  2700. return 0;
  2701. }
  2702. int arch_bpf_trampoline_size(const struct btf_func_model *m, u32 flags,
  2703. struct bpf_tramp_links *tlinks, void *orig_call)
  2704. {
  2705. struct bpf_tramp_image im;
  2706. struct bpf_tramp_jit tjit;
  2707. int ret;
  2708. memset(&tjit, 0, sizeof(tjit));
  2709. ret = __arch_prepare_bpf_trampoline(&im, &tjit, m, flags,
  2710. tlinks, orig_call);
  2711. return ret < 0 ? ret : tjit.common.prg;
  2712. }
  2713. int arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *image,
  2714. void *image_end, const struct btf_func_model *m,
  2715. u32 flags, struct bpf_tramp_links *tlinks,
  2716. void *func_addr)
  2717. {
  2718. struct bpf_tramp_jit tjit;
  2719. int ret;
  2720. /* Compute offsets, check whether the code fits. */
  2721. memset(&tjit, 0, sizeof(tjit));
  2722. ret = __arch_prepare_bpf_trampoline(im, &tjit, m, flags,
  2723. tlinks, func_addr);
  2724. if (ret < 0)
  2725. return ret;
  2726. if (tjit.common.prg > (char *)image_end - (char *)image)
  2727. /*
  2728. * Use the same error code as for exceeding
  2729. * BPF_MAX_TRAMP_LINKS.
  2730. */
  2731. return -E2BIG;
  2732. tjit.common.prg = 0;
  2733. tjit.common.prg_buf = image;
  2734. ret = __arch_prepare_bpf_trampoline(im, &tjit, m, flags,
  2735. tlinks, func_addr);
  2736. return ret < 0 ? ret : tjit.common.prg;
  2737. }
  2738. bool bpf_jit_supports_subprog_tailcalls(void)
  2739. {
  2740. return true;
  2741. }
  2742. bool bpf_jit_supports_arena(void)
  2743. {
  2744. return true;
  2745. }
  2746. bool bpf_jit_supports_insn(struct bpf_insn *insn, bool in_arena)
  2747. {
  2748. /*
  2749. * Currently the verifier uses this function only to check which
  2750. * atomic stores to arena are supported, and they all are.
  2751. */
  2752. return true;
  2753. }
  2754. bool bpf_jit_supports_exceptions(void)
  2755. {
  2756. /*
  2757. * Exceptions require unwinding support, which is always available,
  2758. * because the kernel is always built with backchain.
  2759. */
  2760. return true;
  2761. }
  2762. void arch_bpf_stack_walk(bool (*consume_fn)(void *, u64, u64, u64),
  2763. void *cookie)
  2764. {
  2765. unsigned long addr, prev_addr = 0;
  2766. struct unwind_state state;
  2767. unwind_for_each_frame(&state, NULL, NULL, 0) {
  2768. addr = unwind_get_return_address(&state);
  2769. if (!addr)
  2770. break;
  2771. /*
  2772. * addr is a return address and state.sp is the value of %r15
  2773. * at this address. exception_cb needs %r15 at entry to the
  2774. * function containing addr, so take the next state.sp.
  2775. *
  2776. * There is no bp, and the exception_cb prog does not need one
  2777. * to perform a quasi-longjmp. The common code requires a
  2778. * non-zero bp, so pass sp there as well.
  2779. */
  2780. if (prev_addr && !consume_fn(cookie, prev_addr, state.sp,
  2781. state.sp))
  2782. break;
  2783. prev_addr = addr;
  2784. }
  2785. }