Linux kernel 4.13 introduced 4 more jump class variants. commit 92b31a9af73b3a3fc801899335d6c47966351830 Author: Daniel Borkmann <dan...@iogearbox.net> Date: Thu Aug 10 01:39:55 2017 +0200
bpf: add BPF_J{LT,LE,SLT,SLE} instructions For conditional jumping on unsigned and signed < and <= between a register and another register or immediate. Add these new constants to bpf.h, recognize them in bpf_disasm and update the testfile-bpf-dis1.expect file. Signed-off-by: Mark Wielaard <m...@klomp.org> --- lib/ChangeLog | 4 ++++ lib/bpf.h | 4 ++++ libcpu/ChangeLog | 5 +++++ libcpu/bpf_disasm.c | 26 +++++++++++++++++++++++++- tests/ChangeLog | 5 +++++ tests/testfile-bpf-dis1.expect.bz2 | Bin 1467 -> 1516 bytes 6 files changed, 43 insertions(+), 1 deletion(-) diff --git a/lib/ChangeLog b/lib/ChangeLog index 86a53d2..0914b2c 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,7 @@ +2018-11-04 Mark Wielaard <m...@klomp.org> + + * bpf.h: Add BPF_JLT, BPF_JLE, BPF_JSLT and BPF_JSLE. + 2018-07-04 Ross Burton <ross.bur...@intel.com> * color.c: Remove error.h, add system.h include. diff --git a/lib/bpf.h b/lib/bpf.h index db80a51..efb26f8 100644 --- a/lib/bpf.h +++ b/lib/bpf.h @@ -23,6 +23,10 @@ #define BPF_JSGE 0x70 #define BPF_CALL 0x80 #define BPF_EXIT 0x90 +#define BPF_JLT 0xa0 +#define BPF_JLE 0xb0 +#define BPF_JSLT 0xc0 +#define BPF_JSLE 0xd0 #define BPF_W 0x00 #define BPF_H 0x08 diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog index 86d2947..adebbef 100644 --- a/libcpu/ChangeLog +++ b/libcpu/ChangeLog @@ -1,3 +1,8 @@ +2018-11-04 Mark Wielaard <m...@klomp.org> + + * bpf_disasm.c (bpf_disasm): Recognize BPF_JLT, BPF_JLE, BPF_JSLT + and BPF_JSLE. + 2018-02-09 Joshua Watt <jpewhac...@gmail.com> * i386_disasm.c (i386_disasm): Use FALLTHOUGH macro instead of diff --git a/libcpu/bpf_disasm.c b/libcpu/bpf_disasm.c index 054aba2..3d92d01 100644 --- a/libcpu/bpf_disasm.c +++ b/libcpu/bpf_disasm.c @@ -1,5 +1,5 @@ /* Disassembler for BPF. - Copyright (C) 2016 Red Hat, Inc. + Copyright (C) 2016, 2018 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -346,6 +346,18 @@ bpf_disasm (Ebl *ebl, const uint8_t **startp, const uint8_t *end, case BPF_JMP | BPF_JSGE | BPF_K: code_fmt = J64(REGS(1), >=, IMMS(2)); goto do_dst_imm_jmp; + case BPF_JMP | BPF_JLT | BPF_K: + code_fmt = J64(REG(1), <, IMMS(2)); + goto do_dst_imm_jmp; + case BPF_JMP | BPF_JLE | BPF_K: + code_fmt = J64(REG(1), <=, IMMS(2)); + goto do_dst_imm_jmp; + case BPF_JMP | BPF_JSLT | BPF_K: + code_fmt = J64(REGS(1), <, IMMS(2)); + goto do_dst_imm_jmp; + case BPF_JMP | BPF_JSLE | BPF_K: + code_fmt = J64(REGS(1), <=, IMMS(2)); + goto do_dst_imm_jmp; case BPF_JMP | BPF_JEQ | BPF_X: code_fmt = J64(REG(1), ==, REG(2)); @@ -368,6 +380,18 @@ bpf_disasm (Ebl *ebl, const uint8_t **startp, const uint8_t *end, case BPF_JMP | BPF_JSGE | BPF_X: code_fmt = J64(REGS(1), >=, REGS(2)); goto do_dst_src_jmp; + case BPF_JMP | BPF_JLT | BPF_X: + code_fmt = J64(REG(1), <, REG(2)); + goto do_dst_src_jmp; + case BPF_JMP | BPF_JLE | BPF_X: + code_fmt = J64(REG(1), <=, REG(2)); + goto do_dst_src_jmp; + case BPF_JMP | BPF_JSLT | BPF_X: + code_fmt = J64(REGS(1), <, REGS(2)); + goto do_dst_src_jmp; + case BPF_JMP | BPF_JSLE | BPF_X: + code_fmt = J64(REGS(1), <=, REGS(2)); + goto do_dst_src_jmp; case BPF_LDX | BPF_MEM | BPF_B: code_fmt = LOAD(u8); diff --git a/tests/ChangeLog b/tests/ChangeLog index d5a0656..5edd616 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2018-11-04 Mark Wielaard <m...@klomp.org> + + * testfile-bpf-reloc.expect.bz2: Update with new expected jump + variants. + 2018-10-18 Mark Wielaard <m...@klomp.org> * run-readelf-n.sh: New test. diff --git a/tests/testfile-bpf-dis1.expect.bz2 b/tests/testfile-bpf-dis1.expect.bz2 index 21b55e94431e96914d38ad86683b54f29c58c617..61a8afb1f7a06ab2ad261d7c60e1b330611310a2 100644 GIT binary patch literal 1516 zcmZ9LdpOg39LIk%F{CqcS=6yPa~qEcCvs_6GGf9WZ837orBTYWghC5>kmeS`$elUI zWlQ8zxu$Ru4#O<f3=wiBo^*bm{^&gC_1EY7eBR&B_xpK&KVKVikeQ)1Nz;wA$;iC~ zsMhh~uEYJJzl+2HK&G>k=kEjaRI_qHc5DsR%Tm^+j|c{*hBahQnH(>wq2h(YH2HiV z*o{2EN7@~_&isC}rh2=$8Vi8PnqV})EmR~H-L;Y3Tc;E+P#x0THf??Lq1McS<~S&J zbn~pO31Q6bn`@L>N`;9r0ClReM9S&FdI*R-<9qJ?>vSLpI+gxA4u?BkJpVx;+})kX zeB;Q8%cVjrbH>F#u;cZo#JrmKf}=fI1vwvHL~zTdAM2~;_@ZiSy@&r=L^OKNOmXRL zLDN6B?de-bjEvw2Lr6;?i0>#C5hsC!Bulf)TruN`izKhiEB?Xmjmx6J&kDd{IDo+d zEm-I{Jl+s0_)=_tTgdHW6|~<{ji&MY<a=)&d)wGwZyB=|A!=WZo)xiK6%7^v<&Ov} z6KUIFGp%8)(d~EBx|K?N{jtE(^C2}1yqiD6zH|VIM?xSzdizqur7Jt%-Xy*g1E7N$ zpi>s@SNk@#f|*5=835#98xjB{gEbpHNaKz(F_cXK(QQjqcyYkWdm7XV-vY3>0}SUz z59jjt-_eXf#}XGzse_GrN1mcQ`AvyEj&j<0Qo3ZLVh*h&rsJa<@Qbnn-QFIDFj(?_ zxN#?_fy~#N)!wPsoV%_F_pWy7)Ii3=Sr$wKW<w<U5K0V%Y*y)UkXY}ESBVqxIu=DZ zLNHS0#W~M7$T{(|as-0q)AoNpaZI<3_<Y`mXbevQZ&gPqb(|%;6VE;{@Ojpue#Cqp zffZ-qJr)>vt)Z(Ahay1DPatbvHLrEEL&;Rv?EE)umgYr7uVJd+p@7_&YOSWR&qd_$ zjvaw%H)=<ZzU9s?iOe(uiwF>O^Bfy^Q%E-X<tMIkubH4IN>CIz{40{a|7$)eXSs3M zidh}|o?fVdLZOsMMh^vMLsyb*pZKF>PF$Ptikwe3<;8v(tnmDrH<?2UD580W7^g%g z*r%OxqnDx4;v>R}`-+Q7tWf{D6)Ev&CE^Lz#+G`|MZ6+E67M><U}HEcuQEQFbFZeU z1uZWHrjZ#dd;AFPd9kaF1m%vMRii$!P;zhnBAA#P0af`bav<=ZMSTDi9fz~K+6VSs zxb~anK_jbTXG2)nyBhC2;(}10exj~`%HdKue|JL+g1}>(WLN7c(^O8=Q2481s7h!U zi=A}&3<_owTHhMXZSKtvPK)d{gxSFFT6?X8)cl}IFsb}Fc#g-PdEJ-(l(x!$k)#r{ zf3k^^Rn7_}kFy`$+#BFmAl=}9!`b!!d?5hn(UnsLHLOsIs9jK*Zpudkcr@b-&uoN& zM`r-Y|7!mqtKDi^PEL08^)fP4Rkti`@01DIH<;DemetwXzuZ#Wc4Mjju_~W-K=HEQ zc_|dyAG)-5*pB&S!i&QV*Z;OfTjix6X`@vjE+mr3`}S<$Qfudk2S~SfQkazSCqohH zTB+sQ<-(Ja?W=U@tZ{bg^K-pQ&Ba~iRZg)_RvyhCavgLvr0Zbp0-v6VjLd+b8F(05 zE#BJw*rcT1C(hDZ-+qHpD{}BMCb95n$F4;~4<L_6XC9|u18Fo`^z21&-l9ypL1(%E zu-*8NY$uGUIwlP8OwJ`;nn$=sw1!K2WSN^&IkmBMw`ngO*ei=E<9}vpquR_#53WfB z`oP@E6m9A|cNPDzy}(JRa!(doye7JoK$bl2tWRT-6bYe&wV$ge!>u%uzM`>!6edmq zqmJCj7I?G(M0+O1wM&}`FdQUos=TmLL}EIo%3UT^j^(H>d9qWw>0`C^;miabB^1~} dD;D%0i3PL<-0rt!#NL^{@2r5f^e^WE{{nM7vh4r> literal 1467 zcmZXUdsNbA7{`Bj$Gm`MGuJUNgfvSj^ODlQF$Yv$5Hv)MAv*76mR34NQzJE}pq9=Y znpc!+3SMWlO3yY$E4&=FWLjqGl$9x~Q@S7ZPv`9O*Y~{d^PJ~>p6_#Buiz+mEP;Uz zU|1!Y5r8j?mE3c%@YGGU4ghSC$&?(Hf#u<_hXiHXNjh!MHq#DarC+qD+}HO{jtc>4 zcjJN(Qh_j{3U@B}FJ{Q-w6E*{4SDIgBaJuK5T5mLAw+V;S%JnY*8I(?)^NlTYmzen zSQ!J~keixR0Tk={m<v@!QD72_MuqObi1rOYD0X>s*}$XzVmKTwS3g(&qgn|`d)^ZT zO@3(pD4ylRJZ`ouw4K6hggOE}*LCVi`-1D<f!w)kyqLvtwPd}3u`gjc?p~-w=VR8# z@LRCRNQ4txn>7g1CxP$)HektZX0nR|+bf<OebX&z+aBtAI<BXa3UOl@35^@|adb!c z=*sP?s>016Sy;x8`o3-VXJ?}wr)L?|>S&o@^bTL7p}ca!5SNH`YHN?#w)CXK9b<di zci1B-uyR?xZ?e^mPUBN50h(=l*`y7hN+EN$@;`L#Rge2|P3{zdogaE{-u(QSKmuU$ zH~>I=3Z7|m1aYM;V@IB*g{@7{Ph?cLDBV8b0l@empoP#Tqgw+jt_t3w_!C?@u{2OL zl+}mLX4;R2T%KEajoQ_0l}|0+<z?)on(SksnnJo(1O09J5kWXAdPR4nN{=Ft7Onr@ z=y0Ggm~xNeS~hw-SOBdc{q{@sk^R<Jrd;O5yiKO}J0+84bXSW9LlCWddsb&s)pf3d zUR)Fp=8oc%QDq80p9n8<j6Zzm{<6OInOv9-kw|1LgQjik#}>qggPncGP768nai=)8 zqC~tz8Iy=(RzTLJjWEdco%?fRW70Y_i-b|*3{a^wY4urw`%qHlyk)klLpJhz!%`+Y z`UXc{5N_Fz%~P;oTDmOeqc<ty^ANaRch+}u4swe_xhBEw0kVsOG`ZwCN<W!8JtnPE z!S=jdQ3bad>AdvUM<Hx=!$Nz(=mV8YwaS~_Dy1wPYmmS&AYrQIFluGkyX75;H`R5j zm)x)OmfT$iTv#MDEE|daSefSq%f?uHCdVzdmUPaR@KWG*l+?ugPAD^|P8I=Cq*<)N zPm**O(8CW7%7Y&ei9x)~kQy7C?U{(;GXw=-+_oJ?LYZMS4Nhbtia-tBk$9-3sa=s8 zl<(1bIUeUa6~YFqLOT+kI$s+PO$4iFBMnHX=#r)~MnoBd<8bj{sB5}aY0IJtZZYuK znU}k@792j&=Yu#lc&t~II;}3(aGm>^1CTb#;NV;t!zbyw9ff)zC57&%rP<z^G&T|R zlTQZlpGE&q;xeE!#nw6S+HYkI4GZkdQ#07tGmh)s_Gr=CcxbY>$Yn_!TcdDB@S(d& z+Eaf+@#T=UaBI(Vucn5}->%Ll;5IgKZqM>p=eaf@$g_FS9`50qtQ1BBnC|wha7@~q zG4$_HNu7;_`K_?7edk|@L^4E<p6TYs5APpKJ3M-qju*zuPj$ER$LWAQ`0~as!dsI} zn2zZTaLgGrrR7a6GnKhvz(q*a%5*!JP?ruu?Bfz6BO}4VNX4;KQ;j9wpKi2A>K(5x z6mRrECe^ZdrA13pesZ6d$*bXLRqLx?M=+<Gt=g#FOLcan+Dm)w2mQ!f3UYL+PK>_@ zGUu_Y322^bAp0+xSq**;7qc+AwbYFsq(0OC^P*^VG;rZX#qdL+7DcFQ$n&sGrmp}N z)ZJf{+&0{;g_m6agKm2?m=^YqvOJ0q=uQ_EM(pA16;93P=ET5<eu}CUm15TE<bVdv b_h0}6^y@|4=%LGB&90Cd49&EC*d)Y%<KBuh -- 1.8.3.1