This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] libcpu: Recognize bpf jump variants BPF_JLT, BPF_JLE, BPF_JSLT and BPF_JSLE


Linux kernel 4.13 introduced 4 more jump class variants.

  commit 92b31a9af73b3a3fc801899335d6c47966351830
  Author: Daniel Borkmann <daniel@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 <mark@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  <mark@klomp.org>
+
+	* bpf.h: Add BPF_JLT, BPF_JLE, BPF_JSLT and BPF_JSLE.
+
 2018-07-04  Ross Burton <ross.burton@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  <mark@klomp.org>
+
+	* bpf_disasm.c (bpf_disasm): Recognize BPF_JLT, BPF_JLE, BPF_JSLT
+	and BPF_JSLE.
+
 2018-02-09  Joshua Watt  <JPEWhacker@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  <mark@klomp.org>
+
+	* testfile-bpf-reloc.expect.bz2: Update with new expected jump
+	variants.
+
 2018-10-18  Mark Wielaard  <mark@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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]