alnsn
db4395c55a
Don't trigger BJ_ASSERT(false) on invalid BPF_Jxxx opcode in jmp_to_op().
...
This change helps survive AFL fuzzing without calling bpf_validate() first.
Also change alu_to_op() function to have a similar interface.
2016-07-29 20:29:38 +00:00
alnsn
44dbc048e9
Adapt to the new version of sljit@r313.
2016-05-29 17:20:22 +00:00
alnsn
40bda2ee5c
Replace the nsaveds() function with #define NSAVEDS 3. No functional change.
...
Patch from Michael McConville.
2015-12-29 21:49:58 +00:00
alnsn
84db77b722
Copyright year.
2015-02-14 21:32:46 +00:00
alnsn
321f9dd4e2
In some implementations pc->k is signed. Cast it to uint32_t before comparing.
2015-02-14 21:17:05 +00:00
alnsn
7674f27971
Properly track initialisation of registers for BPF_JMP instructions.
2015-02-14 21:14:56 +00:00
alnsn
9c78c5707a
Don't emit wrapped-around reads. They're dead code but dead code elimination
...
logic isn't smart enough to figure it out.
Found by afl fuzzer http://lcamtuf.coredump.cx/afl/ .
2015-02-13 15:59:17 +00:00
alnsn
f34037ede3
Fix bugs found by afl fuzzer http://lcamtuf.coredump.cx/afl/ .
2015-02-12 23:09:55 +00:00
christos
3eceacff0e
rename variable to avoid conflict with "div"
2015-01-15 16:31:05 +00:00
justin
a25ec9451f
Help gcc by initialising variable
2014-12-08 00:44:45 +00:00
alnsn
1bc241b440
Implement BPF_MOD.
2014-11-20 20:31:22 +00:00
alnsn
e7d5850261
Implement BPF_ALU+BPF_MOD-BPF_K when pc->k is a power of 2. Get rid of divt
...
and divw arguments in emit_moddiv(), they're accessible via the pc argument.
2014-11-20 19:18:52 +00:00
alnsn
e888d0e817
Follow argument convension of other emit_xxx() functions.
2014-11-20 14:35:01 +00:00
christos
bca1938abc
Add BPF_MOD/BPF_XOR (untested, needs work)
2014-11-19 19:34:43 +00:00
alnsn
80a2991627
Don't use saved EREG registers because sljit 0.91 can generate
...
bogus code on amd64. The A and X registers are saved on the stack.
The most recent version of sljit fixes bogus code generation but
it's not backward compatible with sljit 0.91.
2014-07-26 11:23:46 +00:00
alnsn
9f32be6c56
For P[X+0] load, don't emit wrap around check and copy X intead of emitting X+0.
2014-07-24 22:54:38 +00:00
alnsn
5e176a43dc
Two tweaks: don't use a temporary register to dereference the err agrument
...
after xcall and don't generate ((tmp1 & 0xf) << 2) twice in emit_msh().
2014-07-22 08:29:51 +00:00
alnsn
6435b9414c
Don't use scratch registers for X and to restore A after BPF_COPX call.
2014-07-22 08:20:08 +00:00
alnsn
7d10db2303
Refactor BPF_COPX code. New version doesn't load buf and buflen after copx call.
2014-07-13 21:54:46 +00:00
alnsn
981f777cfd
Don't use BJ_TMP2REG for 32bit packet reads. Assign this register to (buf+X)
...
in BPF_LD+BPF_IND and save one instruction.
2014-07-13 18:48:27 +00:00
alnsn
4c9cf960fe
emit_xcall: check overflow by comparing X with (UINT32_MAX - pk->k), restore
...
the A register after checking that xcall succeeded.
2014-07-12 20:14:18 +00:00
alnsn
ea84cea2f2
Initialise status to avoid -Wuninitialized warning.
2014-07-12 16:52:57 +00:00
alnsn
d35700dd8f
Some small changes: add missing error checks; move sjump initialisation away
...
from optimize(); +BJ_HINT_PKT, -BJ_HINT_IND; tweak comments.
2014-07-12 16:13:57 +00:00
alnsn
b81423b783
Handle overflow in BPF_LD+BPF_IND for mbuf chains and make two minor changes:
...
move sljit_emit_return() to generate_insn_code() and use a different register
for checking errors after xcall.
2014-07-11 20:43:33 +00:00
alnsn
b8f42e532b
Most filter programs in the kernel need 3 scratch registers.
2014-07-08 11:30:31 +00:00
alnsn
b7e8e67d4c
Review some SLJIT_MOV instructions with respect to width.
2014-07-05 11:13:13 +00:00
alnsn
24d883a5bc
Add optimization hints. They replace nscratches and ncopfuncs and improve
...
readability.
2014-07-04 21:32:08 +00:00
alnsn
c676220d8a
Move the main loop in bpfjit_generate_code() to a new function and make few
...
small changes.
2014-07-01 16:18:55 +00:00
alnsn
c9a2e5bb28
Default initialize external memwords.
...
This change doesn't affect performance of valid bpf kernel programs
because bpf_filter_ext() checks that all memwords are initialized
explicitly.
2014-06-25 13:53:40 +00:00
alnsn
6ba0a195e1
New jitcode takes two arguments.
2014-06-25 11:58:15 +00:00
alnsn
e8d0d0ec8c
Use SLJIT_MOV_P to copy extmem pointer.
2014-06-25 11:13:28 +00:00
rmind
296dce2c93
bpfjit_generate_code: emit the instruction correctly.
2014-06-25 01:21:36 +00:00
rmind
dd10cc70db
- Improve the comments in bpf.h and KNF a little.
...
- Rename bpf_ctx_t member noinit to preinited (reflects the meaning better).
2014-06-24 22:19:36 +00:00
alnsn
19fed70d36
Implement copfuncs and external memory in bpfjit.
2014-06-24 10:53:30 +00:00
alnsn
33abe179f5
Update code to the latest sljit version.
2014-06-17 16:52:33 +00:00
alnsn
08d17fbe34
Enable ABC optimization when one branch returns 0.
2014-05-23 22:04:09 +00:00
alnsn
a9f8710044
Loads at offsets UINT32_MAX or greater are unreachable.
2014-05-23 19:51:16 +00:00
alnsn
1bf51582a4
Implement unconditional jump to "return 0" for loads at UINT32_MAX+1 or greater.
2014-05-23 19:11:22 +00:00
alnsn
74e580d299
Some small changes in preparation for a bigger change.
...
- typedef for ABC variables and MAX_ABC_LENGTH constant,
- cast pc->k to uint32_t in more places,
- whitespaces.
2014-05-22 13:35:45 +00:00
alnsn
98f8ebfbda
Refactor bpfjit code.
...
- Implement Array Bounds Check Elimination for packet bytes.
- Track initialization of registers and memwords.
- Remove "bj_" prefix from struct members.
- Shorten "BPFJIT_" prefix to "BJ_".
- Other small improvements.
2014-05-15 22:20:08 +00:00
pooka
c4a2c1fa88
XXXgcc Wuninitialized kludge
2013-12-15 21:18:01 +00:00
rmind
df5750d833
Fix the bpfjit build.
2013-11-15 13:56:21 +00:00
rmind
d0748eb941
- Add bpf_args_t and convert bpf_filter_ext() to use it. This allows the
...
caller to initialise (and re-use) the memory store.
- Add bpf_jit_generate() and bpf_jit_freecode() wrappers.
2013-11-15 00:12:44 +00:00
rmind
24e8f8767c
bpfjit: replace malloc with kmem, KNF a little, add RCS ID.
2013-09-20 23:19:52 +00:00
alnsn
85151d38ab
Add RCSID and fix -Wsign-compare warnings.
2012-11-10 22:12:31 +00:00
alnsn
e8c0d6c662
Add bpfjit and enable it for amd64.
2012-10-27 22:36:11 +00:00